summaryrefslogtreecommitdiff
path: root/requests_cache/models
diff options
context:
space:
mode:
authorJordan Cook <jordan.cook@pioneer.com>2022-05-21 15:00:29 -0500
committerJordan Cook <jordan.cook@pioneer.com>2022-05-30 11:37:22 -0400
commit352b64d0f6e616fa4393c221dda7550cd7928c74 (patch)
treeec0354281cb9be7a67ad48ed7661048928525981 /requests_cache/models
parentee7adc177c3911f41e50c64c8c0511fbda8917a6 (diff)
downloadrequests-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.py13
-rw-r--r--requests_cache/models/raw_response.py4
-rw-r--r--requests_cache/models/request.py2
-rwxr-xr-xrequests_cache/models/response.py6
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)