diff options
| author | Parker Hancock <633163+parkerhancock@users.noreply.github.com> | 2021-06-15 20:24:24 -0500 |
|---|---|---|
| committer | Parker Hancock <633163+parkerhancock@users.noreply.github.com> | 2021-06-15 20:24:24 -0500 |
| commit | f251bc4bfdd36f6952f89b9ee22dd245762f528c (patch) | |
| tree | d65f149d89e247aa4bfed1f2d36119d2dc4c135d | |
| parent | abdffac620cd832119255c31aaf0f05a1cc4f973 (diff) | |
| download | requests-cache-f251bc4bfdd36f6952f89b9ee22dd245762f528c.tar.gz | |
cleaning up preconf and builtin serializers
| -rw-r--r-- | Pipfile | 2 | ||||
| -rw-r--r-- | requests_cache/serializers/__init__.py | 72 | ||||
| -rw-r--r-- | requests_cache/serializers/preconf.py | 36 |
3 files changed, 64 insertions, 46 deletions
@@ -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) |
