summaryrefslogtreecommitdiff
path: root/requests_cache/models/request.py
diff options
context:
space:
mode:
Diffstat (limited to 'requests_cache/models/request.py')
-rw-r--r--requests_cache/models/request.py35
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):