Exemple #1
0
    def pack(self):
        length = get_length(self.val)
        lengthBytes = self.LENGTH_STRUCT.pack(length)
        if self.val:
            return lengthBytes + bytes(self.val)

        return lengthBytes
Exemple #2
0
    def pack(self):
        length = get_length(self.val)
        lengthBytes = self.LENGTH_STRUCT.pack(length)

        if self.val:
            return lengthBytes + self.val.encode("utf-8")

        return lengthBytes
Exemple #3
0
    def pack(self):
        buf = BytesIO()
        buf.write(array_length_struct.pack(get_length(self.val)))

        payload_size = array_length_struct.size
        for v in self.val:
            if not isinstance(v, type_):
                raise TypeError(f"Incompatible type {v.__class__.__name__}.")
            buf.write(v.pack())
            payload_size += v.size

        return buf.getvalue()
Exemple #4
0
    def unpack(self, data):
        length = get_length(data)

        if length < self.LENGTH_STRUCT.size:
            raise ValueError(f"size too short: {length}.")

        payload_length = self.LENGTH_STRUCT.unpack(data[: self.LENGTH_STRUCT.size])[0]

        if length < self.LENGTH_STRUCT.size + payload_length:
            raise ValueError(f"incomplete field, size too short: {length}.")

        self.val = bytes(
            data[self.LENGTH_STRUCT.size : self.LENGTH_STRUCT.size + payload_length]
        ).decode("utf-8")

        return self.LENGTH_STRUCT.size + payload_length
Exemple #5
0
    def unpack(self, data):
        data = memoryview(data)

        length = get_length(data)

        try:
            payload_length = self.LENGTH_STRUCT.unpack(data[: self.LENGTH_STRUCT.size])[
                0
            ]
        except struct.error:
            raise ValueError(f"size too short: {get_length(data)}.")

        if length < self.LENGTH_STRUCT.size + payload_length:
            raise ValueError(f"incomplete field, size too short: {length}.")

        self.val = data[
            self.LENGTH_STRUCT.size : self.LENGTH_STRUCT.size + payload_length
        ].tobytes()

        return self.LENGTH_STRUCT.size + payload_length
 def test_get_length_dict(self):
     self.assertEqual(get_length({"hello": "world"}), 1)
 def test_get_length_tuple(self):
     self.assertEqual(get_length((1, 2, 3)), 3)
 def test_get_length_list(self):
     self.assertEqual(get_length([]), 0)
 def test_get_length_invalid_type(self):
     with self.assertRaises(ValueError):
         get_length(object())
 def test_get_length_none_type(self):
     self.assertEqual(get_length(None), 0)
 def test_get_length_bytes_io(self):
     bio = io.BytesIO(b"wlfae;ksddas.fafjew")
     self.assertEqual(get_length(bio), bio.getbuffer().nbytes)
 def test_get_length_str(self):
     s = "this is frank speaking."
     self.assertEqual(get_length(s), len(s))
 def test_get_length_bytes(self):
     b = b"qwldkjo;aiealiewfu"
     self.assertEqual(get_length(b), len(b))
 def test_get_length_memoryview(self):
     mv = memoryview(b"awekf;jawlekfa")
     self.assertEqual(get_length(mv), mv.nbytes)
Exemple #15
0
 def len_(self):
     return get_length(self.val)
Exemple #16
0
 def size(self):
     return self.LENGTH_STRUCT.size + get_length(self.val)