コード例 #1
0
    def test_none_compression(self):
        codecs = compression.registry.compressors
        self.assertIn(None, codecs)

        # check exception is raised when bytes are not passed in
        with self.assertRaises(Exception) as cm:
            compression.compress({})
        self.assertIn("Can only compress bytes", str(cm.exception))

        # perform roundtrip check
        content_type, payload = compression.compress(TEST_DATA)
        self.assertIsNone(content_type)
        self.assertEqual(TEST_DATA, payload)
        content_type, d = compression.decompress(payload)
        self.assertIsNone(content_type)
        self.assertEqual(d, TEST_DATA)
コード例 #2
0
    def test_snappy_compression(self):
        convenience_name = "snappy"
        mime_type = compression.COMPRESSION_SNAPPY

        # check exception is raised when bytes are not passed in
        with self.assertRaises(Exception) as cm:
            compression.compress({}, mime_type)
        self.assertIn("Can only compress bytes", str(cm.exception))

        # perform roundtrip check
        for c_name in (convenience_name, mime_type):
            with self.subTest(f"Check snappy compression roundtrip using {c_name}"):
                content_type, payload = compression.compress(TEST_DATA, c_name)
                self.assertEqual(content_type, mime_type)
                self.assertNotEqual(TEST_DATA, payload)
                content_type, d = compression.decompress(payload, content_type)
                self.assertEqual(content_type, mime_type)
                self.assertEqual(d, TEST_DATA)
コード例 #3
0
    def test_compression_roundtrip(self):
        codecs = compression.registry.compressors
        for name, _settings in codecs.items():
            with self.subTest(f"Check {name} compression roundtrip"):
                convenience_name = name
                mime_type = compression.registry.name_to_type[name]

                # The convenience name or the content_type can be used when
                # specifying compression method. Check both.
                for c_label in (convenience_name, mime_type):
                    content_type, payload = compression.compress(TEST_DATA, c_label)
                    self.assertEqual(content_type, mime_type)
                    if c_label is None:
                        self.assertEqual(TEST_DATA, payload)
                    else:
                        self.assertNotEqual(TEST_DATA, payload)
                    content_type, d = compression.decompress(payload, content_type)
                    self.assertEqual(content_type, mime_type)
                    self.assertEqual(d, TEST_DATA)
コード例 #4
0
ファイル: utils.py プロジェクト: JohnSitarski/gestalt
def decode_payload(
    data: bytes,
    compression: Optional[str] = None,
    content_type: Optional[str] = None,
    content_encoding: Optional[str] = None,
    type_identifier: Optional[int] = None,
) -> Any:
    """ Decode a message payload

    :param data: The message payload data to decode.

    :param content_type: A string specifying the message content type. By
      default the value is None.

    :param compression: An optional string specifying a compression mime-type.

    :param type_identifier: An integer that uniquely identifies a
      registered message.
    """

    if compression:
        try:
            _mime_type, data = decompress(data, compression)
        except Exception as exc:
            raise Exception(
                f"Error decompressing payload using {compression}: {exc}"
            ) from None

    try:
        payload = loads(data,
                        content_type,
                        content_encoding,
                        type_identifier=type_identifier)
    except Exception as exc:
        raise Exception(
            f"Error decoding payload with content-type={content_type}: {exc}"
        ) from None

    return payload
コード例 #5
0
 def test_decompress_with_invalid_name_or_type(self):
     with self.assertRaises(Exception) as cm:
         compression.decompress(b"a", "invalid")
     self.assertIn("Invalid compressor", str(cm.exception))