summaryrefslogtreecommitdiff
path: root/python3
diff options
context:
space:
mode:
authorJoe Gregorio <joe@bitworking.org>2009-07-16 14:57:52 -0400
committerJoe Gregorio <joe@bitworking.org>2009-07-16 14:57:52 -0400
commite202d210b618cba29d2c300b17a2ffb8e003fd14 (patch)
treeddcd15c9bcb7429d82f4f5dc07c2ecd2a4255f0f /python3
parentb628c0b6acf4d5ce481391ace3d6c0410b2918fd (diff)
downloadhttplib2-e202d210b618cba29d2c300b17a2ffb8e003fd14.tar.gz
Fixed issue #12 - Cache-Control: only-if-cached incorrectly does request if item not in cache
Diffstat (limited to 'python3')
-rwxr-xr-xpython3/httplib2/__init__.py8
-rwxr-xr-xpython3/httplib2test.py22
2 files changed, 25 insertions, 5 deletions
diff --git a/python3/httplib2/__init__.py b/python3/httplib2/__init__.py
index d660796..389c3fe 100755
--- a/python3/httplib2/__init__.py
+++ b/python3/httplib2/__init__.py
@@ -1074,7 +1074,13 @@ a string that contains the response entity body.
self.cache.delete(cachekey)
content = new_content
else:
- (response, content) = self._request(conn, authority, uri, request_uri, method, body, headers, redirections, cachekey)
+ cc = _parse_cache_control(headers)
+ if 'only-if-cached'in cc:
+ info['status'] = '504'
+ response = Response(info)
+ content = b""
+ else:
+ (response, content) = self._request(conn, authority, uri, request_uri, method, body, headers, redirections, cachekey)
except Exception as e:
if self.force_exception_to_status_code:
if isinstance(e, HttpLib2ErrorWithResponse):
diff --git a/python3/httplib2test.py b/python3/httplib2test.py
index 5b91164..6db6756 100755
--- a/python3/httplib2test.py
+++ b/python3/httplib2test.py
@@ -203,13 +203,27 @@ class HttpTest(unittest.TestCase):
self.assertEqual(response.status, 200)
self.assertEqual(response.previous, None)
+ def testGetOnlyIfCachedCacheHit(self):
+ # Test that can do a GET with cache and 'only-if-cached'
+ uri = urllib.parse.urljoin(base, "304/test_etag.txt")
+ (response, content) = self.http.request(uri, "GET")
+ (response, content) = self.http.request(uri, "GET", headers={'cache-control': 'only-if-cached'})
+ self.assertEqual(response.fromcache, True)
+ self.assertEqual(response.status, 200)
+
+ def testGetOnlyIfCachedCacheMissCache(self):
+ # Test that can do a GET with cache and 'only-if-cached'
+ uri = urllib.parse.urljoin(base, "304/test_etag.txt")
+ (response, content) = self.http.request(uri, "GET", headers={'cache-control': 'only-if-cached'})
+ self.assertEqual(response.fromcache, False)
+ self.assertEqual(response.status, 504)
+
def testGetOnlyIfCachedCacheMiss(self):
# Test that can do a GET with no cache with 'only-if-cached'
- http = httplib2.Http()
uri = urllib.parse.urljoin(base, "304/test_etag.txt")
- (response, content) = http.request(uri, "GET", headers={'cache-control': 'only-if-cached'})
+ (response, content) = self.http.request(uri, "GET", headers={'cache-control': 'only-if-cached'})
self.assertEqual(response.fromcache, False)
- self.assertEqual(response.status, 200)
+ self.assertEqual(response.status, 504)
def testGetOnlyIfCachedNoCacheAtAll(self):
# Test that can do a GET with no cache with 'only-if-cached'
@@ -220,7 +234,7 @@ class HttpTest(unittest.TestCase):
uri = urllib.parse.urljoin(base, "304/test_etag.txt")
(response, content) = http.request(uri, "GET", headers={'cache-control': 'only-if-cached'})
self.assertEqual(response.fromcache, False)
- self.assertEqual(response.status, 200)
+ self.assertEqual(response.status, 504)
def testUserAgent(self):
# Test that we provide a default user-agent