Fixed #10581 -- Fixed conditional handling of If-Match headers.
The conditional processing decorator from r10114 wasn't parsing ETags from an If-Match header correctly. Patch from Ivan Sagalaev (who also did most of the work in r10114, before I rewrote parts of it and added bonus bugs, although I forgot to thank him there). git-svn-id: http://code.djangoproject.com/svn/django/trunk@10116 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
14b160957e
commit
3bb68004ff
|
@ -75,7 +75,7 @@ def condition(etag_func=None, last_modified_func=None):
|
||||||
if if_none_match or if_match:
|
if if_none_match or if_match:
|
||||||
# There can be more than one ETag in the request, so we
|
# There can be more than one ETag in the request, so we
|
||||||
# consider the list of values.
|
# consider the list of values.
|
||||||
etags = parse_etags(if_none_match)
|
etags = parse_etags(if_none_match or if_match)
|
||||||
|
|
||||||
# Compute values (if any) for the requested resource.
|
# Compute values (if any) for the requested resource.
|
||||||
if etag_func:
|
if etag_func:
|
||||||
|
|
|
@ -50,6 +50,14 @@ class ConditionalGet(TestCase):
|
||||||
response = self.client.get('/condition/')
|
response = self.client.get('/condition/')
|
||||||
self.assertNotModified(response)
|
self.assertNotModified(response)
|
||||||
|
|
||||||
|
def testIfMatch(self):
|
||||||
|
self.client.defaults['HTTP_IF_MATCH'] = '"%s"' % ETAG
|
||||||
|
response = self.client.put('/condition/etag/', {'data': ''})
|
||||||
|
self.assertEquals(response.status_code, 200)
|
||||||
|
self.client.defaults['HTTP_IF_MATCH'] = '"%s"' % EXPIRED_ETAG
|
||||||
|
response = self.client.put('/condition/etag/', {'data': ''})
|
||||||
|
self.assertEquals(response.status_code, 412)
|
||||||
|
|
||||||
def testBothHeaders(self):
|
def testBothHeaders(self):
|
||||||
self.client.defaults['HTTP_IF_MODIFIED_SINCE'] = LAST_MODIFIED_STR
|
self.client.defaults['HTTP_IF_MODIFIED_SINCE'] = LAST_MODIFIED_STR
|
||||||
self.client.defaults['HTTP_IF_NONE_MATCH'] = '"%s"' % ETAG
|
self.client.defaults['HTTP_IF_NONE_MATCH'] = '"%s"' % ETAG
|
||||||
|
|
Loading…
Reference in New Issue