diff options
Diffstat (limited to 'python3')
| -rwxr-xr-x | python3/httplib2/__init__.py | 8 | ||||
| -rwxr-xr-x | python3/httplib2test.py | 22 |
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
|
