web/http_headers.py
changeset 9569 ac0bc417b55f
parent 9435 dde8ea5d7ffd
child 9571 aaf83cc07eed
equal deleted inserted replaced
9568:e8b9a3d23ad9 9569:ac0bc417b55f
   378 def last(seq):
   378 def last(seq):
   379     """Return seq[-1]"""
   379     """Return seq[-1]"""
   380 
   380 
   381     return seq[-1]
   381     return seq[-1]
   382 
   382 
       
   383 def unique(seq):
       
   384     '''if seq is not a string, check it's a sequence of one element and return it'''
       
   385     if isinstance(seq, basestring):
       
   386         return seq
       
   387     if len(seq) != 1:
       
   388         raise ValueError('single value required, not %s' % seq)
       
   389     return seq[0]
       
   390 
   383 ##### Generation utilities
   391 ##### Generation utilities
   384 def quoteString(s):
   392 def quoteString(s):
   385     return '"%s"' % s.replace('\\', '\\\\').replace('"', '\\"')
   393     return '"%s"' % s.replace('\\', '\\\\').replace('"', '\\"')
   386 
   394 
   387 def listGenerator(fun):
   395 def listGenerator(fun):
  1470     'Accept-Encoding': (iteritems, removeDefaultEncoding, listGenerator(generateAcceptQvalue),singleHeader),
  1478     'Accept-Encoding': (iteritems, removeDefaultEncoding, listGenerator(generateAcceptQvalue),singleHeader),
  1471     'Accept-Language': (iteritems, listGenerator(generateAcceptQvalue),singleHeader),
  1479     'Accept-Language': (iteritems, listGenerator(generateAcceptQvalue),singleHeader),
  1472     'Authorization': (generateAuthorization,), # what is "credentials"
  1480     'Authorization': (generateAuthorization,), # what is "credentials"
  1473     'Cookie':(generateCookie,singleHeader),
  1481     'Cookie':(generateCookie,singleHeader),
  1474     'Expect':(iteritems, listGenerator(generateExpect), singleHeader),
  1482     'Expect':(iteritems, listGenerator(generateExpect), singleHeader),
  1475     'From':(str,singleHeader),
  1483     'From':(unique, str,singleHeader),
  1476     'Host':(str,singleHeader),
  1484     'Host':(unique, str,singleHeader),
  1477     'If-Match':(listGenerator(generateStarOrETag), singleHeader),
  1485     'If-Match':(listGenerator(generateStarOrETag), singleHeader),
  1478     'If-Modified-Since':(generateDateTime,singleHeader),
  1486     'If-Modified-Since':(generateDateTime,singleHeader),
  1479     'If-None-Match':(listGenerator(generateStarOrETag), singleHeader),
  1487     'If-None-Match':(listGenerator(generateStarOrETag), singleHeader),
  1480     'If-Range':(generateIfRange, singleHeader),
  1488     'If-Range':(generateIfRange, singleHeader),
  1481     'If-Unmodified-Since':(generateDateTime,singleHeader),
  1489     'If-Unmodified-Since':(generateDateTime,singleHeader),
  1482     'Max-Forwards':(str, singleHeader),
  1490     'Max-Forwards':(unique, str, singleHeader),
  1483 #    'Proxy-Authorization':str, # what is "credentials"
  1491 #    'Proxy-Authorization':str, # what is "credentials"
  1484     'Range':(generateRange,singleHeader),
  1492     'Range':(generateRange,singleHeader),
  1485     'Referer':(str,singleHeader),
  1493     'Referer':(unique, str,singleHeader),
  1486     'TE': (iteritems, listGenerator(generateAcceptQvalue),singleHeader),
  1494     'TE': (iteritems, listGenerator(generateAcceptQvalue),singleHeader),
  1487     'User-Agent':(str,singleHeader),
  1495     'User-Agent':(unique, str,singleHeader),
  1488 }
  1496 }
  1489 
  1497 
  1490 parser_response_headers = {
  1498 parser_response_headers = {
  1491     'Accept-Ranges':(tokenize, filterTokens),
  1499     'Accept-Ranges':(tokenize, filterTokens),
  1492     'Age':(last,int),
  1500     'Age':(last,int),
  1502                          parseWWWAuthenticate,)
  1510                          parseWWWAuthenticate,)
  1503 }
  1511 }
  1504 
  1512 
  1505 generator_response_headers = {
  1513 generator_response_headers = {
  1506     'Accept-Ranges':(generateList, singleHeader),
  1514     'Accept-Ranges':(generateList, singleHeader),
  1507     'Age':(str, singleHeader),
  1515     'Age':(unique, str, singleHeader),
  1508     'ETag':(ETag.generate, singleHeader),
  1516     'ETag':(ETag.generate, singleHeader),
  1509     'Location':(str, singleHeader),
  1517     'Location':(unique, str, singleHeader),
  1510 #    'Proxy-Authenticate'
  1518 #    'Proxy-Authenticate'
  1511     'Retry-After':(generateRetryAfter, singleHeader),
  1519     'Retry-After':(generateRetryAfter, singleHeader),
  1512     'Server':(str, singleHeader),
  1520     'Server':(unique, str, singleHeader),
  1513     'Set-Cookie':(generateSetCookie,),
  1521     'Set-Cookie':(generateSetCookie,),
  1514     'Set-Cookie2':(generateSetCookie2,),
  1522     'Set-Cookie2':(generateSetCookie2,),
  1515     'Vary':(generateList, singleHeader),
  1523     'Vary':(generateList, singleHeader),
  1516     'WWW-Authenticate':(generateWWWAuthenticate,)
  1524     'WWW-Authenticate':(generateWWWAuthenticate,)
  1517 }
  1525 }
  1531 
  1539 
  1532 generator_entity_headers = {
  1540 generator_entity_headers = {
  1533     'Allow':(generateList, singleHeader),
  1541     'Allow':(generateList, singleHeader),
  1534     'Content-Encoding':(generateList, singleHeader),
  1542     'Content-Encoding':(generateList, singleHeader),
  1535     'Content-Language':(generateList, singleHeader),
  1543     'Content-Language':(generateList, singleHeader),
  1536     'Content-Length':(str, singleHeader),
  1544     'Content-Length':(unique, str, singleHeader),
  1537     'Content-Location':(str, singleHeader),
  1545     'Content-Location':(unique, str, singleHeader),
  1538     'Content-MD5':(base64.encodestring, lambda x: x.strip("\n"), singleHeader),
  1546     'Content-MD5':(base64.encodestring, lambda x: x.strip("\n"), singleHeader),
  1539     'Content-Range':(generateContentRange, singleHeader),
  1547     'Content-Range':(generateContentRange, singleHeader),
  1540     'Content-Type':(generateContentType, singleHeader),
  1548     'Content-Type':(generateContentType, singleHeader),
  1541     'Expires':(generateDateTime, singleHeader),
  1549     'Expires':(generateDateTime, singleHeader),
  1542     'Last-Modified':(generateDateTime, singleHeader),
  1550     'Last-Modified':(generateDateTime, singleHeader),