""" Contains some data structures. """ from webob.util.dictmixin import DictMixin class EnvironHeaders(DictMixin): """An object that represents the headers as present in a WSGI environment. This object is a wrapper (with no internal state) for a WSGI request object, representing the CGI-style HTTP_* keys as a dictionary. Because a CGI environment can only hold one value for each key, this dictionary is single-valued (unlike outgoing headers). """ def __init__(self, environ): self.environ = environ def _trans_name(self, name): key = 'HTTP_'+name.replace('-', '_').upper() if key == 'HTTP_CONTENT_LENGTH': key = 'CONTENT_LENGTH' elif key == 'HTTP_CONTENT_TYPE': key = 'CONTENT_TYPE' return key def _trans_key(self, key): if key == 'CONTENT_TYPE': return 'Content-Type' elif key == 'CONTENT_LENGTH': return 'Content-Length' elif key.startswith('HTTP_'): return key[5:].replace('_', '-').title() else: return None def __getitem__(self, item): return self.environ[self._trans_name(item)] def __setitem__(self, item, value): self.environ[self._trans_name(item)] = value def __delitem__(self, item): del self.environ[self._trans_name(item)] def __iter__(self): for key in self.environ: name = self._trans_key(key) if name is not None: yield name def keys(self): return list(iter(self)) def __contains__(self, item): return self._trans_name(item) in self.environ