diff --git a/src/poetry/repositories/link_sources/base.py b/src/poetry/repositories/link_sources/base.py index 650e09dcda3..30e1e5a751c 100644 --- a/src/poetry/repositories/link_sources/base.py +++ b/src/poetry/repositories/link_sources/base.py @@ -145,14 +145,15 @@ class SimpleRepositoryRootPage: """ def search(self, query: str | list[str]) -> list[str]: - results: list[str] = [] - tokens = query if isinstance(query, list) else [query] - - for name in self.package_names: - if any(token in name for token in tokens): - results.append(name) - - return results + if isinstance(query, str): + # performance shortcut + # We could also create a list from query and use the more general code below, + # but this is a common case that we can optimize for. + return [name for name in self.package_names if query in name] + + return [ + name for name in self.package_names if any(token in name for token in query) + ] @cached_property def package_names(self) -> list[str]: diff --git a/src/poetry/repositories/repository.py b/src/poetry/repositories/repository.py index 8ae12bf6afa..c64349a5f6c 100644 --- a/src/poetry/repositories/repository.py +++ b/src/poetry/repositories/repository.py @@ -74,14 +74,17 @@ def add_package(self, package: Package) -> None: self._packages.append(package) def search(self, query: str | list[str]) -> list[Package]: - results: list[Package] = [] - tokens = query if isinstance(query, list) else [query] + if isinstance(query, str): + # performance shortcut + # We could also create a list from query and use the more general code below, + # but this is a common case that we can optimize for. + return [package for package in self.packages if query in package.name] - for package in self.packages: - if any(token in package.name for token in tokens): - results.append(package) - - return results + return [ + package + for package in self.packages + if any(token in package.name for token in query) + ] def _find_packages( self, name: NormalizedName, constraint: VersionConstraint diff --git a/tests/repositories/test_repository.py b/tests/repositories/test_repository.py index 54628c49fe6..8e9f14837e5 100644 --- a/tests/repositories/test_repository.py +++ b/tests/repositories/test_repository.py @@ -108,4 +108,5 @@ def test_search() -> None: assert repo.search("foo") == [package_foo1, package_foo2, package_foobar] assert repo.search("bar") == [package_foobar] + assert repo.search(["foo", "bar"]) == [package_foo1, package_foo2, package_foobar] assert repo.search("nothing") == []