web/http_headers.py
changeset 9989 cfb6e9dab902
parent 9936 5dbf45204109
child 10000 4352b7ccde04
equal deleted inserted replaced
9988:623707a0c404 9989:cfb6e9dab902
   443             l.append('%s' % k)
   443             l.append('%s' % k)
   444         else:
   444         else:
   445             l.append('%s=%s' % (k, v))
   445             l.append('%s=%s' % (k, v))
   446     return ";".join(l)
   446     return ";".join(l)
   447 
   447 
       
   448 def generateTrueFalse(value):
       
   449     """
       
   450     Return 'true' or 'false' depending on the value.
       
   451 
       
   452     *   'true' values are `True`, `1`, `"true"`
       
   453     *   'false' values are `False`, `0`, `"false"`
       
   454 
       
   455     """
       
   456     if (value in (True, 1) or
       
   457             isinstance(value, basestring) and value.lower() == 'true'):
       
   458         return 'true'
       
   459     if (value in (False, 0) or
       
   460             isinstance(value, basestring) and value.lower() == 'false'):
       
   461         return 'false'
       
   462     raise ValueError("Invalid true/false header value: %s" % value)
   448 
   463 
   449 class MimeType(object):
   464 class MimeType(object):
   450     def fromString(klass, mimeTypeString):
   465     def fromString(klass, mimeTypeString):
   451         """Generate a MimeType object from the given string.
   466         """Generate a MimeType object from the given string.
   452 
   467 
  1481 parser_request_headers = {
  1496 parser_request_headers = {
  1482     'Accept': (tokenize, listParser(parseAccept), dict),
  1497     'Accept': (tokenize, listParser(parseAccept), dict),
  1483     'Accept-Charset': (tokenize, listParser(parseAcceptQvalue), dict, addDefaultCharset),
  1498     'Accept-Charset': (tokenize, listParser(parseAcceptQvalue), dict, addDefaultCharset),
  1484     'Accept-Encoding': (tokenize, listParser(parseAcceptQvalue), dict, addDefaultEncoding),
  1499     'Accept-Encoding': (tokenize, listParser(parseAcceptQvalue), dict, addDefaultEncoding),
  1485     'Accept-Language': (tokenize, listParser(parseAcceptQvalue), dict),
  1500     'Accept-Language': (tokenize, listParser(parseAcceptQvalue), dict),
  1486     'Access-Control-Allow-Origin': (last, parseAllowOrigin,),
       
  1487     'Access-Control-Allow-Credentials': (last, parseAllowCreds,),
       
  1488     'Access-Control-Allow-Methods': (tokenize, listParser(parseHTTPMethod), list),
       
  1489     'Access-Control-Request-Method': (parseHTTPMethod, ),
  1501     'Access-Control-Request-Method': (parseHTTPMethod, ),
  1490     'Access-Control-Request-Headers': (filterTokens, ),
  1502     'Access-Control-Request-Headers': (filterTokens, ),
  1491     'Access-Control-Expose-Headers': (filterTokens, ),
       
  1492     'Authorization': (last, parseAuthorization),
  1503     'Authorization': (last, parseAuthorization),
  1493     'Cookie': (parseCookie,),
  1504     'Cookie': (parseCookie,),
  1494     'Expect': (tokenize, listParser(parseExpect), dict),
  1505     'Expect': (tokenize, listParser(parseExpect), dict),
  1495     'Origin': (last,),
  1506     'Origin': (last,),
  1496     'From': (last,),
  1507     'From': (last,),
  1513     'Accept-Charset': (iteritems, listGenerator(generateAcceptQvalue), singleHeader),
  1524     'Accept-Charset': (iteritems, listGenerator(generateAcceptQvalue), singleHeader),
  1514     'Accept-Encoding': (iteritems, removeDefaultEncoding,
  1525     'Accept-Encoding': (iteritems, removeDefaultEncoding,
  1515                         listGenerator(generateAcceptQvalue), singleHeader),
  1526                         listGenerator(generateAcceptQvalue), singleHeader),
  1516     'Accept-Language': (iteritems, listGenerator(generateAcceptQvalue), singleHeader),
  1527     'Accept-Language': (iteritems, listGenerator(generateAcceptQvalue), singleHeader),
  1517     'Access-Control-Request-Method': (unique, str, singleHeader, ),
  1528     'Access-Control-Request-Method': (unique, str, singleHeader, ),
  1518     'Access-Control-Expose-Headers': (listGenerator(str), ),
       
  1519     'Access-Control-Allow-Headers': (listGenerator(str), ),
       
  1520     'Authorization': (generateAuthorization,), # what is "credentials"
  1529     'Authorization': (generateAuthorization,), # what is "credentials"
  1521     'Cookie': (generateCookie, singleHeader),
  1530     'Cookie': (generateCookie, singleHeader),
  1522     'Expect': (iteritems, listGenerator(generateExpect), singleHeader),
  1531     'Expect': (iteritems, listGenerator(generateExpect), singleHeader),
  1523     'From': (unique, str, singleHeader),
  1532     'From': (unique, str, singleHeader),
  1524     'Host': (unique, str, singleHeader),
  1533     'Host': (unique, str, singleHeader),
  1536     'User-Agent': (unique, str, singleHeader),
  1545     'User-Agent': (unique, str, singleHeader),
  1537 }
  1546 }
  1538 
  1547 
  1539 parser_response_headers = {
  1548 parser_response_headers = {
  1540     'Accept-Ranges': (tokenize, filterTokens),
  1549     'Accept-Ranges': (tokenize, filterTokens),
       
  1550     'Access-Control-Allow-Origin': (last, parseAllowOrigin,),
       
  1551     'Access-Control-Allow-Credentials': (last, parseAllowCreds,),
       
  1552     'Access-Control-Allow-Methods': (tokenize, listParser(parseHTTPMethod), list),
       
  1553     'Access-Control-Allow-Headers': (listGenerator(str), ),
       
  1554     'Access-Control-Expose-Headers': (filterTokens, ),
  1541     'Age': (last, int),
  1555     'Age': (last, int),
  1542     'ETag': (tokenize, ETag.parse),
  1556     'ETag': (tokenize, ETag.parse),
  1543     'Location': (last,), # TODO: URI object?
  1557     'Location': (last,), # TODO: URI object?
  1544 #    'Proxy-Authenticate'
  1558 #    'Proxy-Authenticate'
  1545     'Retry-After': (last, parseRetryAfter),
  1559     'Retry-After': (last, parseRetryAfter),
  1551                          parseWWWAuthenticate,)
  1565                          parseWWWAuthenticate,)
  1552 }
  1566 }
  1553 
  1567 
  1554 generator_response_headers = {
  1568 generator_response_headers = {
  1555     'Accept-Ranges': (generateList, singleHeader),
  1569     'Accept-Ranges': (generateList, singleHeader),
       
  1570     'Access-Control-Allow-Origin': (unique, str, singleHeader),
       
  1571     'Access-Control-Allow-Credentials': (generateTrueFalse, singleHeader),
       
  1572     'Access-Control-Allow-Headers': (set, generateList, singleHeader),
       
  1573     'Access-Control-Allow-Methods': (set, generateList, singleHeader),
       
  1574     'Access-Control-Expose-Headers': (set, generateList, singleHeader),
  1556     'Age': (unique, str, singleHeader),
  1575     'Age': (unique, str, singleHeader),
  1557     'ETag': (ETag.generate, singleHeader),
  1576     'ETag': (ETag.generate, singleHeader),
  1558     'Location': (unique, str, singleHeader),
  1577     'Location': (unique, str, singleHeader),
  1559 #    'Proxy-Authenticate'
  1578 #    'Proxy-Authenticate'
  1560     'Retry-After': (generateRetryAfter, singleHeader),
  1579     'Retry-After': (generateRetryAfter, singleHeader),