diff options
author | Jordan Cook <jordan.cook@pioneer.com> | 2022-05-21 15:00:29 -0500 |
---|---|---|
committer | Jordan Cook <jordan.cook@pioneer.com> | 2022-05-30 11:37:22 -0400 |
commit | 352b64d0f6e616fa4393c221dda7550cd7928c74 (patch) | |
tree | ec0354281cb9be7a67ad48ed7661048928525981 /requests_cache/models | |
parent | ee7adc177c3911f41e50c64c8c0511fbda8917a6 (diff) | |
download | requests-cache-352b64d0f6e616fa4393c221dda7550cd7928c74.tar.gz |
Add a base model repr that excludes default values even if rich isn't installed
Diffstat (limited to 'requests_cache/models')
-rw-r--r-- | requests_cache/models/base.py | 13 | ||||
-rw-r--r-- | requests_cache/models/raw_response.py | 4 | ||||
-rw-r--r-- | requests_cache/models/request.py | 2 | ||||
-rwxr-xr-x | requests_cache/models/response.py | 6 |
4 files changed, 18 insertions, 7 deletions
diff --git a/requests_cache/models/base.py b/requests_cache/models/base.py index c2caab5..4c9f59c 100644 --- a/requests_cache/models/base.py +++ b/requests_cache/models/base.py @@ -1,4 +1,5 @@ from datetime import datetime +from typing import List from attr import Factory @@ -10,7 +11,8 @@ class RichMixin: * Inform rich about all default values so they will be excluded from output * Handle default value factories * Stringify datetime objects - * Does not currently handle positional-only args (since we don't currently have any) + * Does not handle positional-only args (since we don't currently have any) + * Add a base repr that excludes default values even if rich isn't installed """ def __rich_repr__(self): @@ -20,3 +22,12 @@ class RichMixin: value = getattr(self, a.name) value = str(value) if isinstance(value, datetime) else value yield a.name, value, default + + def __repr__(self): + tokens: List[str] = [] + for arg in self.__rich_repr__(): + key, value, default = arg + tokens.append(f'{key}={value!r}' if value != default else None) + + repr_attrs = ', '.join([t for t in tokens if t]) + return f'{self.__class__.__name__}({repr_attrs})' diff --git a/requests_cache/models/raw_response.py b/requests_cache/models/raw_response.py index 9c01b88..f94a543 100644 --- a/requests_cache/models/raw_response.py +++ b/requests_cache/models/raw_response.py @@ -15,8 +15,8 @@ from . import RichMixin logger = getLogger(__name__) -@define(auto_attribs=False, slots=False) -class CachedHTTPResponse(HTTPResponse, RichMixin): +@define(auto_attribs=False, repr=False, slots=False) +class CachedHTTPResponse(RichMixin, HTTPResponse): """A serializable dataclass that emulates :py:class:`~urllib3.response.HTTPResponse`. Supports streaming requests and generator usage. diff --git a/requests_cache/models/request.py b/requests_cache/models/request.py index a827f55..acef134 100644 --- a/requests_cache/models/request.py +++ b/requests_cache/models/request.py @@ -12,7 +12,7 @@ from . import RichMixin logger = getLogger(__name__) -@define(auto_attribs=False) +@define(repr=False) class CachedRequest(RichMixin): """A serializable dataclass that emulates :py:class:`requests.PreparedResponse`""" diff --git a/requests_cache/models/response.py b/requests_cache/models/response.py index a2b36e1..32fe76d 100755 --- a/requests_cache/models/response.py +++ b/requests_cache/models/response.py @@ -22,7 +22,7 @@ DATETIME_FORMAT = '%Y-%m-%d %H:%M:%S %Z' # Format used for __str__ only logger = getLogger(__name__) -@define(auto_attribs=False, slots=False) +@define(auto_attribs=False, repr=False, slots=False) class BaseResponse(Response): """Wrapper class for responses returned by :py:class:`.CachedSession`. This mainly exists to provide type hints for extra cache-related attributes that are added to non-cached responses. @@ -58,8 +58,8 @@ class OriginalResponse(BaseResponse): return response -@define(auto_attribs=False, slots=False) -class CachedResponse(BaseResponse, RichMixin): +@define(auto_attribs=False, repr=False, slots=False) +class CachedResponse(RichMixin, BaseResponse): """A class that emulates :py:class:`requests.Response`, optimized for serialization""" _content: bytes = field(default=None) |