summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJordan Cook <JWCook@users.noreply.github.com>2021-10-23 11:12:59 -0500
committerGitHub <noreply@github.com>2021-10-23 11:12:59 -0500
commitc23c5e831374977ff99d0e5df87dab2688ddbbfd (patch)
tree6f13b35246d4209d4cce1b4fd557ee2654e061d8
parent97f700b3d9ece724c3db1938c244dd82e8d74f10 (diff)
parentc5e6b9525cd74a37377dfdd78d9e33dae13e2691 (diff)
downloadrequests-cache-c23c5e831374977ff99d0e5df87dab2688ddbbfd.tar.gz
Merge pull request #438 from JWCook/fix-duplicate-cache-read
Fix duplicate cache read
-rw-r--r--.all-contributorsrc10
-rw-r--r--.pre-commit-config.yaml4
-rw-r--r--CONTRIBUTORS.md13
-rw-r--r--HISTORY.md2
-rw-r--r--requests_cache/backends/base.py10
-rw-r--r--requests_cache/cache_keys.py4
-rw-r--r--tests/integration/base_cache_test.py15
-rw-r--r--tests/unit/test_session.py2
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>
diff --git a/HISTORY.md b/HISTORY.md
index ccbfe96..e4e24bc 100644
--- a/HISTORY.md
+++ b/HISTORY.md
@@ -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