Source code for requests_cache.serializers.pipeline

"""
.. automodsumm:: requests_cache.serializers.pipeline
   :classes-only:
   :nosignatures:
"""
from typing import Any, Callable, List, Union

from ..models import CachedResponse


[docs]class Stage: """Generic class to wrap serialization steps with consistent ``dumps()`` and ``loads()`` methods Args: obj: Serializer object or module, if applicable dumps: Serialization function, or name of method on ``obj`` loads: Deserialization function, or name of method on ``obj`` """ def __init__( self, obj: Any = None, dumps: Union[str, Callable] = 'dumps', loads: Union[str, Callable] = 'loads', ): self.obj = obj self.dumps = getattr(obj, dumps) if isinstance(dumps, str) else dumps self.loads = getattr(obj, loads) if isinstance(loads, str) else loads
[docs]class SerializerPipeline: """A sequence of steps used to serialize and deserialize response objects. This can be initialized with :py:class:`Stage` objects, or any objects with ``dumps()`` and ``loads()`` methods """ def __init__(self, stages: List): self.steps = stages self.dump_steps = [step.dumps for step in stages] self.load_steps = [step.loads for step in reversed(stages)]
[docs] def dumps(self, value) -> Union[str, bytes]: for step in self.dump_steps: value = step(value) return value
[docs] def loads(self, value) -> CachedResponse: for step in self.load_steps: value = step(value) return value