1.1 --- a/WebStack/Helpers/Request.py Sat Oct 27 22:38:58 2007 +0000
1.2 +++ b/WebStack/Helpers/Request.py Sat Oct 27 22:39:22 2007 +0000
1.3 @@ -87,6 +87,52 @@
1.4
1.5 self.stream.close()
1.6
1.7 +class HeaderDict:
1.8 +
1.9 + "A dictionary for headers."
1.10 +
1.11 + def __init__(self, headers=None):
1.12 + self.headers = {}
1.13 + if headers is not None:
1.14 + self.update(headers)
1.15 +
1.16 + # Lower-case-string-coercing methods.
1.17 +
1.18 + def __getitem__(self, key):
1.19 + return self.headers[str(key).lower()]
1.20 +
1.21 + def __setitem__(self, key, value):
1.22 + self.headers[str(key).lower()] = value
1.23 +
1.24 + def get(self, key, default=None):
1.25 + return self.headers.get(str(key).lower(), default)
1.26 +
1.27 + def has_key(self, key):
1.28 + return self.headers.has_key(str(key).lower())
1.29 +
1.30 + # Forwarding methods.
1.31 +
1.32 + def keys(self):
1.33 + return self.headers.keys()
1.34 +
1.35 + def values(self):
1.36 + return self.headers.values()
1.37 +
1.38 + def items(self):
1.39 + return self.headers.items()
1.40 +
1.41 + # Derived from the above.
1.42 +
1.43 + def __contains__(self, key):
1.44 + return self.has_key(key)
1.45 +
1.46 + def update(self, other):
1.47 + for k, v in other.items():
1.48 + self[k] = v
1.49 +
1.50 + def __repr__(self):
1.51 + return "HeaderDict(%r)" % self.headers
1.52 +
1.53 class HeaderValue:
1.54
1.55 "A container for header information."
1.56 @@ -108,6 +154,9 @@
1.57 else:
1.58 raise AttributeError, name
1.59
1.60 + def __repr__(self):
1.61 + return "HeaderValue(%r)" % str(self)
1.62 +
1.63 def __str__(self):
1.64
1.65 """
1.66 @@ -191,7 +240,7 @@
1.67 """
1.68
1.69 self.stream = stream
1.70 - self.headers = headers or {}
1.71 + self.headers = headers or HeaderDict()
1.72 self.cache = None
1.73
1.74 def __getattr__(self, name):
1.75 @@ -269,7 +318,7 @@
1.76 returing a dictionary mapping names to HeaderValue objects.
1.77 """
1.78
1.79 - new_headers = {}
1.80 + new_headers = HeaderDict()
1.81 for name, value in headers.items():
1.82 new_headers[name] = parse_header_value(HeaderValue, value)
1.83 return new_headers