import json from .base_hub_protocol import BaseHubProtocol from ..messages.message_type import MessageType from json import JSONEncoder from signalrcore.helpers import Helpers class MyEncoder(JSONEncoder): # https://github.com/PyCQA/pylint/issues/414 def default(self, o): if type(o) is MessageType: return o.value data = o.__dict__ if "invocation_id" in data: data["invocationId"] = data["invocation_id"] del data["invocation_id"] if "stream_ids" in data: data["streamIds"] = data["stream_ids"] del data["stream_ids"] return data class JsonHubProtocol(BaseHubProtocol): def __init__(self): super(JsonHubProtocol, self).__init__("json", 1, "Text", chr(0x1E)) self.encoder = MyEncoder() def parse_messages(self, raw): Helpers.get_logger().debug("Raw message incomming: ") Helpers.get_logger().debug(raw) raw_messages = [ record.replace(self.record_separator, "") for record in raw.split(self.record_separator) if record is not None and record != "" and record != self.record_separator ] result = [] for raw_message in raw_messages: dict_message = json.loads(raw_message) if len(dict_message.keys()) > 0: result.append(self.get_message(dict_message)) return result def encode(self, message): Helpers.get_logger()\ .debug(self.encoder.encode(message) + self.record_separator) return self.encoder.encode(message) + self.record_separator