perf: stop use `re` on `get_route_path` (#2701)

* perf: stop use re on get_route_path

* add test
This commit is contained in:
Trim21 2024-09-24 02:23:34 +08:00 committed by GitHub
parent 9d4d5a5f3b
commit d289ac7e8d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 15 additions and 3 deletions

View File

@ -2,7 +2,6 @@ from __future__ import annotations
import asyncio
import functools
import re
import sys
import typing
from contextlib import contextmanager
@ -84,6 +83,18 @@ def collapse_excgroups() -> typing.Generator[None, None, None]:
def get_route_path(scope: Scope) -> str:
path: str = scope["path"]
root_path = scope.get("root_path", "")
route_path = re.sub(r"^" + root_path + r"(?=/|$)", "", scope["path"])
return route_path
if not root_path:
return path
if not path.startswith(root_path):
return path
if path == root_path:
return ""
if path[len(root_path)] == "/":
return path[len(root_path) :]
return path

View File

@ -89,6 +89,7 @@ def test_async_nested_partial() -> None:
({"path": "/foo-123/bar", "root_path": "/foo"}, "/foo-123/bar"),
({"path": "/foo/bar", "root_path": "/foo"}, "/bar"),
({"path": "/foo", "root_path": "/foo"}, ""),
({"path": "/foo/bar", "root_path": "/bar"}, "/foo/bar"),
],
)
def test_get_route_path(scope: Scope, expected_result: str) -> None: