diff --git a/morgan/__init__.py b/morgan/__init__.py index 85f9338..b67aa5a 100644 --- a/morgan/__init__.py +++ b/morgan/__init__.py @@ -145,17 +145,20 @@ def _mirror( # noqa: C901, PLR0912 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 = None # get information about this package from the Simple API in JSON @@ -290,7 +293,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)) if len(files) == 0: print(f"Skipping {requirement}, no file matches environments") diff --git a/tests/test_init.py b/tests/test_init.py index 43d7cba..d242267 100644 --- a/tests/test_init.py +++ b/tests/test_init.py @@ -1,7 +1,9 @@ # pylint: disable=missing-function-docstring,missing-class-docstring,missing-module-docstring import argparse +import contextlib import hashlib import os +import urllib.error import packaging.requirements import pytest @@ -282,3 +284,22 @@ 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 = {} + with contextlib.suppress(urllib.error.HTTPError): + # if skipping then None + res = mirrorer._mirror( # noqa: SLF001 + requirement=requirement, + required_by=required_by, + ) + # if not skipping then HTTPError + + assert res is not None