diff options
-rw-r--r-- | CHANGES.rst | 3 | ||||
-rw-r--r-- | cherrypy/lib/httputil.py | 11 |
2 files changed, 9 insertions, 5 deletions
diff --git a/CHANGES.rst b/CHANGES.rst index 57d3fff1..1697a91f 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,6 +1,9 @@ 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. diff --git a/cherrypy/lib/httputil.py b/cherrypy/lib/httputil.py index 06004c9c..eedf8d89 100644 --- a/cherrypy/lib/httputil.py +++ b/cherrypy/lib/httputil.py @@ -391,12 +391,15 @@ class CaseInsensitiveDict(jaraco.collections.KeyTransformingDict): """A case-insensitive dict subclass. - Each key is changed on entry to str(key).title(). + Each key is changed on entry to title case. """ @staticmethod def transform_key(key): - return str(key).title() + if key is None: + # TODO(#1830): why? + return 'None' + return key.title() # TEXT = <any OCTET except CTLs, but including LWS> @@ -435,9 +438,7 @@ class HeaderMap(CaseInsensitiveDict): def elements(self, key): """Return a sorted list of HeaderElements for the given header.""" - key = str(key).title() - value = self.get(key) - return header_elements(key, value) + return header_elements(self.transform_key(key), self.get(key)) def values(self, key): """Return a sorted list of HeaderElement.value for the given header.""" |