From 3d5f55d9d5ceee7084b2c0f30a3784d4ce056bdd Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Fri, 17 Dec 2021 12:52:47 +0200 Subject: [PATCH 1/2] make order of headers repeatable Signed-off-by: Sergey Chvalyuk --- requests_cache/cache_keys.py | 1 + 1 file changed, 1 insertion(+) diff --git a/requests_cache/cache_keys.py b/requests_cache/cache_keys.py index d2a92cff..662a87bd 100644 --- a/requests_cache/cache_keys.py +++ b/requests_cache/cache_keys.py @@ -81,6 +81,7 @@ def get_matched_headers( else: included = set(headers) - DEFAULT_EXCLUDE_HEADERS + included = sorted(included, key=lambda x:x.lower()) return [f'{k.lower()}={headers[k]}' for k in included if k in headers] From 99b77935f1eac273b27c495c10d906567ff75cc0 Mon Sep 17 00:00:00 2001 From: Jordan Cook Date: Sat, 1 Jan 2022 11:56:42 -0600 Subject: [PATCH 2/2] Fix black and type checking issues, and update changelog --- HISTORY.md | 1 + requests_cache/cache_keys.py | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/HISTORY.md b/HISTORY.md index e6dcfc17..a3406bb5 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -23,6 +23,7 @@ * Some micro-optimizations for request matching **Bugfixes:** +* Fix regression bug causing headers used for cache key to not guarantee sort order * Handle some additional corner cases when normalizing request data * Add support for `BaseCache` keyword arguments passed along with a backend instance * Fix issue with cache headers not being used correctly if `cache_control=True` is used with an `expire_after` value diff --git a/requests_cache/cache_keys.py b/requests_cache/cache_keys.py index 662a87bd..7029c7fc 100644 --- a/requests_cache/cache_keys.py +++ b/requests_cache/cache_keys.py @@ -81,8 +81,9 @@ def get_matched_headers( else: included = set(headers) - DEFAULT_EXCLUDE_HEADERS - included = sorted(included, key=lambda x:x.lower()) - return [f'{k.lower()}={headers[k]}' for k in included if k in headers] + return [ + f'{k.lower()}={headers[k]}' for k in sorted(included, key=lambda x: x.lower()) if k in headers + ] def normalize_request(request: AnyRequest, ignored_parameters: ParamList) -> AnyPreparedRequest: