Skip to content

Commit 4e07493

Browse files
committed
Add the regex resolver at the top of the queue
Not sure why I didn't do that when I merged it, but I think it's the best default, if available, which is unlikely for the reason that it requires a completely bespoke dep.
1 parent de1c9c8 commit 4e07493

File tree

1 file changed

+17
-11
lines changed

1 file changed

+17
-11
lines changed

src/ua_parser/__init__.py

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,23 @@
5959
from .loaders import load_builtins, load_lazy_builtins
6060
from .utils import IS_GRAAL
6161

62-
Re2Resolver: Optional[Callable[[Matchers], Resolver]] = None
62+
_ResolverCtor = Callable[[Matchers], Resolver]
63+
Re2Resolver: Optional[_ResolverCtor] = None
6364
if importlib.util.find_spec("re2"):
6465
from .re2 import Resolver as Re2Resolver
66+
RegexResolver: Optional[_ResolverCtor] = None
67+
if importlib.util.find_spec("ua_parser_rs"):
68+
from .regex import Resolver as RegexResolver
69+
BestAvailableResolver: _ResolverCtor = next(
70+
filter(
71+
None,
72+
(
73+
RegexResolver,
74+
Re2Resolver,
75+
lambda m: CachingResolver(BasicResolver(m), Cache(200)),
76+
),
77+
)
78+
)
6579

6680

6781
VERSION = (1, 0, 0)
@@ -82,15 +96,7 @@ def from_matchers(cls, m: Matchers, /) -> Parser:
8296
stack.
8397
8498
"""
85-
if Re2Resolver is not None:
86-
return cls(Re2Resolver(m))
87-
else:
88-
return cls(
89-
CachingResolver(
90-
BasicResolver(m),
91-
Cache(200),
92-
)
93-
)
99+
return cls(BestAvailableResolver(m))
94100

95101
def __init__(self, resolver: Resolver) -> None:
96102
self.resolver = resolver
@@ -133,7 +139,7 @@ def parse_device(self: Resolver, ua: str) -> Optional[Device]:
133139
def __getattr__(name: str) -> Parser:
134140
global parser
135141
if name == "parser":
136-
if Re2Resolver or IS_GRAAL:
142+
if RegexResolver or Re2Resolver or IS_GRAAL:
137143
matchers = load_lazy_builtins()
138144
else:
139145
matchers = load_builtins()

0 commit comments

Comments
 (0)