diff options
Diffstat (limited to 'google_appengine/lib/webob/webob/datastruct.py')
-rwxr-xr-x | google_appengine/lib/webob/webob/datastruct.py | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/google_appengine/lib/webob/webob/datastruct.py b/google_appengine/lib/webob/webob/datastruct.py new file mode 100755 index 0000000..d59116b --- /dev/null +++ b/google_appengine/lib/webob/webob/datastruct.py @@ -0,0 +1,58 @@ +""" +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 |