From 8478531b8f91e71e6e4ea24ea0a8a1d5077c5721 Mon Sep 17 00:00:00 2001 From: shamilbi Date: Wed, 21 Jan 2026 21:42:22 +0200 Subject: [PATCH 1/5] fix: Skipping --- morgan/__init__.py | 44 +++++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/morgan/__init__.py b/morgan/__init__.py index 8e46e6a..e967e4c 100644 --- a/morgan/__init__.py +++ b/morgan/__init__.py @@ -142,17 +142,20 @@ def _mirror( if self._processed_pkgs.check(requirement): return None - # Check if requirement is relevant for any environment - if not is_requirement_relevant(requirement, self.envs.values()): - print(f"\tSkipping {requirement}, not relevant for any environment") - self._processed_pkgs.add(requirement) # Mark as processed - return None - + # Display the cause of 'Skipping...' + extras = None if required_by: + extras = required_by.extras print(f"[{required_by}]: {requirement}") else: print(f"{requirement}") + # Check if requirement is relevant for any environment + if not is_requirement_relevant(requirement, self.envs.values(), extras=extras): + print("\tSkipping, not relevant for any environment") + self._processed_pkgs.add(requirement) # Mark as processed + return None + data: dict = None # get information about this package from the Simple API in JSON @@ -278,7 +281,7 @@ def _filter_files( # Now we only have files that satisfy the requirement, and we need to # filter out files that do not match our environments. - files = list(filter(lambda file: self._matches_environments(file), files)) + files = list(filter(self._matches_environments, files)) # fix: unnecessary-lambda if len(files) == 0: print(f"Skipping {requirement}, no file matches environments") @@ -293,7 +296,8 @@ def _filter_files( return files def _matches_environments(self, fileinfo: dict) -> bool: - if req := fileinfo.get("requires-python"): + req = fileinfo.get("requires-python") # python3.7 + if req: # The Python versions in all of our environments must be supported # by this file in order to match. # Some packages specify their required Python versions with a simple @@ -330,7 +334,7 @@ def _matches_environments(self, fileinfo: dict) -> bool: # only skip it if it does not match any. intrp_ver_matched = any( map( - lambda supported_python: intrp_set.contains(supported_python), + intrp_set.contains, # fix: unnecessary-lambda self._supported_pyversions, ) ) @@ -577,18 +581,16 @@ def my_url(arg): action="store_true", help="Skip server copy in mirror command (default: False)", ) - ( - parser.add_argument( - "-a", - "--mirror-all-versions", - dest="mirror_all_versions", - action="store_true", - help=( - "For packages listed in the [requirements] section, mirror every release " - "that matches their version specifiers. " - "Transitive dependencies still mirror only the latest matching release. " - "(Default: only the latest matching release)" - ), + parser.add_argument( # fix: del unnecessary parens + "-a", + "--mirror-all-versions", + dest="mirror_all_versions", + action="store_true", + help=( + "For packages listed in the [requirements] section, mirror every release " + "that matches their version specifiers. " + "Transitive dependencies still mirror only the latest matching release. " + "(Default: only the latest matching release)" ), ) parser.add_argument( From c1334163ec238e3bd87f61ef8c991989d30760c6 Mon Sep 17 00:00:00 2001 From: shamilbi Date: Wed, 21 Jan 2026 21:54:45 +0200 Subject: [PATCH 2/5] fix: format --- morgan/__init__.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/morgan/__init__.py b/morgan/__init__.py index e967e4c..e7aa1ce 100644 --- a/morgan/__init__.py +++ b/morgan/__init__.py @@ -281,7 +281,9 @@ def _filter_files( # Now we only have files that satisfy the requirement, and we need to # filter out files that do not match our environments. - files = list(filter(self._matches_environments, files)) # fix: unnecessary-lambda + files = list( + filter(self._matches_environments, files) + ) # fix: unnecessary-lambda if len(files) == 0: print(f"Skipping {requirement}, no file matches environments") From 05a36ba7ae2b0c3e6a613980054396955233c846 Mon Sep 17 00:00:00 2001 From: shamilbi Date: Sat, 7 Feb 2026 16:10:19 +0200 Subject: [PATCH 3/5] +test_skipping() --- tests/test_init.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/tests/test_init.py b/tests/test_init.py index 4f1afd9..b3cdd59 100644 --- a/tests/test_init.py +++ b/tests/test_init.py @@ -2,6 +2,7 @@ import argparse import hashlib import os +import urllib.error import packaging.requirements import pytest @@ -266,3 +267,21 @@ def test_filter_files_with_latest_version_mirrored( ) assert self.extract_versions(filtered_files) == expected_versions + + def test_skipping(self, make_mirrorer): + """Test that requirement not skipping.""" + mirrorer = make_mirrorer(mirror_all_versions=False) + required_by = packaging.requirements.Requirement("pyjwt[crypto]==2.10.1") + requirement = packaging.requirements.Requirement( + "cryptography>=3.4.0; extra == \"crypto\"" + ) + + res = {} + # if not skipping then HTTPError + with pytest.raises(urllib.error.HTTPError) as e: + # if skipping then None + res = mirrorer._mirror( + requirement=requirement, required_by=required_by + ) + + assert res != None From 50438675bcceabe7430d9814ab9166456ce376c8 Mon Sep 17 00:00:00 2001 From: shamilbi Date: Sat, 7 Feb 2026 16:31:55 +0200 Subject: [PATCH 4/5] fix: avoid pytest.raises() --- tests/test_init.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/test_init.py b/tests/test_init.py index b3cdd59..9b17b64 100644 --- a/tests/test_init.py +++ b/tests/test_init.py @@ -277,11 +277,13 @@ def test_skipping(self, make_mirrorer): ) res = {} - # if not skipping then HTTPError - with pytest.raises(urllib.error.HTTPError) as e: + try: # if skipping then None res = mirrorer._mirror( requirement=requirement, required_by=required_by ) + except urllib.error.HTTPError as e: + # if not skipping then HTTPError + pass assert res != None From 1eb94d1872ebfb7f315bd50e29913b8940bdf2e8 Mon Sep 17 00:00:00 2001 From: shamilbi Date: Sat, 7 Feb 2026 16:34:17 +0200 Subject: [PATCH 5/5] fix: format --- tests/test_init.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tests/test_init.py b/tests/test_init.py index 9b17b64..0633344 100644 --- a/tests/test_init.py +++ b/tests/test_init.py @@ -279,9 +279,7 @@ def test_skipping(self, make_mirrorer): res = {} try: # if skipping then None - res = mirrorer._mirror( - requirement=requirement, required_by=required_by - ) + res = mirrorer._mirror(requirement=requirement, required_by=required_by) except urllib.error.HTTPError as e: # if not skipping then HTTPError pass