Skip to content

Commit

Permalink
Fixed incorrect handling of main packages in pypi
Browse files Browse the repository at this point in the history
  • Loading branch information
eivindjahren committed Nov 15, 2024
1 parent 0b6c152 commit 22cd1cc
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 9 deletions.
2 changes: 1 addition & 1 deletion komodo/check_unused_package.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ def check_for_unused_package(
full_python_version = builtin_python_versions[python_version]

dependencies = PypiDependencies(
release_file.content, python_version=full_python_version
release_file.content, release_file.content, python_version=full_python_version
)
for name, version in release_file.content.items():
metadata = repository.content.get(name, {}).get(version, {})
Expand Down
5 changes: 3 additions & 2 deletions komodo/lint.py
Original file line number Diff line number Diff line change
Expand Up @@ -93,9 +93,10 @@ def lint(
maintainers.append(komodo_exception.error)

if check_dependencies:
all_dependencies = dict(release_file.content.items())
pypi_dependencies = {
name: version
for name, version in release_file.content.items()
for name, version in all_dependencies.items()
if repository_file.content.get(name, {}).get(version, {}).get("source")
== "pypi"
}
Expand All @@ -105,7 +106,7 @@ def lint(
full_python_version = yaml.safe_load(f)[python_version]

dependencies = PypiDependencies(
pypi_dependencies, python_version=full_python_version
pypi_dependencies, all_dependencies, python_version=full_python_version
)
for name, version in release_file.content.items():
if (
Expand Down
37 changes: 31 additions & 6 deletions komodo/pypi_dependencies.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ def format_full_version(info) -> str:
class PypiDependencies:
def __init__(
self,
pypi_dependencies: Dict[str, str],
to_install: Dict[str, str],
python_version: str,
cachefile: str = "./pypi_dependencies.yml",
Expand All @@ -51,9 +52,11 @@ def __init__(
self._failed_requirements: Dict[Requirement, str] = {}
self._used_packages = set()

self._to_install = to_install

self._install_names = {canonicalize_name(name): name for name in to_install}
self._pypi_dependencies = {
canonicalize_name(name): version
for name, version in pypi_dependencies.items()
}
self._to_install = {
canonicalize_name(name): version for name, version in to_install.items()
}
Expand All @@ -70,13 +73,34 @@ def __init__(
self._user_specified = {}

def _update_package_sets(self, packages=None):
for package_name, version in packages or self._to_install.items():
for package_name, version in packages or self._pypi_dependencies.items():
requirements = self._get_requirements(package_name, version)
self._used_packages.add(package_name)
for r in requirements:
_ = self.satisfied(r, package_name)

def failed_requirements(self, packages=None):
"""
>>>
>>> pypi_packages = {
... "ert": "11.1.0",
... "aiohttp": "3.10.10",
... "deprecation": "2.1.0",
... "filelock": "3.16.1",
... "jinja2": "3.1.4",
... "aiohappyeyeballs": "2.4.3",
... "cryptography": "43.0.1",
... "PyJWT": "2.3.0"}
>>> all_packages = {
... **pypi_packages,
... "xtgeo": "main",
... "iterative_ensemble_smoother": "main"}
>>> dependencies = PypiDependencies(pypi_packages, all_packages, python_version="3.8")
>>> dependencies.add_user_specified("xtgeo", [])
>>> dependencies.add_user_specified("iterative_ensemble_smoother", [])
>>> dependencies.failed_requirements() # doctest: +ELLIPSIS
Not installed: aiosignal...
"""
self._update_package_sets(packages)
return self._failed_requirements

Expand Down Expand Up @@ -114,7 +138,7 @@ def _get_requirements(
) -> List[Requirement]:
"""
>>> from packaging.requirements import Requirement
>>> PypiDependencies(to_install={}, python_version="3.8.11")._get_requirements(
>>> PypiDependencies({}, {}, python_version="3.8.11")._get_requirements(
... "rips",
... "2024.3.0.2"
... )
Expand Down Expand Up @@ -226,12 +250,13 @@ def satisfied(
) -> bool:
"""
>>> from packaging.requirements import Requirement
>>> PypiDependencies(to_install={}, python_version="3.8").satisfied(
>>> PypiDependencies({}, {}, python_version="3.8").satisfied(
... Requirement("PyJWT[crypto] (<3, >=1.0.0)")
... )
Not installed: pyjwt
False
>>> PypiDependencies(to_install={"PyJWT": "2.3.0"}, python_version="3.8").satisfied(
>>> packages = {"PyJWT": "2.3.0"}
>>> PypiDependencies(packages, packages, python_version="3.8").satisfied(
... Requirement("PyJWT (<3, >=1.0.0)")
... )
True
Expand Down

0 comments on commit 22cd1cc

Please sign in to comment.