From 4457f0b8fb44c4e04ee6223769d1aa9e744fc96e Mon Sep 17 00:00:00 2001 From: Abhinav Maurya Date: Sat, 7 Nov 2026 06:27:59 +0530 Subject: [PATCH] use get_list for multi-value tornado headers In WebArgsTornadoMultiDictProxy, fetch multi-value headers with get_list when available so values are not combined. --- src/webargs/tornadoparser.py | 2 ++ tests/test_tornadoparser.py | 8 ++++++++ 2 files changed, 10 insertions(+) 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..762d4928 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_http_headers(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)