From ac8ea7a5b83a38215826be08f56df066f2532ec1 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Tue, 12 Mar 2024 21:50:21 -0400 Subject: [PATCH 1/2] Bypass ZipFile.namelist in glob. Closes #106. --- tests/test_complexity.py | 2 +- zipp/__init__.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/test_complexity.py b/tests/test_complexity.py index d2adcf1..e2445e1 100644 --- a/tests/test_complexity.py +++ b/tests/test_complexity.py @@ -85,7 +85,7 @@ def test_glob_depth(self): max_n=100, min_n=1, ) - assert best <= big_o.complexities.Quadratic + assert best <= big_o.complexities.Linear @pytest.mark.flaky def test_glob_width(self): diff --git a/zipp/__init__.py b/zipp/__init__.py index 093b1e0..6d05d9a 100644 --- a/zipp/__init__.py +++ b/zipp/__init__.py @@ -402,7 +402,8 @@ def glob(self, pattern): prefix = re.escape(self.at) tr = Translator(seps='/') matches = re.compile(prefix + tr.translate(pattern)).fullmatch - return map(self._next, filter(matches, self.root.namelist())) + names = (data.filename for data in self.root.filelist) + return map(self._next, filter(matches, names)) def rglob(self, pattern): return self.glob(f'**/{pattern}') From 171fa98236a1adfc316c3bc5cdc5eaa4b9548424 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Tue, 12 Mar 2024 21:51:27 -0400 Subject: [PATCH 2/2] Add news fragment. --- newsfragments/106.feature.rst | 1 + 1 file changed, 1 insertion(+) create mode 100644 newsfragments/106.feature.rst diff --git a/newsfragments/106.feature.rst b/newsfragments/106.feature.rst new file mode 100644 index 0000000..5eff578 --- /dev/null +++ b/newsfragments/106.feature.rst @@ -0,0 +1 @@ +Bypass ZipFile.namelist in glob for better performance. \ No newline at end of file