diff options
| author | Jordan Cook <jordan.cook@pioneer.com> | 2021-05-26 20:29:13 -0500 |
|---|---|---|
| committer | Jordan Cook <jordan.cook@pioneer.com> | 2021-05-26 20:55:45 -0500 |
| commit | 6edf2e1c5e3712b2083a5daff142db65232c6e1c (patch) | |
| tree | 7252457e69d910496abd3bf0f5710d1f20166eb2 /requests_cache/models/request.py | |
| parent | 7c7126475d741ab32b14637343dc604dae9cd65c (diff) | |
| download | requests-cache-6edf2e1c5e3712b2083a5daff142db65232c6e1c.tar.gz | |
Make cattrs optional, and other cleanup
Diffstat (limited to 'requests_cache/models/request.py')
| -rw-r--r-- | requests_cache/models/request.py | 35 |
1 files changed, 11 insertions, 24 deletions
diff --git a/requests_cache/models/request.py b/requests_cache/models/request.py index d5c1ba1..f8f5a54 100644 --- a/requests_cache/models/request.py +++ b/requests_cache/models/request.py @@ -2,49 +2,36 @@ from logging import getLogger from typing import Any -import attr +from attr import define, field, fields_dict from requests import PreparedRequest from requests.cookies import RequestsCookieJar from requests.structures import CaseInsensitiveDict -from . import dataclass - logger = getLogger(__name__) -@dataclass +@define(auto_attribs=False) class CachedRequest: """A serializable dataclass that emulates :py:class:`requests.PreparedResponse`""" - body: Any = attr.ib(default=None) - cookies: RequestsCookieJar = attr.ib(factory=dict) - headers: CaseInsensitiveDict = attr.ib(factory=CaseInsensitiveDict) - method: str = attr.ib(default=None) - url: str = attr.ib(default=None) + body: Any = field(default=None) + cookies: RequestsCookieJar = field(factory=dict) + headers: CaseInsensitiveDict = field(factory=CaseInsensitiveDict) + method: str = field(default=None) + url: str = field(default=None) @classmethod def from_request(cls, original_request: PreparedRequest): """Create a CachedRequest based on an original request object""" - kwargs = {k: getattr(original_request, k, None) for k in attr.fields_dict(cls).keys()} - # TODO: Better means of handling naming differences between class attrs and method kwargs + kwargs = {k: getattr(original_request, k, None) for k in fields_dict(cls).keys()} kwargs['cookies'] = original_request._cookies return cls(**kwargs) - # TODO: Is this necessary, or will cattr.structure() be sufficient? - @classmethod - def prepare(self, obj) -> PreparedRequest: - """Turn a CachedRequest object back into a PreparedRequest. This lets PreparedRequest do the - work of normalizing any values that may have changed during (de)serialization. - """ - req = PreparedRequest() - kwargs = attr.asdict(obj) - # TODO: Better means of handling naming differences between class attrs and method kwargs - kwargs['data'] = kwargs.pop('body') - req.prepare(**kwargs) - return req - @property def _cookies(self): + """For compatibility with PreparedRequest, which has an attribute named '_cookies', and a + keyword argument named 'cookies'. + """ return self.cookies def __str__(self): |
