1- from nested_multipart_parser .lazy import lazy_regex_compile
1+ import re
2+
3+ # compatibilty python < 3.9
4+ try :
5+ from functools import cache
6+ except ImportError :
7+ from functools import lru_cache as cache
8+
9+
10+ @cache
11+ def cache_regex_compile (* ar , ** kw ):
12+ return re .compile (* ar , ** kw )
213
314
415class InvalidFormat (Exception ):
@@ -37,7 +48,7 @@ def check(self, key, keys):
3748 raise InvalidFormat (key )
3849
3950 def split (self , key ):
40- contents = list ( filter ( None , self ._reg_spliter .split (key )))
51+ contents = [ v for v in self ._reg_spliter .split (key ) if v ]
4152 if not contents :
4253 raise ValueError (f"invalid form key: { key } " )
4354
@@ -47,13 +58,13 @@ def split(self, key):
4758 if len (contents ) == 3 :
4859 lst .append (contents [2 ])
4960
50- return list ( filter ( None , lst ))
61+ return [ v for v in lst if v ]
5162
5263
5364class NestedParserOptionsDot (NestedParserOptionsAbstract ):
5465 def __init__ (self ):
55- self ._reg_spliter = lazy_regex_compile (r"^([^\.]+)(.*?)(\.)?$" )
56- self ._reg_options = lazy_regex_compile (r"(\.[^\.]+)" )
66+ self ._reg_spliter = cache_regex_compile (r"^([^\.]+)(.*?)(\.)?$" )
67+ self ._reg_options = cache_regex_compile (r"(\.[^\.]+)" )
5768
5869 def sanitize (self , key , value ):
5970 contents = self .split (key )
@@ -80,8 +91,8 @@ def sanitize(self, key, value):
8091
8192class NestedParserOptionsBracket (NestedParserOptionsAbstract ):
8293 def __init__ (self ):
83- self ._reg_spliter = lazy_regex_compile (r"^([^\[\]]+)(.*?)(\[\])?$" )
84- self ._reg_options = lazy_regex_compile (r"(\[[^\[\]]+\])" )
94+ self ._reg_spliter = cache_regex_compile (r"^([^\[\]]+)(.*?)(\[\])?$" )
95+ self ._reg_options = cache_regex_compile (r"(\[[^\[\]]+\])" )
8596
8697 def sanitize (self , key , value ):
8798 first , * lst = self .split (key )
@@ -109,10 +120,10 @@ def sanitize(self, key, value):
109120
110121class NestedParserOptionsMixedDot (NestedParserOptionsAbstract ):
111122 def __init__ (self ):
112- self ._reg_spliter = lazy_regex_compile (
123+ self ._reg_spliter = cache_regex_compile (
113124 r"^([^\[\]\.]+)(.*?)((?:\.)|(?:\[\]))?$"
114125 )
115- self ._reg_options = lazy_regex_compile (r"(\[\d+\])|(\.[^\[\]\.]+)" )
126+ self ._reg_options = cache_regex_compile (r"(\[\d+\])|(\.[^\[\]\.]+)" )
116127
117128 def sanitize (self , key , value ):
118129 first , * lst = self .split (key )
@@ -146,10 +157,10 @@ def sanitize(self, key, value):
146157
147158class NestedParserOptionsMixed (NestedParserOptionsMixedDot ):
148159 def __init__ (self ):
149- self ._reg_spliter = lazy_regex_compile (
160+ self ._reg_spliter = cache_regex_compile (
150161 r"^([^\[\]\.]+)(.*?)((?:\.)|(?:\[\]))?$"
151162 )
152- self ._reg_options = lazy_regex_compile (r"(\[\d+\])|(\.?[^\[\]\.]+)" )
163+ self ._reg_options = cache_regex_compile (r"(\[\d+\])|(\.?[^\[\]\.]+)" )
153164
154165 def sanitize (self , key , value ):
155166 first , * lst = self .split (key )
0 commit comments