diff --git a/src/globus_sdk/scopes/_graph_parser.py b/src/globus_sdk/scopes/_graph_parser.py index 1718e0b73..0b7cf032e 100644 --- a/src/globus_sdk/scopes/_graph_parser.py +++ b/src/globus_sdk/scopes/_graph_parser.py @@ -237,8 +237,10 @@ def _peek_enumerate(data: str | list[str]) -> t.Iterator[tuple[int, str, str | N if not data: return - prev: str = data[0] - for idx, c in enumerate(data[1:]): + iterator = enumerate(data, start=-1) + prev: str + _, prev = next(iterator) + for idx, c in iterator: yield (idx, prev, c) prev = c diff --git a/tests/benchmark/test_scope_parser.py b/tests/benchmark/test_scope_parser.py index fdcc18f63..c3cd62053 100644 --- a/tests/benchmark/test_scope_parser.py +++ b/tests/benchmark/test_scope_parser.py @@ -1,6 +1,6 @@ import pytest -from globus_sdk.scopes import ScopeParser +from globus_sdk.scopes import ScopeParser, TransferScopes def _make_deep_scope(depth): @@ -20,6 +20,11 @@ def _make_wide_scope(width): return big_scope +def test_ordinary_scope_parsing(benchmark): + scope_string = f"openid profile {TransferScopes.all}" + benchmark(ScopeParser.parse, scope_string) + + @pytest.mark.parametrize("depth", (10, 100, 1000, 2000, 3000, 4000, 5000)) def test_deep_scope_parsing(benchmark, depth): scope_string = _make_deep_scope(depth)