Source code for requests_cache.serializers

# flake8: noqa: F401
import pickle
from warnings import warn

from .. import get_placeholder_class
from .pipeline import SerializerPipeline, Stage

__all__ = [
    'SERIALIZERS',
    'CattrStage',
    'SerializerPipeline',
    'Stage',
    'bson_serializer',
    'json_serializer',
    'pickle_serializer',
    'safe_pickle_serializer',
    'yaml_serializer',
    'init_serializer',
]

# If cattrs isn't installed, use plain pickle for pickle_serializer, and placeholders for the rest.
# Additional checks for format-specific optional libraries are handled in the preconf module.
try:
    from .cattrs import CattrStage
    from .preconf import (
        bson_serializer,
        json_serializer,
        pickle_serializer,
        safe_pickle_serializer,
        yaml_serializer,
    )
except ImportError as e:
    CattrStage = get_placeholder_class(e)  # type: ignore
    bson_serializer = get_placeholder_class(e)
    json_serializer = get_placeholder_class(e)
    pickle_serializer = pickle  # type: ignore
    safe_pickle_serializer = get_placeholder_class(e)
    yaml_serializer = get_placeholder_class(e)


SERIALIZERS = {
    'bson': bson_serializer,
    'json': json_serializer,
    'pickle': pickle_serializer,
    'yaml': yaml_serializer,
}


[docs]def init_serializer(serializer=None, **kwargs): """Initialize a serializer from a name, class, or instance""" serializer = serializer or 'pickle' # Backwards=compatibility with 0.6; will be removed in 0.8 if serializer == 'safe_pickle' or (serializer == 'pickle' and 'secret_key' in kwargs): serializer = safe_pickle_serializer(**kwargs) msg = ( 'Please initialize with safe_pickle_serializer(secret_key) instead. ' 'This usage is deprecated and will be removed in a future version.' ) warn(DeprecationWarning(msg)) elif isinstance(serializer, str): serializer = SERIALIZERS[serializer] return serializer