web/http_headers.py
changeset 10000 4352b7ccde04
parent 9990 c84ad981fc4a
parent 9989 cfb6e9dab902
child 10001 1245357b3b3e
equal deleted inserted replaced
9990:c84ad981fc4a 10000:4352b7ccde04
   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 
  1487 parser_request_headers = {
  1502 parser_request_headers = {
  1488     'Accept': (tokenize, listParser(parseAccept), dict),
  1503     'Accept': (tokenize, listParser(parseAccept), dict),
  1489     'Accept-Charset': (tokenize, listParser(parseAcceptQvalue), dict, addDefaultCharset),
  1504     'Accept-Charset': (tokenize, listParser(parseAcceptQvalue), dict, addDefaultCharset),
  1490     'Accept-Encoding': (tokenize, listParser(parseAcceptQvalue), dict, addDefaultEncoding),
  1505     'Accept-Encoding': (tokenize, listParser(parseAcceptQvalue), dict, addDefaultEncoding),
  1491     'Accept-Language': (tokenize, listParser(parseAcceptQvalue), dict),
  1506     'Accept-Language': (tokenize, listParser(parseAcceptQvalue), dict),
  1492     'Access-Control-Allow-Origin': (last, parseAllowOrigin,),
       
  1493     'Access-Control-Allow-Credentials': (last, parseAllowCreds,),
       
  1494     'Access-Control-Allow-Methods': (tokenize, listParser(parseHTTPMethod), list),
       
  1495     'Access-Control-Request-Method': (parseHTTPMethod, ),
  1507     'Access-Control-Request-Method': (parseHTTPMethod, ),
  1496     'Access-Control-Request-Headers': (filterTokens, ),
  1508     'Access-Control-Request-Headers': (filterTokens, ),
  1497     'Access-Control-Expose-Headers': (filterTokens, ),
       
  1498     'Authorization': (last, parseAuthorization),
  1509     'Authorization': (last, parseAuthorization),
  1499     'Cookie': (parseCookie,),
  1510     'Cookie': (parseCookie,),
  1500     'Expect': (tokenize, listParser(parseExpect), dict),
  1511     'Expect': (tokenize, listParser(parseExpect), dict),
  1501     'Origin': (last,),
  1512     'Origin': (last,),
  1502     'From': (last,),
  1513     'From': (last,),
  1519     'Accept-Charset': (iteritems, listGenerator(generateAcceptQvalue), singleHeader),
  1530     'Accept-Charset': (iteritems, listGenerator(generateAcceptQvalue), singleHeader),
  1520     'Accept-Encoding': (iteritems, removeDefaultEncoding,
  1531     'Accept-Encoding': (iteritems, removeDefaultEncoding,
  1521                         listGenerator(generateAcceptQvalue), singleHeader),
  1532                         listGenerator(generateAcceptQvalue), singleHeader),
  1522     'Accept-Language': (iteritems, listGenerator(generateAcceptQvalue), singleHeader),
  1533     'Accept-Language': (iteritems, listGenerator(generateAcceptQvalue), singleHeader),
  1523     'Access-Control-Request-Method': (unique, str, singleHeader, ),
  1534     'Access-Control-Request-Method': (unique, str, singleHeader, ),
  1524     'Access-Control-Expose-Headers': (listGenerator(str), ),
       
  1525     'Access-Control-Allow-Headers': (listGenerator(str), ),
       
  1526     'Authorization': (generateAuthorization,), # what is "credentials"
  1535     'Authorization': (generateAuthorization,), # what is "credentials"
  1527     'Cookie': (generateCookie, singleHeader),
  1536     'Cookie': (generateCookie, singleHeader),
  1528     'Expect': (iteritems, listGenerator(generateExpect), singleHeader),
  1537     'Expect': (iteritems, listGenerator(generateExpect), singleHeader),
  1529     'From': (unique, str, singleHeader),
  1538     'From': (unique, str, singleHeader),
  1530     'Host': (unique, str, singleHeader),
  1539     'Host': (unique, str, singleHeader),
  1542     'User-Agent': (unique, str, singleHeader),
  1551     'User-Agent': (unique, str, singleHeader),
  1543 }
  1552 }
  1544 
  1553 
  1545 parser_response_headers = {
  1554 parser_response_headers = {
  1546     'Accept-Ranges': (tokenize, filterTokens),
  1555     'Accept-Ranges': (tokenize, filterTokens),
       
  1556     'Access-Control-Allow-Origin': (last, parseAllowOrigin,),
       
  1557     'Access-Control-Allow-Credentials': (last, parseAllowCreds,),
       
  1558     'Access-Control-Allow-Methods': (tokenize, listParser(parseHTTPMethod), list),
       
  1559     'Access-Control-Allow-Headers': (listGenerator(str), ),
       
  1560     'Access-Control-Expose-Headers': (filterTokens, ),
  1547     'Age': (last, int),
  1561     'Age': (last, int),
  1548     'ETag': (tokenize, ETag.parse),
  1562     'ETag': (tokenize, ETag.parse),
  1549     'Location': (last,), # TODO: URI object?
  1563     'Location': (last,), # TODO: URI object?
  1550 #    'Proxy-Authenticate'
  1564 #    'Proxy-Authenticate'
  1551     'Retry-After': (last, parseRetryAfter),
  1565     'Retry-After': (last, parseRetryAfter),
  1557                          parseWWWAuthenticate,)
  1571                          parseWWWAuthenticate,)
  1558 }
  1572 }
  1559 
  1573 
  1560 generator_response_headers = {
  1574 generator_response_headers = {
  1561     'Accept-Ranges': (generateList, singleHeader),
  1575     'Accept-Ranges': (generateList, singleHeader),
       
  1576     'Access-Control-Allow-Origin': (unique, str, singleHeader),
       
  1577     'Access-Control-Allow-Credentials': (generateTrueFalse, singleHeader),
       
  1578     'Access-Control-Allow-Headers': (set, generateList, singleHeader),
       
  1579     'Access-Control-Allow-Methods': (set, generateList, singleHeader),
       
  1580     'Access-Control-Expose-Headers': (set, generateList, singleHeader),
  1562     'Age': (unique, str, singleHeader),
  1581     'Age': (unique, str, singleHeader),
  1563     'ETag': (ETag.generate, singleHeader),
  1582     'ETag': (ETag.generate, singleHeader),
  1564     'Location': (unique, str, singleHeader),
  1583     'Location': (unique, str, singleHeader),
  1565 #    'Proxy-Authenticate'
  1584 #    'Proxy-Authenticate'
  1566     'Retry-After': (generateRetryAfter, singleHeader),
  1585     'Retry-After': (generateRetryAfter, singleHeader),