Skip to content

Commit 3a9898f

Browse files
committed
feat: cache regex
1 parent 6aeab69 commit 3a9898f

File tree

2 files changed

+22
-23
lines changed

2 files changed

+22
-23
lines changed

nested_multipart_parser/lazy.py

Lines changed: 0 additions & 12 deletions
This file was deleted.

nested_multipart_parser/options.py

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,15 @@
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

415
class 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

5364
class 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

8192
class 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

110121
class 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

147158
class 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

Comments
 (0)