]> git.ipfire.org Git - thirdparty/babel.git/commitdiff
dates: Memoize parsed DateTimePatterns
authorAarni Koskela <akx@iki.fi>
Mon, 4 Jan 2016 18:52:36 +0000 (20:52 +0200)
committerAarni Koskela <akx@iki.fi>
Sat, 23 Jan 2016 19:07:01 +0000 (21:07 +0200)
babel/dates.py

index b5c670b417fcb8a27a68bbf59a08ea2767c185ea..20d1ab814365d1ec46719847d93bf9279dc4663e 100644 (file)
@@ -1189,6 +1189,7 @@ PATTERN_CHARS = {
     'z': [1, 2, 3, 4], 'Z': [1, 2, 3, 4], 'v': [1, 4], 'V': [1, 4]  # zone
 }
 
+_pattern_cache = {}
 
 def parse_pattern(pattern):
     """Parse date, time, and datetime format patterns.
@@ -1214,6 +1215,9 @@ def parse_pattern(pattern):
     if type(pattern) is DateTimePattern:
         return pattern
 
+    if pattern in _pattern_cache:
+        return _pattern_cache[pattern]
+
     result = []
 
     for tok_type, tok_value in tokenize_pattern(pattern):
@@ -1229,7 +1233,8 @@ def parse_pattern(pattern):
         else:
             raise NotImplementedError("Unknown token type: %s" % tok_type)
 
-    return DateTimePattern(pattern, u''.join(result))
+    _pattern_cache[pattern] = pat = DateTimePattern(pattern, u''.join(result))
+    return pat
 
 
 def tokenize_pattern(pattern):