Example #1
0
    def test_image_jsonify_legacy(self):
        s = Serializer()

        example_png = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5/hPwAIAgL/4d1j8wAAAABJRU5ErkJggg=="
        test_str_2 = s.jsonify('image/png', example_png)

        assert test_str_2 == f"data:image/png;base64,{example_png}"
Example #2
0
    def to_bytes(self, compress: bool = True) -> bytes:
        """Method to serialize to bytes for storage in the activity detail db

        Returns:
            bytes
        """
        dict_data = self.to_dict(compact=True)

        # Serialize data items
        serializer_obj = Serializer()
        for mime_type in dict_data['d']:
            dict_data['d'][mime_type] = serializer_obj.serialize(
                mime_type, dict_data['d'][mime_type])

            # Compress object data
            if compress:
                if type(dict_data['d'][mime_type]) != bytes:
                    raise ValueError(
                        "Data must be serialized to bytes before compression")

                dict_data['d'][mime_type] = blosc.compress(
                    dict_data['d'][mime_type],
                    typesize=8,
                    cname='blosclz',
                    shuffle=blosc.SHUFFLE)

        # Base64 encode binary data while dumping to json string
        return json.dumps(dict_data,
                          cls=ActivityDetailRecordEncoder,
                          separators=(',', ':')).encode('utf-8')
Example #3
0
    def test_image_base64_png(self):
        """Test the image base64 serializers - png"""
        s = Serializer()

        example_png = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5/hPwAIAgL/4d1j8wAAAABJRU5ErkJggg=="

        test_bytes = s.serialize('image/png', example_png)
        assert type(test_bytes) == bytes

        test_str = s.deserialize('image/png', test_bytes)
        assert type(test_str) == str
Example #4
0
    def test_image_jsonify_not_legacy(self):
        s = Serializer()

        example_png = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5/hPwAIAgL/4d1j8wAAAABJRU5ErkJggg=="

        test_bytes = s.serialize('image/png', example_png)
        assert type(test_bytes) == bytes

        test_str = s.deserialize('image/png', test_bytes)

        test_str_2 = s.jsonify('image/png', test_str)
        assert test_str_2 == f"data:image/jpeg;base64,{test_str}"
Example #5
0
    def jsonify_data(self) -> Dict[str, Any]:
        """Method to convert just the data to JSON safe dictionary

        Returns:
            dict
        """
        dict_data: dict = dict()

        # jsonify the data
        serializer_obj = Serializer()
        for mime_type in self.data:
            dict_data[mime_type] = serializer_obj.jsonify(
                mime_type, self.data[mime_type])

        # At this point everything in dict_data should be ready to go for JSON serialization
        return dict_data
Example #6
0
    def test_text_plain(self):
        """Test the text/plain serializer"""
        s = Serializer()

        start_text = "This is a \n\n string with some \r stuff in it23894590*AS^&90R32UXZ02.66"

        test_bytes = s.serialize('text/plain', start_text)
        assert type(test_bytes) == bytes

        test_str = s.deserialize('text/plain', test_bytes)

        assert start_text == test_str
        assert type(test_str) == str

        test_str_2 = s.jsonify('text/plain', start_text)

        assert start_text == test_str_2
        assert type(test_str_2) == str
Example #7
0
    def to_json(self) -> str:
        """Method to convert to a single dictionary of data, that will serialize to JSON

        Returns:
            dict
        """
        # Get base dict
        dict_data = self.to_dict()

        # jsonify the data
        serializer_obj = Serializer()
        for mime_type in dict_data['data']:
            dict_data['data'][mime_type] = serializer_obj.jsonify(
                mime_type, dict_data['data'][mime_type])

        # At this point everything in dict_data should be ready to go for JSON serialization
        return json.dumps(dict_data,
                          cls=ActivityDetailRecordEncoder,
                          separators=(',', ':'))
Example #8
0
    def from_bytes(byte_array: bytes,
                   decompress: bool = True) -> 'ActivityDetailRecord':
        """Method to create ActivityDetailRecord from byte array (typically stored in the detail db)

        Returns:
            ActivityDetailRecord
        """
        serializer_obj = Serializer()

        obj_dict = json.loads(byte_array.decode('utf-8'))

        # Base64 decode detail data
        for mime_type in obj_dict['d']:
            obj_dict['d'][mime_type] = base64.b64decode(
                obj_dict['d'][mime_type])

            # Optionally decompress
            if decompress:
                obj_dict['d'][mime_type] = blosc.decompress(
                    obj_dict['d'][mime_type])

            # Deserialize
            obj_dict['d'][mime_type] = serializer_obj.deserialize(
                mime_type, obj_dict['d'][mime_type])

        # Return new instance
        new_instance = ActivityDetailRecord(detail_type=ActivityDetailType(
            obj_dict['t']),
                                            show=bool(obj_dict["s"]),
                                            importance=obj_dict["i"])

        # add tags if present (missing in "old" labbooks)
        if "a" in obj_dict:
            new_instance.tags = obj_dict['a']

        # add action if present (missing in "old" labbooks)
        if "n" in obj_dict:
            new_instance.action = ActivityAction(int(obj_dict['n']))

        new_instance.data = obj_dict['d']
        new_instance.is_loaded = True
        return new_instance
Example #9
0
    def test_bad_mime_type(self):
        """Test the constructor"""
        s = Serializer()

        with pytest.raises(ValueError):
            s.serialize('text/asdfasdfasdfasdf', 'asdfasdfasd')
Example #10
0
    def test_constructor(self):
        """Test the constructor"""
        s = Serializer()

        assert type(s) == Serializer
        assert type(s.serializers['text/plain']) == PlainSerializer