summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorParker Hancock <633163+parkerhancock@users.noreply.github.com>2021-06-15 20:24:24 -0500
committerParker Hancock <633163+parkerhancock@users.noreply.github.com>2021-06-15 20:24:24 -0500
commitf251bc4bfdd36f6952f89b9ee22dd245762f528c (patch)
treed65f149d89e247aa4bfed1f2d36119d2dc4c135d
parentabdffac620cd832119255c31aaf0f05a1cc4f973 (diff)
downloadrequests-cache-f251bc4bfdd36f6952f89b9ee22dd245762f528c.tar.gz
cleaning up preconf and builtin serializers
-rw-r--r--Pipfile2
-rw-r--r--requests_cache/serializers/__init__.py72
-rw-r--r--requests_cache/serializers/preconf.py36
3 files changed, 64 insertions, 46 deletions
diff --git a/Pipfile b/Pipfile
index b9ba84f..71e4f7c 100644
--- a/Pipfile
+++ b/Pipfile
@@ -8,4 +8,4 @@ name = "pypi"
[dev-packages]
[requires]
-python_version = "3.7"
+python_version = "3.9"
diff --git a/requests_cache/serializers/__init__.py b/requests_cache/serializers/__init__.py
index 8078656..a4049cb 100644
--- a/requests_cache/serializers/__init__.py
+++ b/requests_cache/serializers/__init__.py
@@ -1,31 +1,40 @@
import pickle
-from itsdangerous import Signer
-
from .. import get_placeholder_class
+from . import preconf
from .pipeline import SerializerPipeline, Stage
pickle_serializer = pickle
+try:
+ from itsdangerous import Signer
-def safe_pickle_serializer(secret_key=None, salt="requests-cache", **kwargs):
- if not secret_key:
- raise ValueError("Cannot use itsdangerous without a secret key!")
- return SerializerPipeline(
- [
- pickle_serializer,
- Stage(Signer(secret_key=secret_key, salt=salt), dumps='sign', loads='unsign'),
- ],
- )
+ def safe_pickle_serializer(secret_key=None, salt="requests-cache", **kwargs):
+ if not secret_key:
+ raise ValueError("Cannot use itsdangerous without a secret key!")
+ return SerializerPipeline(
+ [
+ pickle_serializer,
+ Stage(Signer(secret_key=secret_key, salt=salt), dumps='sign', loads='unsign'),
+ ],
+ )
+
+
+except ImportError as e:
+ safe_pickle_serializer = get_placeholder_class(e)
try:
- from . import preconf
+ import ujson as json
- try:
- import ujson as json
- except ImportError:
- import json
+ json_serializer = SerializerPipeline(
+ [
+ preconf.ujson_converter, # CachedResponse -> JSON
+ json, # JSON -> str
+ ],
+ )
+except ImportError:
+ import json
json_serializer = SerializerPipeline(
[
@@ -34,25 +43,32 @@ try:
],
)
- try:
- import bson.json_util
-
- bson_serializer = SerializerPipeline(
- [
- preconf.bson_converter, # CachedResponse -> BSON
- bson.json_util, # BSON -> str
- ],
- )
- except ImportError as e:
- bson_serializer = get_placeholder_class(e)
+try:
+ import bson.json_util
+ bson_serializer = SerializerPipeline(
+ [
+ preconf.bson_converter, # CachedResponse -> BSON
+ bson.json_util, # BSON -> str
+ ],
+ )
except ImportError as e:
- json_serializer = get_placeholder_class(e)
bson_serializer = get_placeholder_class(e)
+try:
+ import pyyaml
+
+ yaml_serializer = SerializerPipeline(
+ [preconf.pyyaml_converter, Stage(pyyaml, loads='load', dumps='dump')]
+ )
+except ImportError as e:
+ yaml_serializer = get_placeholder_class(e)
+
+
SERIALIZERS = {
"pickle": pickle_serializer,
"safe_pickle": safe_pickle_serializer,
"json": json_serializer,
"bson": bson_serializer,
+ "yaml": yaml_serializer,
}
diff --git a/requests_cache/serializers/preconf.py b/requests_cache/serializers/preconf.py
index 17f4056..acd63f1 100644
--- a/requests_cache/serializers/preconf.py
+++ b/requests_cache/serializers/preconf.py
@@ -1,20 +1,17 @@
import datetime
-import importlib
-import pkgutil
from functools import partial
-from pathlib import Path
from requests.cookies import RequestsCookieJar, cookiejar_from_dict
from requests.structures import CaseInsensitiveDict
from urllib3.response import HTTPHeaderDict
+from .. import get_placeholder_class
from ..models import CachedResponse
from .pipeline import Stage
try:
- from typing import ForwardRef
-
- from cattr import GenConverter, preconf
+ from cattr import GenConverter
+ from cattr.preconf import bson, json, msgpack, orjson, pyyaml, tomlkit, ujson
def to_datetime(obj, cls) -> datetime:
if isinstance(obj, str):
@@ -56,21 +53,26 @@ try:
converter.register_structure_hook(HTTPHeaderDict, lambda obj, cls: HTTPHeaderDict(obj))
converter.register_structure_hook(
- ForwardRef('CachedResponse'),
+ CachedResponse,
lambda obj, cls: converter.structure(obj, CachedResponse),
)
converter = CattrsStage(converter, dumps='unstructure', loads='structure')
return converter
- preconf_module_names = list(
- m.name for m in pkgutil.iter_modules((str(Path(preconf.__file__).parent),))
- )
+ bson_converter = init_converter(bson.make_converter)
+ json_converter = init_converter(json.make_converter)
+ msgpack_converter = init_converter(msgpack.make_converter)
+ orjson_converter = init_converter(orjson.make_converter)
+ pyyaml_converter = init_converter(pyyaml.make_converter)
+ tomlkit_converter = init_converter(tomlkit.make_converter)
+ ujson_converter = init_converter(ujson.make_converter)
- GLOBALS = globals()
- for preconf_module_name in preconf_module_names:
- preconf_module = importlib.import_module(f"cattr.preconf.{preconf_module_name}")
- converter = preconf_module.make_converter
- GLOBALS[f"{preconf_module_name}_converter"] = init_converter(preconf_module.make_converter)
-except ImportError:
- pass
+except ImportError as e:
+ bson_converter = get_placeholder_class(e)
+ json_converter = get_placeholder_class(e)
+ msgpack_converter = get_placeholder_class(e)
+ orjson_converter = get_placeholder_class(e)
+ pyyaml_converter = get_placeholder_class(e)
+ tomlkit_converter = init_converter(tomlkit.make_converter)
+ ujson_converter = get_placeholder_class(e)