From 3cc7f2c54c25aa672f34185f2b94c8be31524469 Mon Sep 17 00:00:00 2001 From: Ben Darnell Date: Sun, 1 May 2011 20:48:55 -0700 Subject: [PATCH] Memoize HTTPHeaders._normalize_name --- tornado/httputil.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/tornado/httputil.py b/tornado/httputil.py index 95611d2fa..d40ebc6a3 100755 --- a/tornado/httputil.py +++ b/tornado/httputil.py @@ -128,6 +128,8 @@ class HTTPHeaders(dict): self[k] = v _NORMALIZED_HEADER_RE = re.compile(r'^[A-Z0-9][a-z0-9]*(-[A-Z0-9][a-z0-9]*)*$') + _normalized_headers = {} + @staticmethod def _normalize_name(name): """Converts a name to Http-Header-Case. @@ -135,9 +137,15 @@ class HTTPHeaders(dict): >>> HTTPHeaders._normalize_name("coNtent-TYPE") 'Content-Type' """ - if HTTPHeaders._NORMALIZED_HEADER_RE.match(name): - return name - return "-".join([w.capitalize() for w in name.split("-")]) + try: + return HTTPHeaders._normalized_headers[name] + except KeyError: + if HTTPHeaders._NORMALIZED_HEADER_RE.match(name): + normalized = name + else: + normalized = "-".join([w.capitalize() for w in name.split("-")]) + HTTPHeaders._normalized_headers[name] = normalized + return normalized def doctests(): -- 2.47.3