diff options
author | Robert Brewer <fumanchu@aminus.org> | 2005-11-01 21:04:36 +0000 |
---|---|---|
committer | Robert Brewer <fumanchu@aminus.org> | 2005-11-01 21:04:36 +0000 |
commit | 82f15e68964514fc32481f7be90fdd91f41c96e7 (patch) | |
tree | ac7a68f2b459aee9803802be8637d94741a9eed5 /cherrypy/lib/cptools.py | |
parent | c1311c2ea596210529e43148177beea1463809a9 (diff) | |
download | cherrypy-git-82f15e68964514fc32481f7be90fdd91f41c96e7.tar.gz |
Moved _cphttptools.KeyTitlingDict to lib.cptools.HeaderMap.
Diffstat (limited to 'cherrypy/lib/cptools.py')
-rw-r--r-- | cherrypy/lib/cptools.py | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/cherrypy/lib/cptools.py b/cherrypy/lib/cptools.py index f437f3ba..fa3f219b 100644 --- a/cherrypy/lib/cptools.py +++ b/cherrypy/lib/cptools.py @@ -486,3 +486,49 @@ def paramsFromCGIForm(form): return paramMap +class HeaderMap(dict): + """A dict subclass for HTTP request and response headers. + + Each key is changed on entry to str(key).title(). This allows headers + to be case-insensitive and avoid duplicates. + """ + + def __getitem__(self, key): + return dict.__getitem__(self, str(key).title()) + + def __setitem__(self, key, value): + dict.__setitem__(self, str(key).title(), value) + + def __delitem__(self, key): + dict.__delitem__(self, str(key).title()) + + def __contains__(self, item): + return dict.__contains__(self, str(item).title()) + + def get(self, key, default=None): + return dict.get(self, str(key).title(), default) + + def has_key(self, key): + return dict.has_key(self, str(key).title()) + + def update(self, E): + for k in E.keys(): + self[str(k).title()] = E[k] + + def fromkeys(cls, seq, value=None): + newdict = cls() + for k in seq: + newdict[str(k).title()] = value + return newdict + fromkeys = classmethod(fromkeys) + + def setdefault(self, key, x=None): + key = str(key).title() + try: + return self[key] + except KeyError: + self[key] = x + return x + + def pop(self, key, default): + return dict.pop(self, str(key).title(), default) |