Skip to content

Commit

Permalink
perf: stop use re on get_route_path (encode#2701)
Browse files Browse the repository at this point in the history
* perf: stop use re on get_route_path

* add test
  • Loading branch information
trim21 authored and Rocky Allen committed Sep 30, 2024
1 parent f5155bb commit 196bbe9
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 3 deletions.
17 changes: 14 additions & 3 deletions starlette/_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import asyncio
import functools
import re
import sys
import typing
from contextlib import contextmanager
Expand Down Expand Up @@ -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
1 change: 1 addition & 0 deletions tests/test__utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ async def async_func(
({"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:
Expand Down

0 comments on commit 196bbe9

Please sign in to comment.