def get_headers(headers: HTTPHeaders) -> Mapping[str, List[str]]: """ Tornado's HTTPHeaders contains multiple entries of the same header name if multiple values were used, this function groups headers by header name. See documentation of `tornado.httputil.HTTPHeaders` """ return { header.lower(): headers.get_list(header) for header in headers.keys() }
def test_copy(self): all_pairs = [('A', '1'), ('A', '2'), ('B', 'c')] h1 = HTTPHeaders() for k, v in all_pairs: h1.add(k, v) h2 = h1.copy() h3 = copy.copy(h1) h4 = copy.deepcopy(h1) for headers in [h1, h2, h3, h4]: # All the copies are identical, no matter how they were # constructed. self.assertEqual(list(sorted(headers.get_all())), all_pairs) for headers in [h2, h3, h4]: # Neither the dict or its member lists are reused. self.assertIsNot(headers, h1) self.assertIsNot(headers.get_list('A'), h1.get_list('A'))