summaryrefslogtreecommitdiff
path: root/requests_cache/serializers
diff options
context:
space:
mode:
authorJordan Cook <jordan.cook@pioneer.com>2021-08-25 16:46:36 -0500
committerJordan Cook <jordan.cook@pioneer.com>2021-08-25 17:43:02 -0500
commit5f128bbfc61169ac6b5f0e9f4dc6bcd05092382c (patch)
tree347e072c2b06b46aa71a322852b22de8d3eb8b2c /requests_cache/serializers
parent20af95ca001110cf8df7d732526a3492cceba19f (diff)
downloadrequests-cache-5f128bbfc61169ac6b5f0e9f4dc6bcd05092382c.tar.gz
Allow Stage objects to take functions instead of object + method names
Diffstat (limited to 'requests_cache/serializers')
-rw-r--r--requests_cache/serializers/pipeline.py38
1 files changed, 26 insertions, 12 deletions
diff --git a/requests_cache/serializers/pipeline.py b/requests_cache/serializers/pipeline.py
index fec7889..3bbfbda 100644
--- a/requests_cache/serializers/pipeline.py
+++ b/requests_cache/serializers/pipeline.py
@@ -3,27 +3,41 @@
:classes-only:
:nosignatures:
"""
-from typing import Any, List, Union
+from typing import Any, Callable, List, Union
from ..models import CachedResponse
class Stage:
- """Generic class to wrap serialization steps with consistent ``dumps()`` and ``loads()`` methods"""
-
- def __init__(self, obj: Any, dumps: str = "dumps", loads: str = "loads"):
+ """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)
- self.loads = getattr(obj, loads)
+ self.dumps = getattr(obj, dumps) if isinstance(dumps, str) else dumps
+ self.loads = getattr(obj, loads) if isinstance(loads, str) else loads
class SerializerPipeline:
- """A sequence of steps used to serialize and deserialize response objects"""
-
- def __init__(self, steps: List):
- self.steps = steps
- self.dump_steps = [step.dumps for step in steps]
- self.load_steps = [step.loads for step in reversed(steps)]
+ """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)]
def dumps(self, value) -> Union[str, bytes]:
for step in self.dump_steps: