Source code for yarqueue.serializer

from abc import ABC, abstractmethod
from copy import deepcopy
import json

from .compat import pickle


[docs]class BaseSerializer(ABC):
[docs] @abstractmethod def dumps(self, obj) -> bytes: """Return the serialized representation of the object as a ``bytes`` object.""" pass
[docs] @abstractmethod def loads(self, bytes_object: bytes) -> object: """Return the deserialized object from its ``bytes`` representation.""" pass
[docs]class Null(BaseSerializer):
[docs] def dumps(self, obj): return obj
[docs] def loads(self, obj): return obj
[docs]class Pickle(BaseSerializer): def __init__(self, protocol=None, dumps_kwargs=None, loads_kwargs=None): self.dumps_kwargs = deepcopy(dumps_kwargs) or dict() self.loads_kwargs = deepcopy(loads_kwargs) or dict() if protocol: self.dumps_kwargs["protocol"] = protocol @property def protocol(self): return self.dumps_kwargs.get("protocol", pickle.DEFAULT_PROTOCOL)
[docs] def dumps(self, obj) -> bytes: return pickle.dumps(obj, **self.dumps_kwargs)
[docs] def loads(self, bytes_object: bytes) -> object: return pickle.loads(bytes_object, **self.loads_kwargs)
[docs]class Json(BaseSerializer): def __init__(self, dumps_kwargs=None, loads_kwargs=None): self.dumps_kwargs = deepcopy(dumps_kwargs) or dict() self.loads_kwargs = deepcopy(loads_kwargs) or dict()
[docs] def dumps(self, obj) -> bytes: return json.dumps(obj, **self.dumps_kwargs).encode()
[docs] def loads(self, bytes_object: bytes) -> object: return json.loads(bytes_object, **self.loads_kwargs)