Download Install Tutorial Docs FAQ Tools WikiLicense Team IRC Planet Involvement Shop Book

Changeset 957

Show
Ignore:
Timestamp:
02/07/06 01:45:39
Author:
fumanchu
Message:

Moved some logic (the transformation of response headers from a dict to a list) out of _cphttptools and into httptools.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/cherrypy/_cphttptools.py

    r942 r957  
    304304        raise cherrypy.NotFound(objectpath) 
    305305 
    306 general_header_fields = ["Cache-Control", "Connection", "Date", "Pragma", 
    307                          "Trailer", "Transfer-Encoding", "Upgrade", "Via", 
    308                          "Warning"] 
    309 response_header_fields = ["Accept-Ranges", "Age", "ETag", "Location", 
    310                           "Proxy-Authenticate", "Retry-After", "Server", 
    311                           "Vary", "WWW-Authenticate"] 
    312 entity_header_fields = ["Allow", "Content-Encoding", "Content-Language", 
    313                         "Content-Length", "Content-Location", "Content-MD5", 
    314                         "Content-Range", "Content-Type", "Expires", 
    315                         "Last-Modified"] 
    316  
    317 _header_order_map = {} 
    318 for _ in general_header_fields: 
    319     _header_order_map[_] = 0 
    320 for _ in response_header_fields: 
    321     _header_order_map[_] = 1 
    322 for _ in entity_header_fields: 
    323     _header_order_map[_] = 2 
    324  
    325306 
    326307class Body(object): 
     
    416397                self.headers['Content-Length'] = len(content) 
    417398         
    418         # Headers 
    419         header_list = [] 
    420         for key, valueList in self.headers.iteritems(): 
    421             order = _header_order_map.get(key, 3) 
    422             if not isinstance(valueList, list): 
    423                 valueList = [valueList] 
    424             for value in valueList: 
    425                 header_list.append((order, (key, str(value)))) 
    426         # RFC 2616: '... it is "good practice" to send general-header 
    427         # fields first, followed by request-header or response-header 
    428         # fields, and ending with the entity-header fields.' 
    429         header_list.sort() 
    430         self.header_list = [item[1] for item in header_list] 
     399        # Transform our header dict into a sorted list of tuples. 
     400        self.header_list = self.headers.sorted_list() 
    431401         
    432402        cookie = self.simple_cookie.output() 
    433403        if cookie: 
    434             lines = cookie.split("\n") 
    435             for line in lines: 
     404            for line in cookie.split("\n"): 
    436405                name, value = line.split(": ", 1) 
    437406                self.header_list.append((name, value)) 
  • trunk/cherrypy/lib/httptools.py

    r945 r957  
    423423            return [] 
    424424        return header_elements(key, h) 
     425     
     426    general_fields = ["Cache-Control", "Connection", "Date", "Pragma", 
     427                      "Trailer", "Transfer-Encoding", "Upgrade", "Via", 
     428                      "Warning"] 
     429    response_fields = ["Accept-Ranges", "Age", "ETag", "Location", 
     430                       "Proxy-Authenticate", "Retry-After", "Server", 
     431                       "Vary", "WWW-Authenticate"] 
     432    entity_fields = ["Allow", "Content-Encoding", "Content-Language", 
     433                     "Content-Length", "Content-Location", "Content-MD5", 
     434                     "Content-Range", "Content-Type", "Expires", 
     435                     "Last-Modified"] 
     436     
     437    order_map = {} 
     438    for _ in general_fields: 
     439        order_map[_] = 0 
     440    for _ in response_fields: 
     441        order_map[_] = 1 
     442    for _ in entity_fields: 
     443        order_map[_] = 2 
     444     
     445    def sorted_list(self): 
     446        """Transform self into a sorted list of (name, value) tuples. 
     447         
     448        From http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2 
     449            '... it is "good practice" to send general-header fields first, 
     450            followed by request-header or response-header fields, and ending 
     451            with the entity-header fields.' 
     452        """ 
     453         
     454        header_list = [] 
     455        for key, valueList in self.iteritems(): 
     456            order = self.order_map.get(key, 3) 
     457            if not isinstance(valueList, list): 
     458                valueList = [valueList] 
     459            for value in valueList: 
     460                header_list.append((order, (key, str(value)))) 
     461        header_list.sort() 
     462        return [item[1] for item in header_list] 
    425463 
    426464 
     
    482520##            raise StopIteration() 
    483521        return data 
     522 

Hosted by WebFaction

Log in as guest/cpguest to create tickets