Merge branch 'feature/UpdateCacheControl' into dev

This commit is contained in:
JackDandy 2024-06-05 09:20:01 +01:00
commit 488feadc88
7 changed files with 17 additions and 11 deletions

View file

@ -1,5 +1,6 @@
### 3.32.0 (2024-xx-xx xx:xx:00 UTC)
* Update CacheControl 0.13.1 (783a338) to 0.14.0 (e2be0c2)
* Update idna library 3.4 (cab054c) to 3.7 (1d365e1)
* Update Requests library 2.31.0 (8812812) to 2.32.3 (0e322af)
* Update urllib3 2.0.7 (56f01e0) to 2.2.1 (54d6edf)

View file

@ -8,7 +8,7 @@ Make it easy to import from cachecontrol without long namespaces.
"""
__author__ = "Eric Larson"
__email__ = "eric@ionrock.org"
__version__ = "0.13.1"
__version__ = "0.14.0"
from cachecontrol.adapter import CacheControlAdapter
from cachecontrol.controller import CacheController

View file

@ -125,21 +125,21 @@ class CacheControlAdapter(HTTPAdapter):
else:
# Wrap the response file with a wrapper that will cache the
# response when the stream has been consumed.
response._fp = CallbackFileWrapper( # type: ignore[attr-defined]
response._fp, # type: ignore[attr-defined]
response._fp = CallbackFileWrapper( # type: ignore[assignment]
response._fp, # type: ignore[arg-type]
functools.partial(
self.controller.cache_response, request, response
),
)
if response.chunked:
super_update_chunk_length = response._update_chunk_length # type: ignore[attr-defined]
super_update_chunk_length = response._update_chunk_length
def _update_chunk_length(self: HTTPResponse) -> None:
super_update_chunk_length()
if self.chunk_left == 0:
self._fp._close() # type: ignore[attr-defined]
self._fp._close() # type: ignore[union-attr]
response._update_chunk_length = types.MethodType( # type: ignore[attr-defined]
response._update_chunk_length = types.MethodType( # type: ignore[method-assign]
_update_chunk_length, response
)

View file

@ -66,7 +66,7 @@ class _FileCacheMixin:
def __init__(
self,
directory: Union[str, Path],
directory: str | Path,
forever: bool = False,
filemode: int = 0o0600,
dirmode: int = 0o0700,

View file

@ -142,6 +142,11 @@ class CacheController:
"""
Load a cached response, or return None if it's not available.
"""
# We do not support caching of partial content: so if the request contains a
# Range header then we don't want to load anything from the cache.
if "Range" in request.headers:
return None
cache_url = request.url
assert cache_url is not None
cache_data = self.cache.get(cache_url)
@ -480,7 +485,7 @@ class CacheController:
cached_response.headers.update(
{
k: v
for k, v in response.headers.items() # type: ignore[no-untyped-call]
for k, v in response.headers.items()
if k.lower() not in excluded_headers
}
)

View file

@ -68,7 +68,7 @@ class OneDayCache(BaseHeuristic):
if "expires" not in response.headers:
date = parsedate(response.headers["date"])
expires = expire_after(timedelta(days=1), date=datetime(*date[:6], tzinfo=timezone.utc)) # type: ignore[misc]
expires = expire_after(timedelta(days=1), date=datetime(*date[:6], tzinfo=timezone.utc)) # type: ignore[index,misc]
headers["expires"] = datetime_to_header(expires)
headers["cache-control"] = "public"
return headers

View file

@ -32,13 +32,13 @@ class Serializer:
# also update the response with a new file handler to be
# sure it acts as though it was never read.
body = response.read(decode_content=False)
response._fp = io.BytesIO(body) # type: ignore[attr-defined]
response._fp = io.BytesIO(body) # type: ignore[assignment]
response.length_remaining = len(body)
data = {
"response": {
"body": body, # Empty bytestring if body is stored separately
"headers": {str(k): str(v) for k, v in response.headers.items()}, # type: ignore[no-untyped-call]
"headers": {str(k): str(v) for k, v in response.headers.items()},
"status": response.status,
"version": response.version,
"reason": str(response.reason),