diff --git a/CHANGES/7819.feature b/CHANGES/7819.feature new file mode 100644 index 00000000000..6ff263abeb8 --- /dev/null +++ b/CHANGES/7819.feature @@ -0,0 +1 @@ +Skip filtering ``CookieJar`` when the jar is empty or all cookies have expired. diff --git a/CONTRIBUTORS.txt b/CONTRIBUTORS.txt index b9052c404dd..539a8807689 100644 --- a/CONTRIBUTORS.txt +++ b/CONTRIBUTORS.txt @@ -282,6 +282,7 @@ Robert Lu Robert Nikolich Roman Markeloff Roman Podoliaka +Rong Zhang Samir Akarioh Samuel Colvin Sean Hunt diff --git a/aiohttp/cookiejar.py b/aiohttp/cookiejar.py index a35c15f344b..11ef9e288a7 100644 --- a/aiohttp/cookiejar.py +++ b/aiohttp/cookiejar.py @@ -234,7 +234,6 @@ def filter_cookies( self, request_url: URL = URL() ) -> Union["BaseCookie[str]", "SimpleCookie[str]"]: """Returns this jar's cookies filtered by their attributes.""" - self._do_expiration() if not isinstance(request_url, URL): warnings.warn( "The method accepts yarl.URL instances only, got {}".format( @@ -246,6 +245,13 @@ def filter_cookies( filtered: Union["SimpleCookie[str]", "BaseCookie[str]"] = ( SimpleCookie() if self._quote_cookie else BaseCookie() ) + if not self._cookies: + # Skip do_expiration() if there are no cookies. + return filtered + self._do_expiration() + if not self._cookies: + # Skip rest of function if no non-expired cookies. + return filtered hostname = request_url.raw_host or "" request_origin = URL() with contextlib.suppress(ValueError):