diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 9b62eb62..bcbe79cb 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -10,6 +10,11 @@ Features: ``__version_info__`` constants from ``__init__.py`` file. Users should use ``importlib.metadata`` instead (:pr:`1024`). +Bug fixes: + +* Multi-value headers in ``TornadoParser`` are now retrieved using ``get_list()`` + rather than ``get()`` (:issue:`1109`). + Other changes: diff --git a/src/webargs/tornadoparser.py b/src/webargs/tornadoparser.py index 1b0c73d8..2bd6d959 100644 --- a/src/webargs/tornadoparser.py +++ b/src/webargs/tornadoparser.py @@ -55,6 +55,8 @@ def __getitem__(self, key: str) -> typing.Any: if value is core.missing: return core.missing if key in self.multiple_keys: + if hasattr(self.data, "get_list"): + value = self.data.get_list(key) return [ _unicode(v) if isinstance(v, (str, bytes)) else v for v in value ] diff --git a/tests/test_tornadoparser.py b/tests/test_tornadoparser.py index ee92eadd..df061a76 100644 --- a/tests/test_tornadoparser.py +++ b/tests/test_tornadoparser.py @@ -171,6 +171,14 @@ def test_it_should_get_multiple_values(self): result = parser.load_headers(request, author_schema) assert result["works"] == ["Prometheus Bound", "Prometheus Unbound"] + def test_it_should_get_multiple_values_from_httpheaders(self): + headers = tornado.httputil.HTTPHeaders() + headers.add("works", "Prometheus Bound") + headers.add("works", "Prometheus Unbound") + request = make_request(headers=headers) + result = parser.load_headers(request, author_schema) + assert result["works"] == ["Prometheus Bound", "Prometheus Unbound"] + def test_it_should_return_missing_if_not_present(self): request = make_request() result = parser.load_headers(request, author_schema)