You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
bazarr/libs/signalrcore/protocol/json_hub_protocol.py

51 lines
1.6 KiB

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