diff options
author | Jordan Cook <JWCook@users.noreply.github.com> | 2021-10-23 11:12:59 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-23 11:12:59 -0500 |
commit | c23c5e831374977ff99d0e5df87dab2688ddbbfd (patch) | |
tree | 6f13b35246d4209d4cce1b4fd557ee2654e061d8 | |
parent | 97f700b3d9ece724c3db1938c244dd82e8d74f10 (diff) | |
parent | c5e6b9525cd74a37377dfdd78d9e33dae13e2691 (diff) | |
download | requests-cache-c23c5e831374977ff99d0e5df87dab2688ddbbfd.tar.gz |
Merge pull request #438 from JWCook/fix-duplicate-cache-read
Fix duplicate cache read
-rw-r--r-- | .all-contributorsrc | 10 | ||||
-rw-r--r-- | .pre-commit-config.yaml | 4 | ||||
-rw-r--r-- | CONTRIBUTORS.md | 13 | ||||
-rw-r--r-- | HISTORY.md | 2 | ||||
-rw-r--r-- | requests_cache/backends/base.py | 10 | ||||
-rw-r--r-- | requests_cache/cache_keys.py | 4 | ||||
-rw-r--r-- | tests/integration/base_cache_test.py | 15 | ||||
-rw-r--r-- | tests/unit/test_session.py | 2 |
8 files changed, 44 insertions, 16 deletions
diff --git a/.all-contributorsrc b/.all-contributorsrc index 29dabcb..ada5396 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -677,6 +677,16 @@ "contributions": [ "bug" ] + }, + { + "login": "Iftahh", + "name": "Iftah", + "avatar_url": "https://avatars.githubusercontent.com/u/798544?v=4", + "profile": "https://github.com/Iftahh", + "contributions": [ + "bug", + "code" + ] } ], "contributorsPerLine": 7, diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 29ff89d..b77a8d5 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -8,7 +8,7 @@ repos: - id: mixed-line-ending - id: trailing-whitespace - repo: https://github.com/psf/black - rev: 21.8b0 + rev: 21.9b0 hooks: - id: black - repo: https://github.com/asottile/blacken-docs @@ -26,7 +26,7 @@ repos: - id: flake8 additional_dependencies: [flake8-comprehensions] - repo: https://github.com/pre-commit/mirrors-mypy - rev: v0.910 + rev: v0.910-1 hooks: - id: mypy files: requests_cache diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 22de311..f44d532 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -37,59 +37,60 @@ contributions that have helped to improve requests-cache: </tr> <tr> <td align="center"><a href="https://honzajavorek.cz/"><img src="https://avatars.githubusercontent.com/u/283441?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Honza Javorek</b></sub></a><br /><a href="https://github.com/reclosedev/requests-cache/issues?q=author%3Ahonzajavorek" title="Bug reports">π</a> <a href="#ideas-honzajavorek" title="Ideas, Planning, & Feedback">π€</a></td> + <td align="center"><a href="https://github.com/Iftahh"><img src="https://avatars.githubusercontent.com/u/798544?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Iftah</b></sub></a><br /><a href="https://github.com/reclosedev/requests-cache/issues?q=author%3AIftahh" title="Bug reports">π</a> <a href="https://github.com/reclosedev/requests-cache/commits?author=Iftahh" title="Code">π»</a></td> <td align="center"><a href="https://github.com/libbkmz"><img src="https://avatars.githubusercontent.com/u/1144960?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Ilya</b></sub></a><br /><a href="https://github.com/reclosedev/requests-cache/commits?author=libbkmz" title="Code">π»</a></td> <td align="center"><a href="https://rob.gant.ninja/"><img src="https://avatars.githubusercontent.com/u/710553?v=4?s=100" width="100px;" alt=""/><br /><sub><b>J Rob Gant</b></sub></a><br /><a href="https://github.com/reclosedev/requests-cache/commits?author=rgant" title="Code">π»</a> <a href="https://github.com/reclosedev/requests-cache/issues?q=author%3Argant" title="Bug reports">π</a></td> <td align="center"><a href="https://jacebrowning.info/"><img src="https://avatars.githubusercontent.com/u/939501?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Jace Browning</b></sub></a><br /><a href="https://github.com/reclosedev/requests-cache/commits?author=jacebrowning" title="Code">π»</a> <a href="https://github.com/reclosedev/requests-cache/commits?author=jacebrowning" title="Documentation">π</a></td> <td align="center"><a href="https://github.com/jsemric"><img src="https://avatars.githubusercontent.com/u/22685064?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Jakub SemriΔ</b></sub></a><br /><a href="https://github.com/reclosedev/requests-cache/commits?author=jsemric" title="Code">π»</a> <a href="#ideas-jsemric" title="Ideas, Planning, & Feedback">π€</a></td> <td align="center"><a href="http://jeremydouglass.com/"><img src="https://avatars.githubusercontent.com/u/798570?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Jeremy Douglass</b></sub></a><br /><a href="#ideas-jeremydouglass" title="Ideas, Planning, & Feedback">π€</a></td> - <td align="center"><a href="https://github.com/jkwill87"><img src="https://avatars.githubusercontent.com/u/4343678?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Jessy Williams</b></sub></a><br /><a href="https://github.com/reclosedev/requests-cache/commits?author=jkwill87" title="Code">π»</a> <a href="https://github.com/reclosedev/requests-cache/issues?q=author%3Ajkwill87" title="Bug reports">π</a> <a href="https://github.com/reclosedev/requests-cache/commits?author=jkwill87" title="Tests">β οΈ</a></td> </tr> <tr> + <td align="center"><a href="https://github.com/jkwill87"><img src="https://avatars.githubusercontent.com/u/4343678?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Jessy Williams</b></sub></a><br /><a href="https://github.com/reclosedev/requests-cache/commits?author=jkwill87" title="Code">π»</a> <a href="https://github.com/reclosedev/requests-cache/issues?q=author%3Ajkwill87" title="Bug reports">π</a> <a href="https://github.com/reclosedev/requests-cache/commits?author=jkwill87" title="Tests">β οΈ</a></td> <td align="center"><a href="https://www.openhub.net/accounts/jayvdb"><img src="https://avatars.githubusercontent.com/u/15092?v=4?s=100" width="100px;" alt=""/><br /><sub><b>John Vandenberg</b></sub></a><br /><a href="#infra-jayvdb" title="Infrastructure (Hosting, Build-Tools, etc)">π</a> <a href="#platform-jayvdb" title="Packaging/porting to new platform">π¦</a> <a href="https://github.com/reclosedev/requests-cache/commits?author=jayvdb" title="Tests">β οΈ</a></td> <td align="center"><a href="https://github.com/jonasjancarik"><img src="https://avatars.githubusercontent.com/u/2459191?v=4?s=100" width="100px;" alt=""/><br /><sub><b>JonΓ‘Ε‘ JanΔaΕΓk</b></sub></a><br /><a href="https://github.com/reclosedev/requests-cache/issues?q=author%3Ajonasjancarik" title="Bug reports">π</a></td> <td align="center"><a href="https://github.com/JWCook"><img src="https://avatars.githubusercontent.com/u/419936?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Jordan Cook</b></sub></a><br /><a href="https://github.com/reclosedev/requests-cache/commits?author=JWCook" title="Code">π»</a> <a href="#maintenance-JWCook" title="Maintenance">π§</a> <a href="#feature-JWCook" title="New features">β¨</a> <a href="https://github.com/reclosedev/requests-cache/issues?q=author%3AJWCook" title="Bug reports">π</a> <a href="https://github.com/reclosedev/requests-cache/commits?author=JWCook" title="Tests">β οΈ</a> <a href="https://github.com/reclosedev/requests-cache/commits?author=JWCook" title="Documentation">π</a> <a href="#infra-JWCook" title="Infrastructure (Hosting, Build-Tools, etc)">π</a></td> <td align="center"><a href="http://jhermann.github.io/"><img src="https://avatars.githubusercontent.com/u/1068245?v=4?s=100" width="100px;" alt=""/><br /><sub><b>JΓΌrgen Hermann</b></sub></a><br /><a href="https://github.com/reclosedev/requests-cache/issues?q=author%3Ajhermann" title="Bug reports">π</a> <a href="#ideas-jhermann" title="Ideas, Planning, & Feedback">π€</a></td> <td align="center"><a href="https://github.com/FredHappyface"><img src="https://avatars.githubusercontent.com/u/41634689?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Kieran W</b></sub></a><br /><a href="https://github.com/reclosedev/requests-cache/commits?author=FredHappyface" title="Documentation">π</a> <a href="https://github.com/reclosedev/requests-cache/issues?q=author%3AFredHappyface" title="Bug reports">π</a></td> <td align="center"><a href="https://github.com/MHellmund"><img src="https://avatars.githubusercontent.com/u/1593619?v=4?s=100" width="100px;" alt=""/><br /><sub><b>MHellmund</b></sub></a><br /><a href="https://github.com/reclosedev/requests-cache/issues?q=author%3AMHellmund" title="Bug reports">π</a></td> - <td align="center"><a href="http://marc-abramowitz.com/"><img src="https://avatars.githubusercontent.com/u/305268?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Marc Abramowitz</b></sub></a><br /><a href="https://github.com/reclosedev/requests-cache/commits?author=msabramo" title="Code">π»</a> <a href="https://github.com/reclosedev/requests-cache/commits?author=msabramo" title="Documentation">π</a></td> </tr> <tr> + <td align="center"><a href="http://marc-abramowitz.com/"><img src="https://avatars.githubusercontent.com/u/305268?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Marc Abramowitz</b></sub></a><br /><a href="https://github.com/reclosedev/requests-cache/commits?author=msabramo" title="Code">π»</a> <a href="https://github.com/reclosedev/requests-cache/commits?author=msabramo" title="Documentation">π</a></td> <td align="center"><a href="https://gedmin.as/"><img src="https://avatars.githubusercontent.com/u/159967?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Marius Gedminas</b></sub></a><br /><a href="https://github.com/reclosedev/requests-cache/commits?author=mgedmin" title="Code">π»</a> <a href="https://github.com/reclosedev/requests-cache/issues?q=author%3Amgedmin" title="Bug reports">π</a></td> <td align="center"><a href="https://lab.ar90n.net/"><img src="https://avatars.githubusercontent.com/u/2285892?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Masahiro Wada</b></sub></a><br /><a href="https://github.com/reclosedev/requests-cache/commits?author=ar90n" title="Code">π»</a> <a href="#feature-ar90n" title="New features">β¨</a></td> <td align="center"><a href="https://santini.di.unimi.it/"><img src="https://avatars.githubusercontent.com/u/612826?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Massimo Santini</b></sub></a><br /><a href="#ideas-mapio" title="Ideas, Planning, & Feedback">π€</a></td> <td align="center"><a href="http://www.mherman.org/"><img src="https://avatars.githubusercontent.com/u/2018167?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Michael Herman</b></sub></a><br /><a href="https://github.com/reclosedev/requests-cache/commits?author=mjhea0" title="Code">π»</a> <a href="https://github.com/reclosedev/requests-cache/commits?author=mjhea0" title="Documentation">π</a></td> <td align="center"><a href="https://mgorny.pl/"><img src="https://avatars.githubusercontent.com/u/110765?v=4?s=100" width="100px;" alt=""/><br /><sub><b>MichaΕ GΓ³rny</b></sub></a><br /><a href="#infra-mgorny" title="Infrastructure (Hosting, Build-Tools, etc)">π</a></td> <td align="center"><a href="https://github.com/mnowotka"><img src="https://avatars.githubusercontent.com/u/837119?v=4?s=100" width="100px;" alt=""/><br /><sub><b>MichaΕ Nowotka</b></sub></a><br /><a href="#ideas-mnowotka" title="Ideas, Planning, & Feedback">π€</a></td> - <td align="center"><a href="https://beaumont.dev/"><img src="https://avatars.githubusercontent.com/u/2266568?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Mike</b></sub></a><br /><a href="https://github.com/reclosedev/requests-cache/commits?author=michaelbeaumont" title="Code">π»</a> <a href="#feature-michaelbeaumont" title="New features">β¨</a></td> </tr> <tr> + <td align="center"><a href="https://beaumont.dev/"><img src="https://avatars.githubusercontent.com/u/2266568?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Mike</b></sub></a><br /><a href="https://github.com/reclosedev/requests-cache/commits?author=michaelbeaumont" title="Code">π»</a> <a href="#feature-michaelbeaumont" title="New features">β¨</a></td> <td align="center"><a href="https://nathancahill.com/"><img src="https://avatars.githubusercontent.com/u/1383872?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Nathan Cahill</b></sub></a><br /><a href="https://github.com/reclosedev/requests-cache/issues?q=author%3Anathancahill" title="Bug reports">π</a></td> <td align="center"><a href="https://gitlab.com/kousu"><img src="https://avatars.githubusercontent.com/u/987487?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Nick</b></sub></a><br /><a href="#ideas-kousu" title="Ideas, Planning, & Feedback">π€</a></td> <td align="center"><a href="https://github.com/olivierdalang"><img src="https://avatars.githubusercontent.com/u/1894106?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Olivier Dalang</b></sub></a><br /><a href="https://github.com/reclosedev/requests-cache/commits?author=olivierdalang" title="Code">π»</a></td> <td align="center"><a href="https://github.com/parkerhancock"><img src="https://avatars.githubusercontent.com/u/633163?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Parker Hancock</b></sub></a><br /><a href="https://github.com/reclosedev/requests-cache/commits?author=parkerhancock" title="Code">π»</a> <a href="#feature-parkerhancock" title="New features">β¨</a> <a href="https://github.com/reclosedev/requests-cache/issues?q=author%3Aparkerhancock" title="Bug reports">π</a> <a href="https://github.com/reclosedev/requests-cache/commits?author=parkerhancock" title="Tests">β οΈ</a> <a href="https://github.com/reclosedev/requests-cache/commits?author=parkerhancock" title="Documentation">π</a> <a href="#security-parkerhancock" title="Security">π‘οΈ</a> <a href="#ideas-parkerhancock" title="Ideas, Planning, & Feedback">π€</a></td> <td align="center"><a href="https://phil.red/"><img src="https://avatars.githubusercontent.com/u/291575?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Philipp A.</b></sub></a><br /><a href="https://github.com/reclosedev/requests-cache/issues?q=author%3Aflying-sheep" title="Bug reports">π</a></td> <td align="center"><a href="https://roderic.ca/"><img src="https://avatars.githubusercontent.com/u/6867226?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Roderic Day</b></sub></a><br /><a href="https://github.com/reclosedev/requests-cache/issues?q=author%3ARodericDay" title="Bug reports">π</a></td> - <td align="center"><a href="https://github.com/reclosedev"><img src="https://avatars.githubusercontent.com/u/660112?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Roman Haritonov</b></sub></a><br /><a href="https://github.com/reclosedev/requests-cache/commits?author=reclosedev" title="Code">π»</a> <a href="#maintenance-reclosedev" title="Maintenance">π§</a> <a href="#feature-reclosedev" title="New features">β¨</a> <a href="https://github.com/reclosedev/requests-cache/issues?q=author%3Areclosedev" title="Bug reports">π</a> <a href="https://github.com/reclosedev/requests-cache/commits?author=reclosedev" title="Tests">β οΈ</a> <a href="https://github.com/reclosedev/requests-cache/commits?author=reclosedev" title="Documentation">π</a> <a href="#infra-reclosedev" title="Infrastructure (Hosting, Build-Tools, etc)">π</a></td> </tr> <tr> + <td align="center"><a href="https://github.com/reclosedev"><img src="https://avatars.githubusercontent.com/u/660112?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Roman Haritonov</b></sub></a><br /><a href="https://github.com/reclosedev/requests-cache/commits?author=reclosedev" title="Code">π»</a> <a href="#maintenance-reclosedev" title="Maintenance">π§</a> <a href="#feature-reclosedev" title="New features">β¨</a> <a href="https://github.com/reclosedev/requests-cache/issues?q=author%3Areclosedev" title="Bug reports">π</a> <a href="https://github.com/reclosedev/requests-cache/commits?author=reclosedev" title="Tests">β οΈ</a> <a href="https://github.com/reclosedev/requests-cache/commits?author=reclosedev" title="Documentation">π</a> <a href="#infra-reclosedev" title="Infrastructure (Hosting, Build-Tools, etc)">π</a></td> <td align="center"><a href="https://www.facebook.com/avasamdev"><img src="https://avatars.githubusercontent.com/u/1350584?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Samuel T.</b></sub></a><br /><a href="https://github.com/reclosedev/requests-cache/issues?q=author%3AAvasam" title="Bug reports">π</a> <a href="#ideas-Avasam" title="Ideas, Planning, & Feedback">π€</a></td> <td align="center"><a href="https://sebastian-hoeffner.de/"><img src="https://avatars.githubusercontent.com/u/1836815?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Sebastian HΓΆffner</b></sub></a><br /><a href="https://github.com/reclosedev/requests-cache/commits?author=shoeffner" title="Code">π»</a> <a href="#feature-shoeffner" title="New features">β¨</a> <a href="https://github.com/reclosedev/requests-cache/commits?author=shoeffner" title="Tests">β οΈ</a> <a href="#ideas-shoeffner" title="Ideas, Planning, & Feedback">π€</a></td> <td align="center"><a href="https://sbiewald.de/"><img src="https://avatars.githubusercontent.com/u/5983372?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Simon Biewald</b></sub></a><br /><a href="#security-Varbin" title="Security">π‘οΈ</a> <a href="#ideas-Varbin" title="Ideas, Planning, & Feedback">π€</a></td> <td align="center"><a href="http://pathmind.com/"><img src="https://avatars.githubusercontent.com/u/1197406?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Slin Lee</b></sub></a><br /><a href="https://github.com/reclosedev/requests-cache/commits?author=slinlee" title="Documentation">π</a></td> <td align="center"><a href="https://www.stavros.io/"><img src="https://avatars.githubusercontent.com/u/23648?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Stavros Korokithakis</b></sub></a><br /><a href="#infra-skorokithakis" title="Infrastructure (Hosting, Build-Tools, etc)">π</a> <a href="#tool-skorokithakis" title="Tools">π§</a> <a href="https://github.com/reclosedev/requests-cache/commits?author=skorokithakis" title="Documentation">π</a></td> <td align="center"><a href="https://vladimir.panteleev.md/"><img src="https://avatars.githubusercontent.com/u/160894?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Vladimir Panteleev</b></sub></a><br /><a href="#ideas-CyberShadow" title="Ideas, Planning, & Feedback">π€</a></td> - <td align="center"><a href="https://sansec.io/"><img src="https://avatars.githubusercontent.com/u/1145479?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Willem de Groot</b></sub></a><br /><a href="https://github.com/reclosedev/requests-cache/commits?author=gwillem" title="Code">π»</a> <a href="https://github.com/reclosedev/requests-cache/issues?q=author%3Agwillem" title="Bug reports">π</a></td> </tr> <tr> + <td align="center"><a href="https://sansec.io/"><img src="https://avatars.githubusercontent.com/u/1145479?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Willem de Groot</b></sub></a><br /><a href="https://github.com/reclosedev/requests-cache/commits?author=gwillem" title="Code">π»</a> <a href="https://github.com/reclosedev/requests-cache/issues?q=author%3Agwillem" title="Bug reports">π</a></td> <td align="center"><a href="https://github.com/WouterVH"><img src="https://avatars.githubusercontent.com/u/469509?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Wouter Vanden Hove</b></sub></a><br /><a href="https://github.com/reclosedev/requests-cache/issues?q=author%3AWouterVH" title="Bug reports">π</a></td> <td align="center"><a href="https://github.com/YetAnotherNerd"><img src="https://avatars.githubusercontent.com/u/320738?v=4?s=100" width="100px;" alt=""/><br /><sub><b>YetAnotherNerd</b></sub></a><br /><a href="https://github.com/reclosedev/requests-cache/commits?author=YetAnotherNerd" title="Code">π»</a> <a href="#feature-YetAnotherNerd" title="New features">β¨</a> <a href="https://github.com/reclosedev/requests-cache/issues?q=author%3AYetAnotherNerd" title="Bug reports">π</a></td> <td align="center"><a href="https://github.com/aaron-mf1"><img src="https://avatars.githubusercontent.com/u/65560918?v=4?s=100" width="100px;" alt=""/><br /><sub><b>aaron-mf1</b></sub></a><br /><a href="#ideas-aaron-mf1" title="Ideas, Planning, & Feedback">π€</a></td> <td align="center"><a href="https://github.com/coryairbhb"><img src="https://avatars.githubusercontent.com/u/50755629?v=4?s=100" width="100px;" alt=""/><br /><sub><b>coryairbhb</b></sub></a><br /><a href="https://github.com/reclosedev/requests-cache/issues?q=author%3Acoryairbhb" title="Bug reports">π</a></td> <td align="center"><a href="https://github.com/craigls"><img src="https://avatars.githubusercontent.com/u/972350?v=4?s=100" width="100px;" alt=""/><br /><sub><b>craig</b></sub></a><br /><a href="https://github.com/reclosedev/requests-cache/commits?author=craigls" title="Code">π»</a> <a href="https://github.com/reclosedev/requests-cache/issues?q=author%3Acraigls" title="Bug reports">π</a></td> <td align="center"><a href="https://stackoverflow.com/users/86643/denis"><img src="https://avatars.githubusercontent.com/u/1280390?v=4?s=100" width="100px;" alt=""/><br /><sub><b>denis-bz</b></sub></a><br /><a href="https://github.com/reclosedev/requests-cache/issues?q=author%3Adenis-bz" title="Bug reports">π</a></td> - <td align="center"><a href="https://github.com/gorogoroumaru"><img src="https://avatars.githubusercontent.com/u/30716350?v=4?s=100" width="100px;" alt=""/><br /><sub><b>gorogoroumaru</b></sub></a><br /><a href="https://github.com/reclosedev/requests-cache/commits?author=gorogoroumaru" title="Code">π»</a></td> </tr> <tr> + <td align="center"><a href="https://github.com/gorogoroumaru"><img src="https://avatars.githubusercontent.com/u/30716350?v=4?s=100" width="100px;" alt=""/><br /><sub><b>gorogoroumaru</b></sub></a><br /><a href="https://github.com/reclosedev/requests-cache/commits?author=gorogoroumaru" title="Code">π»</a></td> <td align="center"><a href="https://github.com/harvey251"><img src="https://avatars.githubusercontent.com/u/33844174?v=4?s=100" width="100px;" alt=""/><br /><sub><b>harvey251</b></sub></a><br /><a href="https://github.com/reclosedev/requests-cache/issues?q=author%3Aharvey251" title="Bug reports">π</a></td> <td align="center"><a href="https://github.com/mbarkhau"><img src="https://avatars.githubusercontent.com/u/446561?v=4?s=100" width="100px;" alt=""/><br /><sub><b>mbarkhau</b></sub></a><br /><a href="https://github.com/reclosedev/requests-cache/commits?author=mbarkhau" title="Code">π»</a> <a href="https://github.com/reclosedev/requests-cache/commits?author=mbarkhau" title="Tests">β οΈ</a> <a href="#infra-mbarkhau" title="Infrastructure (Hosting, Build-Tools, etc)">π</a> <a href="https://github.com/reclosedev/requests-cache/issues?q=author%3Ambarkhau" title="Bug reports">π</a></td> <td align="center"><a href="https://github.com/shiftinv"><img src="https://avatars.githubusercontent.com/u/8530778?v=4?s=100" width="100px;" alt=""/><br /><sub><b>shiftinv</b></sub></a><br /><a href="https://github.com/reclosedev/requests-cache/commits?author=shiftinv" title="Code">π»</a> <a href="https://github.com/reclosedev/requests-cache/issues?q=author%3Ashiftinv" title="Bug reports">π</a></td> @@ -9,6 +9,8 @@ * Some micro-optimizations for request matching * Fix issue with cache headers not being used correctly if `cache_control=True` is used with an `expire_after` value * Support immediate expiration + revalidation for `Cache-Control: max-age=0` and `Expires: 0` +* Fix duplicate read operation for checking whether to read from redirects cache +* Skip unnecessary contains check if a key is in the main responses cache * Fix license metadata as shown on PyPI ## 0.8.1 (2021-09-15) diff --git a/requests_cache/backends/base.py b/requests_cache/backends/base.py index d57e02d..d561eb9 100644 --- a/requests_cache/backends/base.py +++ b/requests_cache/backends/base.py @@ -10,7 +10,7 @@ from collections import UserDict from collections.abc import MutableMapping from datetime import datetime from logging import getLogger -from typing import Callable, Iterable, Iterator, Tuple, Union +from typing import Callable, Iterable, Iterator, Optional, Tuple, Union from ..cache_control import ExpirationTime from ..cache_keys import create_key, redact_response @@ -63,7 +63,7 @@ class BaseCache: for response in self.values(): yield response.url - def get_response(self, key: str, default=None) -> CachedResponse: + def get_response(self, key: str, default=None) -> Optional[CachedResponse]: """Retrieve a response from the cache, if it exists Args: @@ -71,9 +71,9 @@ class BaseCache: default: Value to return if `key` is not in the cache """ try: - if key not in self.responses: - key = self.redirects[key] - response = self.responses[key] + response = self.responses.get(key) + if response is None: # Note: bool(requests.Response) is False if status > 400 + response = self.responses[self.redirects[key]] response.cache_key = key # Set cache key here, since it's not serialized response.reset() # In case response was in memory and content has already been read return response diff --git a/requests_cache/cache_keys.py b/requests_cache/cache_keys.py index 953d5c0..19b518a 100644 --- a/requests_cache/cache_keys.py +++ b/requests_cache/cache_keys.py @@ -97,12 +97,12 @@ def normalize_request(request: AnyRequest, ignored_parameters: ParamList) -> Any to remove from the request """ if isinstance(request, Request): - norm_request = Session().prepare_request(request) + norm_request: AnyPreparedRequest = Session().prepare_request(request) else: norm_request = request.copy() norm_request.method = (norm_request.method or '').upper() - norm_request.url = normalize_url(norm_request.url, ignored_parameters) + norm_request.url = normalize_url(norm_request.url or '', ignored_parameters) norm_request.headers = normalize_headers(norm_request.headers, ignored_parameters) norm_request.body = normalize_body(norm_request, ignored_parameters) return norm_request diff --git a/tests/integration/base_cache_test.py b/tests/integration/base_cache_test.py index 9f3e1b0..9b84a14 100644 --- a/tests/integration/base_cache_test.py +++ b/tests/integration/base_cache_test.py @@ -91,6 +91,21 @@ class BaseCacheTest: assert r2.from_cache is True assert r1.content == r2.content + def test_response_no_duplicate_read(self): + """Ensure that response data is read only once per request, whether it's cached or not""" + session = self.init_session() + storage_class = type(session.cache.responses) + + # Patch storage class to track number of times getitem is called, without changing behavior + with patch.object( + storage_class, '__getitem__', side_effect=storage_class.__getitem__ + ) as getitem: + session.get(httpbin('get')) + assert getitem.call_count == 1 + + session.get(httpbin('get')) + assert getitem.call_count == 2 + @pytest.mark.parametrize('n_redirects', range(1, 5)) @pytest.mark.parametrize('endpoint', ['redirect', 'absolute-redirect', 'relative-redirect']) def test_redirect_history(self, endpoint, n_redirects): diff --git a/tests/unit/test_session.py b/tests/unit/test_session.py index e95c829..45bec2c 100644 --- a/tests/unit/test_session.py +++ b/tests/unit/test_session.py @@ -521,7 +521,7 @@ def test_stale_if_error__error_code(mock_session): mock_session.allowable_codes = (200, 404) assert mock_session.get(MOCKED_URL_404).from_cache is False - assert mock_session.get(MOCKED_URL_404).from_cache is True + time.sleep(0.2) response = mock_session.get(MOCKED_URL_404) assert response.from_cache is True and response.is_expired is True |