Esempio n. 1
0
    def test_transform_json_types(self):
        d = {
            "int": 1,
            "str": "qwerty",
            "list": [1, 2, 3],
            "dict1": {
                "a": 1,
                "b": 2
            },
            "datetime": tools.datetime.now(),
            "byte": b"qwerty",
            "id": tools.ObjectId(),
            "dict2": None
        }
        d["dict2"] = d.copy()
        try:
            tools.json.dumps(d)
            self.fail()
        except TypeError:
            pass

        d2 = tools.transform_json_types(d)
        s = tools.json.dumps(d2, indent=2)
        print(s)
        self.assertDictEqual(d, tools.transform_json_types(d2, direction=1))
Esempio n. 2
0
def dejsonify(data: str,
              need_transform=False) -> Union[dict, list, str, int, float]:
    """
    Wrapper to json_lib.loads and tools.transform_json_types functions

    :param data:
    :param need_transform:
    :return:
    """
    data = json_lib.loads(data)
    if need_transform:
        transform_json_types(data, direction=1)
    return data
Esempio n. 3
0
 def test_register_type(self):
     d = {"set": {1, 2, 3}}
     try:
         tools.json.dumps(tools.transform_json_types(d))
         self.fail()
     except TypeError:
         pass
     tools.register_type(set, (list, set))
     print(tools.json.dumps(tools.transform_json_types(d)))
     self.assertDictEqual(
         d,
         tools.transform_json_types(tools.transform_json_types(d),
                                    direction=1))
Esempio n. 4
0
def jsonify(status: int,
            data: Union[dict, list],
            need_transform=False) -> Response:
    """
    make_response wrapper to JSON format

    :param status:
    :param data:
    :param need_transform:
    :return:
    """
    if need_transform:
        transform_json_types(data, direction=0)
    resp = make_response(json_lib.dumps(data), status)
    resp.mimetype = "application/json"
    return resp
Esempio n. 5
0
        def gen():
            global _queue
            yield ServerSentEvent('INIT').encode()

            for result in _queue:
                if isinstance(result, dict) or isinstance(result, list):
                    result = json.dumps(transform_json_types(result))
                yield ServerSentEvent(str(result)).encode()
Esempio n. 6
0
    def _spawn(self):
        try:
            resp: urllib3.HTTPResponse = self.service.session.request(
                "POST",
                self.service.url.path + "/transactions",
                body=json.dumps({
                    "timeout":
                    self.service.timeout,
                    "callback-url":
                    f"{self.parent.self_url}/{self.parent.id}"
                }),
                timeout=self.service.timeout)  # BLOCK, timeout
        except urllib3.exceptions.HTTPError as e:
            self.fail.set()  # EMIT(fail)
        else:
            if resp.status != 200:
                self.fail.set()  # EMIT(fail)
            else:
                js = json.loads(resp.data)
                transform_json_types(js, direction=1)
                # TODO: validate

                debug_SSE.event({
                    "event": "init_child_2",
                    "t": datetime.now(),
                    "data": {
                        "chid": self.id,
                        **js
                    }
                })  # DEBUG init_child_2

                self.remote_id = js["_id"]
                self.key = js["transaction-key"]
                self.parent.childes[self.key] = self
                self.ping_timeout = js["ping-timeout"] / 1000

                self.parent.threads.add(self.do_ping())  # THREAD:1, loop
                self.parent.threads.add(self.wait_response())  # THREAD:1
                self.parent.threads.add(self.wait_done())  # THREAD:1
Esempio n. 7
0
 def test1(self):
     d = {
         'date': tools.datetime.now(),
         '_id': tools.ObjectId(),
         'bytes': b"1234567890",
         'dict': {
             '_id': tools.ObjectId(),
             '_id2': tools.ObjectId()
         },
         'list': [b"1", b"2", b"3", b"4"],
         'many_dict': {
             '_id': tools.ObjectId(),
             'd': {
                 'a': 1,
                 'b': b'hello'
             },
             'd2': []
         }
     }
     d0 = deepcopy(d)
     tools.transform_json_types(d)
     tools.transform_json_types(d, direction=1)
     self.assertDictEqual(d0, d)
Esempio n. 8
0
 def encode(self) -> bytes:
     if self.data is not None:
         data = json.dumps(transform_json_types(self.data))
     else:
         data = " "
     return bytes(str(self.header) + "\n" + data, encoding="utf-8") + b"\0"