diff options
author | Jordan Cook <jordan.cook.git@proton.me> | 2023-01-13 13:59:44 -0600 |
---|---|---|
committer | Jordan Cook <jordan.cook.git@proton.me> | 2023-02-18 15:55:25 -0600 |
commit | d5baa7ff923f58a1464a3a4375e14e274f8eca13 (patch) | |
tree | 1d98b777233f7d94df71925ec518ca429a282678 /requests_cache | |
parent | 7b60ab73b727bb19c842426ee0225c5333059e9e (diff) | |
download | requests-cache-d5baa7ff923f58a1464a3a4375e14e274f8eca13.tar.gz |
Raise an error for invalid expiration string values (except for headers containing httpdates)
Diffstat (limited to 'requests_cache')
-rw-r--r-- | requests_cache/policy/expiration.py | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/requests_cache/policy/expiration.py b/requests_cache/policy/expiration.py index 18a2593..1041e36 100644 --- a/requests_cache/policy/expiration.py +++ b/requests_cache/policy/expiration.py @@ -21,6 +21,7 @@ def get_expiration_datetime( expire_after: ExpirationTime, start_time: Optional[datetime] = None, negative_delta: bool = False, + ignore_invalid_httpdate: bool = False, ) -> Optional[datetime]: """Convert an expiration value in any supported format to an absolute datetime""" # Never expire (or do not cache, in which case expiration won't be used) @@ -29,9 +30,12 @@ def get_expiration_datetime( # Expire immediately elif try_int(expire_after) == EXPIRE_IMMEDIATELY: return start_time or datetime.utcnow() - # Already a datetime or datetime str + # Already a datetime or httpdate str (allowed for headers only) if isinstance(expire_after, str): - return _parse_http_date(expire_after) + expire_after_dt = _parse_http_date(expire_after) + if not expire_after_dt and not ignore_invalid_httpdate: + raise ValueError(f'Invalid HTTP date: {expire_after}') + return expire_after_dt elif isinstance(expire_after, datetime): return _to_utc(expire_after) @@ -47,7 +51,7 @@ def get_expiration_seconds(expire_after: ExpirationTime) -> int: """Convert an expiration value in any supported format to an expiration time in seconds""" if expire_after == DO_NOT_CACHE: return DO_NOT_CACHE - expires = get_expiration_datetime(expire_after) + expires = get_expiration_datetime(expire_after, ignore_invalid_httpdate=True) return ceil((expires - datetime.utcnow()).total_seconds()) if expires else NEVER_EXPIRE |