mirror of https://github.com/encode/starlette.git
perf: stop use `re` on `get_route_path` (#2701)
* perf: stop use re on get_route_path * add test
This commit is contained in:
parent
9d4d5a5f3b
commit
d289ac7e8d
|
@ -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
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Reference in New Issue