diff options
author | Jason R. Coombs <jaraco@jaraco.com> | 2019-11-27 10:30:53 -0500 |
---|---|---|
committer | Jason R. Coombs <jaraco@jaraco.com> | 2019-11-27 10:31:32 -0500 |
commit | 117c927ddce4d753d69f301eac5bb55a9607ff05 (patch) | |
tree | 5c78b308651affd7f341ccc4c5d4120f2efd8da0 | |
parent | b07830a19b242b2f78243550644e591e673019c4 (diff) | |
parent | 1e96c10cb7ae11ccd1d0e1b7647e1c336f44ca66 (diff) | |
download | cherrypy-git-117c927ddce4d753d69f301eac5bb55a9607ff05.tar.gz |
Merge branch 'master' into bugfix/1827-headermap-keytype
-rw-r--r-- | CHANGES.rst | 6 | ||||
-rw-r--r-- | cherrypy/lib/httputil.py | 65 | ||||
-rwxr-xr-x | setup.py | 1 |
3 files changed, 9 insertions, 63 deletions
diff --git a/CHANGES.rst b/CHANGES.rst index 23901476..1697a91f 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,9 +1,13 @@ -v18.4.1 +v18.5.0 ------- * :issue:`1827`: Fixed issue where bytes values in a ``HeaderMap`` would be converted to strings. +* :pr:`1826`: Rely on + `jaraco.collections <https://pypi.org/project/jaraco.collections>`_ + for its case-insensitive dictionary support. + v18.4.0 ------- diff --git a/cherrypy/lib/httputil.py b/cherrypy/lib/httputil.py index 662191c8..eedf8d89 100644 --- a/cherrypy/lib/httputil.py +++ b/cherrypy/lib/httputil.py @@ -17,6 +17,8 @@ from email.header import decode_header from http.server import BaseHTTPRequestHandler from urllib.parse import unquote_plus +import jaraco.collections + import cherrypy from cherrypy._cpcompat import ntob, ntou @@ -385,68 +387,7 @@ def parse_query_string(query_string, keep_blank_values=True, encoding='utf-8'): return pm -#### -# Inlined from jaraco.collections 1.5.2 -# Ref #1673 -class KeyTransformingDict(dict): - """ - A dict subclass that transforms the keys before they're used. - Subclasses may override the default transform_key to customize behavior. - """ - @staticmethod - def transform_key(key): - return key - - def __init__(self, *args, **kargs): - super(KeyTransformingDict, self).__init__() - # build a dictionary using the default constructs - d = dict(*args, **kargs) - # build this dictionary using transformed keys. - for item in d.items(): - self.__setitem__(*item) - - def __setitem__(self, key, val): - key = self.transform_key(key) - super(KeyTransformingDict, self).__setitem__(key, val) - - def __getitem__(self, key): - key = self.transform_key(key) - return super(KeyTransformingDict, self).__getitem__(key) - - def __contains__(self, key): - key = self.transform_key(key) - return super(KeyTransformingDict, self).__contains__(key) - - def __delitem__(self, key): - key = self.transform_key(key) - return super(KeyTransformingDict, self).__delitem__(key) - - def get(self, key, *args, **kwargs): - key = self.transform_key(key) - return super(KeyTransformingDict, self).get(key, *args, **kwargs) - - def setdefault(self, key, *args, **kwargs): - key = self.transform_key(key) - return super(KeyTransformingDict, self).setdefault( - key, *args, **kwargs) - - def pop(self, key, *args, **kwargs): - key = self.transform_key(key) - return super(KeyTransformingDict, self).pop(key, *args, **kwargs) - - def matching_key_for(self, key): - """ - Given a key, return the actual key stored in self that matches. - Raise KeyError if the key isn't found. - """ - try: - return next(e_key for e_key in self.keys() if e_key == key) - except StopIteration: - raise KeyError(key) -#### - - -class CaseInsensitiveDict(KeyTransformingDict): +class CaseInsensitiveDict(jaraco.collections.KeyTransformingDict): """A case-insensitive dict subclass. @@ -63,6 +63,7 @@ params = dict( 'portend>=2.1.1', 'more_itertools', 'zc.lockfile', + 'jaraco.collections', ], extras_require={ 'docs': [ |