]> git.ipfire.org Git - thirdparty/tornado.git/commitdiff
Memoize HTTPHeaders._normalize_name
authorBen Darnell <ben@bendarnell.com>
Mon, 2 May 2011 03:48:55 +0000 (20:48 -0700)
committerBen Darnell <ben@bendarnell.com>
Mon, 2 May 2011 03:48:55 +0000 (20:48 -0700)
tornado/httputil.py

index 95611d2fadb5cbf365c0f09ae3a34c484803552c..d40ebc6a34a47ad535d87dbecabd0ae36ee1de6d 100755 (executable)
@@ -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():