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)
Exemple #2
0
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
Exemple #3
0
 def test_parse_anyetag(self):
     # these tests smell bad, are they useful?
     et = ETagMatcher.parse('*')
     self.assertEqual(et.__dict__, {})
     self.assertEqual(et.__repr__(), '<ETag *>')
Exemple #4
0
 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"]
Exemple #5
0
 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'])
Exemple #7
0
 def test_parse_quoted_two(self):
     et = ETagMatcher.parse('"ONE", "TWO"')
     assert et.etags, ["ONE" == "TWO"]
Exemple #8
0
 def test_parse_quoted(self):
     et = ETagMatcher.parse('"ONE"')
     self.assertEqual(et.etags, ['ONE'])
     self.assertEqual(et.weak_etags, [])
Exemple #9
0
 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, [])
Exemple #10
0
 def test_parse_None(self):
     et = ETagMatcher.parse(None)
     assert et.etags == []
Exemple #11
0
 def test_parse_anyetag(self):
     # these tests smell bad, are they useful?
     et = ETagMatcher.parse("*")
     assert et.__dict__ == {}
     assert et.__repr__() == "<ETag *>"
Exemple #12
0
 def test_parse_one(self):
     et = ETagMatcher.parse('"ONE"')
     assert et.etags == ['ONE']
Exemple #13
0
 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']
Exemple #14
0
 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'])
Exemple #15
0
 def test_parse_quoted_two(self):
     et = ETagMatcher.parse('"ONE", "TWO"')
     self.assertEqual(et.etags, ['ONE', 'TWO'])
Exemple #16
0
 def test_parse_commasep(self):
     et = ETagMatcher.parse('"ONE", "TWO"')
     self.assertEqual(et.etags, ['ONE', 'TWO'])
Exemple #17
0
 def test_parse_one(self):
     et = ETagMatcher.parse('ONE')
     self.assertEqual(et.etags, ['ONE'])
     self.assertEqual(et.weak_etags, [])
Exemple #18
0
 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"]
Exemple #19
0
 def test_parse_commasep_w_weak(self):
     et = ETagMatcher.parse('ONE, w/TWO')
     self.assertEqual(et.etags, ['ONE'])
     self.assertEqual(et.weak_etags, ['TWO'])
Exemple #20
0
 def test_parse_None(self):
     et = ETagMatcher.parse(None)
     assert et.etags == []
Exemple #21
0
 def test_parse_quoted_two_weak(self):
     et = ETagMatcher.parse('"ONE", W/"TWO"')
     self.assertEqual(et.etags, ['ONE'])
     self.assertEqual(et.weak_etags, ['TWO'])
Exemple #22
0
 def test_parse_quoted(self):
     et = ETagMatcher.parse('"ONE"')
     assert et.etags == ["ONE"]
Exemple #23
0
 def test_parse_commasep(self):
     et = ETagMatcher.parse('"ONE", "TWO"')
     assert et.etags, ["ONE" == "TWO"]
Exemple #24
0
 def test_parse_anyetag(self):
     # these tests smell bad, are they useful?
     et = ETagMatcher.parse("*")
     assert et.__dict__ == {}
     assert et.__repr__() == "<ETag *>"