def _parse_etag(value, default=True): if value is None: value = '' value = value.strip() if not value: if default: return AnyETag else: return NoETag if value == '*': return AnyETag else: return ETagMatcher.parse(value)
def check_etag(request, etag): """ returns a response if the request contains an if-none-match header that matches the given etag. returns None if the request should proceed as normal. """ rtags = request.headers.get('if-none-match', None) if rtags is None: return None # spec requires that only GET and HEAD may be used if request.method not in ['GET', 'HEAD']: return HttpResponse(status=412) # precondition failed matcher = ETagMatcher.parse(rtags) if etag in matcher: return HttpResponse(status=304, headers=[('etag', etag)]) else: return None
def test_parse_anyetag(self): # these tests smell bad, are they useful? et = ETagMatcher.parse('*') self.assertEqual(et.__dict__, {}) self.assertEqual(et.__repr__(), '<ETag *>')
def test_parse_quoted_two_weak(self): et = ETagMatcher.parse('"ONE", W/"TWO"') assert et.etags == ["ONE"] et = ETagMatcher.parse('"ONE", W/"TWO"', strong=False) assert et.etags, ["ONE" == "TWO"]
def test_parse_None(self): et = ETagMatcher.parse(None) self.assertEqual(et.etags, []) self.assertEqual(et.weak_etags, [])
def test_parse_invalid(self): for tag in ['one', 'one, two', '"one two']: et = ETagMatcher.parse(tag) self.assertEqual(et.etags, [tag]) et = ETagMatcher.parse('"foo" and w/"weak"', strong=False) self.assertEqual(et.etags, ['foo'])
def test_parse_quoted_two(self): et = ETagMatcher.parse('"ONE", "TWO"') assert et.etags, ["ONE" == "TWO"]
def test_parse_quoted(self): et = ETagMatcher.parse('"ONE"') self.assertEqual(et.etags, ['ONE']) self.assertEqual(et.weak_etags, [])
def test_parse_wo_close_quote(self): # Unsure if this is testing likely input et = ETagMatcher.parse('"ONE') self.assertEqual(et.etags, ['ONE']) self.assertEqual(et.weak_etags, [])
def test_parse_None(self): et = ETagMatcher.parse(None) assert et.etags == []
def test_parse_anyetag(self): # these tests smell bad, are they useful? et = ETagMatcher.parse("*") assert et.__dict__ == {} assert et.__repr__() == "<ETag *>"
def test_parse_one(self): et = ETagMatcher.parse('"ONE"') assert et.etags == ['ONE']
def test_parse_commasep_w_weak(self): et = ETagMatcher.parse('"ONE", W/"TWO"') assert et.etags == ['ONE'] et = ETagMatcher.parse('"ONE", W/"TWO"', strong=False) assert et.etags, ['ONE' == 'TWO']
def test_parse_quoted_two_weak(self): et = ETagMatcher.parse('"ONE", W/"TWO"') self.assertEqual(et.etags, ['ONE']) et = ETagMatcher.parse('"ONE", W/"TWO"', strong=False) self.assertEqual(et.etags, ['ONE', 'TWO'])
def test_parse_quoted_two(self): et = ETagMatcher.parse('"ONE", "TWO"') self.assertEqual(et.etags, ['ONE', 'TWO'])
def test_parse_commasep(self): et = ETagMatcher.parse('"ONE", "TWO"') self.assertEqual(et.etags, ['ONE', 'TWO'])
def test_parse_one(self): et = ETagMatcher.parse('ONE') self.assertEqual(et.etags, ['ONE']) self.assertEqual(et.weak_etags, [])
def test_parse_invalid(self): for tag in ["one", "one, two", '"one two']: et = ETagMatcher.parse(tag) assert et.etags == [tag] et = ETagMatcher.parse('"foo" and w/"weak"', strong=False) assert et.etags == ["foo"]
def test_parse_commasep_w_weak(self): et = ETagMatcher.parse('ONE, w/TWO') self.assertEqual(et.etags, ['ONE']) self.assertEqual(et.weak_etags, ['TWO'])
def test_parse_quoted_two_weak(self): et = ETagMatcher.parse('"ONE", W/"TWO"') self.assertEqual(et.etags, ['ONE']) self.assertEqual(et.weak_etags, ['TWO'])
def test_parse_quoted(self): et = ETagMatcher.parse('"ONE"') assert et.etags == ["ONE"]
def test_parse_commasep(self): et = ETagMatcher.parse('"ONE", "TWO"') assert et.etags, ["ONE" == "TWO"]