[docs]@define(auto_attribs=False)classCachedRequest:"""A serializable dataclass that emulates :py:class:`requests.PreparedResponse`"""body:bytes=field(default=None,converter=encode)cookies:RequestsCookieJar=field(factory=RequestsCookieJar)headers:CaseInsensitiveDict=field(factory=CaseInsensitiveDict)method:str=field(default=None)url:str=field(default=None)
[docs]@classmethoddeffrom_request(cls,original_request:PreparedRequest)->'CachedRequest':"""Create a CachedRequest based on an original request object"""kwargs={k:getattr(original_request,k,None)forkinfields_dict(cls).keys()}kwargs['cookies']=getattr(original_request,'_cookies',None)returncls(**kwargs)
[docs]defprepare(self)->PreparedRequest:"""Convert the CachedRequest back into a PreparedRequest"""prepared_request=PreparedRequest()prepared_request.prepare(cookies=self.cookies,data=self.body,headers=self.headers,method=self.method,url=self.url,)returnprepared_request
@propertydef_cookies(self):"""For compatibility with PreparedRequest, which has an attribute named '_cookies', and a keyword argument named 'cookies'. """returnself.cookiesdef__str__(self):returnf'{self.method}{self.url}'