|
39 | 39 | from .caching import Cache, Local
|
40 | 40 | from .loaders import load_builtins, load_yaml
|
41 | 41 | from .re2 import Resolver as Re2Resolver
|
| 42 | +from .regex import Resolver as RegexResolver |
42 | 43 | from .user_agent_parser import Parse
|
43 | 44 |
|
44 | 45 | CACHEABLE = {
|
45 | 46 | "basic": True,
|
46 | 47 | "re2": True,
|
| 48 | + "regex": True, |
47 | 49 | "legacy": False,
|
48 | 50 | }
|
49 | 51 |
|
@@ -178,6 +180,8 @@ def get_parser(
|
178 | 180 | r = BasicResolver(rules)
|
179 | 181 | elif parser == "re2":
|
180 | 182 | r = Re2Resolver(rules)
|
| 183 | + elif parser == "regex": |
| 184 | + r = RegexResolver(rules) |
181 | 185 | else:
|
182 | 186 | sys.exit(f"unknown parser {parser!r}")
|
183 | 187 |
|
@@ -327,6 +331,7 @@ def run_threaded(args: argparse.Namespace) -> None:
|
327 | 331 | ("locking-lru", CachingResolver(basic, caching.Lru(CACHESIZE))),
|
328 | 332 | ("local-lru", CachingResolver(basic, Local(lambda: caching.Lru(CACHESIZE)))),
|
329 | 333 | ("re2", Re2Resolver(load_builtins())),
|
| 334 | + ("regex", RegexResolver(load_builtins())), |
330 | 335 | ]
|
331 | 336 | for name, resolver in resolvers:
|
332 | 337 | print(f"{name:11}: ", end="", flush=True)
|
@@ -436,14 +441,14 @@ def __call__(
|
436 | 441 | bench.add_argument(
|
437 | 442 | "--bases",
|
438 | 443 | nargs="+",
|
439 |
| - choices=["basic", "re2", "legacy"], |
440 |
| - default=["basic", "re2", "legacy"], |
| 444 | + choices=["basic", "re2", "regex", "legacy"], |
| 445 | + default=["basic", "re2", "regex", "legacy"], |
441 | 446 | help="""Base resolvers to benchmark. `basic` is a linear search
|
442 | 447 | through the regexes file, `re2` is a prefiltered regex set
|
443 |
| - implemented in C++, `legacy` is the legacy API (essentially a |
444 |
| - basic resolver with a clearing cache of fixed 200 entries, but |
445 |
| - less layered so usually slightly faster than an equivalent |
446 |
| - basic-based resolver).""", |
| 448 | + implemented in C++, `regex` is a prefiltered regex set implemented |
| 449 | + in Rust, `legacy` is the legacy API (essentially a basic resolver |
| 450 | + with a clearing cache of fixed 200 entries, but less layered so |
| 451 | + usually slightly faster than an equivalent basic-based resolver).""", |
447 | 452 | )
|
448 | 453 | bench.add_argument(
|
449 | 454 | "--caches",
|
|
0 commit comments