Index: headers.py =================================================================== --- headers.py (revision 73468) +++ headers.py (working copy) @@ -25,23 +25,11 @@ return param - - - - - - - - - - - - class Headers: + """Manage a collection of HTTP response headers.""" - """Manage a collection of HTTP response headers""" - - def __init__(self,headers): + def __init__(self, headers=None): + headers = headers or [] if not isinstance(headers, list): raise TypeError("Headers must be a list of name/value tuples") self._headers = [] @@ -68,7 +56,7 @@ self._headers.append( (self._convert_string_type(name), self._convert_string_type(val))) - def __delitem__(self,name): + def __delitem__(self, name): """Delete all occurrences of a header, if present. Does *not* raise an exception if the header is missing. @@ -76,8 +64,8 @@ name = self._convert_string_type(name.lower()) self._headers[:] = [kv for kv in self._headers if kv[0].lower() != name] - def __getitem__(self,name): - """Get the first header value for 'name' + def __getitem__(self, name): + """Get the first header value for 'name'. Return None if the header is missing instead of raising an exception. @@ -87,15 +75,10 @@ """ return self.get(name) - - - - def __contains__(self, name): """Return true if the message contains the header.""" return self.get(name) is not None - def get_all(self, name): """Return a list of all the values for the named field. @@ -107,16 +90,14 @@ name = self._convert_string_type(name.lower()) return [kv[1] for kv in self._headers if kv[0].lower()==name] - - def get(self,name,default=None): - """Get the first header value for 'name', or return 'default'""" + def get(self, name, default=None): + """Get the first header value for 'name', or return 'default'.""" name = self._convert_string_type(name.lower()) - for k,v in self._headers: + for k, v in self._headers: if k.lower()==name: return v return default - def keys(self): """Return a list of all the header field names. @@ -125,11 +106,8 @@ Any fields deleted and re-inserted are always appended to the header list. """ - return [k for k, v in self._headers] + return [h[0] for h in self._headers] - - - def values(self): """Return a list of all header values. @@ -138,7 +116,7 @@ Any fields deleted and re-inserted are always appended to the header list. """ - return [v for k, v in self._headers] + return [h[1] for h in self._headers] def items(self): """Get all the header fields and values. @@ -156,9 +134,9 @@ def __str__(self): """str() returns the formatted headers, complete with end line, suitable for direct HTTP transmission.""" - return '\r\n'.join(["%s: %s" % kv for kv in self._headers]+['','']) + return '\r\n'.join(["%s: %s" % kv for kv in self._headers]+['', '']) - def setdefault(self,name,value): + def setdefault(self, name, value): """Return first matching header value for 'name', or 'value' If there is no header named 'name', add a new header with name 'name' @@ -171,11 +149,10 @@ else: return result - def add_header(self, _name, _value, **_params): """Extended header setting. - _name is the header field to add. keyword arguments can be used to set + _name is the header field to add. Keyword arguments can be used to set additional parameters for the header field, with underscores converted to dashes. Normally the parameter will be added as key="value" unless value is None, in which case only the key will be added. @@ -200,19 +177,3 @@ v = self._convert_string_type(v) parts.append(_formatparam(k.replace('_', '-'), v)) self._headers.append((self._convert_string_type(_name), "; ".join(parts))) - - - - - - - - - - - - - - - -#