summaryrefslogtreecommitdiff
path: root/python3
diff options
context:
space:
mode:
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