mirror of
https://github.com/zulip/zulip.git
synced 2025-11-04 14:03:30 +00:00
We use this single regular expression for processing essentially every request, so it's definitely worth hinting to Python that we're going to do so by compiling it. Saves about 40us per request.
17 lines
482 B
Python
17 lines
482 B
Python
import re
|
|
from typing import Dict
|
|
|
|
# Warning: If you change this parsing, please test using
|
|
# zerver/tests/test_decorators.py
|
|
# And extend zerver/tests/fixtures/user_agents_unique with any new test cases
|
|
pattern = re.compile(
|
|
"""^ (?P<name> [^/ ]* [^0-9/(]* )
|
|
(/ (?P<version> [^/ ]* ))?
|
|
([ /] .*)?
|
|
$""", re.X)
|
|
|
|
def parse_user_agent(user_agent: str) -> Dict[str, str]:
|
|
match = pattern.match(user_agent)
|
|
assert match is not None
|
|
return match.groupdict()
|