-
-
Notifications
You must be signed in to change notification settings - Fork 21
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* feat: port list() * feat: add mock_package to package manager * fix: import
- Loading branch information
1 parent
8b39458
commit f9ec77e
Showing
4 changed files
with
95 additions
and
62 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,58 +1,7 @@ | ||
import importlib.metadata | ||
|
||
from .._compat import REPODATA_PACKAGES, loadedPackages | ||
from ..package import PackageDict, PackageMetadata | ||
from .._compat import REPODATA_PACKAGES | ||
from ..list import list_installed_packages | ||
from ..package import PackageDict | ||
|
||
|
||
def _list() -> PackageDict: | ||
"""Get the dictionary of installed packages. | ||
Returns | ||
------- | ||
``PackageDict`` | ||
A dictionary of installed packages. | ||
>>> import micropip | ||
>>> await micropip.install('regex') # doctest: +SKIP | ||
>>> package_list = micropip.list() | ||
>>> print(package_list) # doctest: +SKIP | ||
Name | Version | Source | ||
----------------- | -------- | ------- | ||
regex | 2021.7.6 | pyodide | ||
>>> "regex" in package_list # doctest: +SKIP | ||
True | ||
""" | ||
|
||
# Add packages that are loaded through pyodide.loadPackage | ||
packages = PackageDict() | ||
for dist in importlib.metadata.distributions(): | ||
name = dist.name | ||
version = dist.version | ||
source = dist.read_text("PYODIDE_SOURCE") | ||
if source is None: | ||
# source is None if PYODIDE_SOURCE does not exist. In this case the | ||
# wheel was installed manually, not via `pyodide.loadPackage` or | ||
# `micropip`. | ||
continue | ||
packages[name] = PackageMetadata( | ||
name=name, | ||
version=version, | ||
source=source, | ||
) | ||
|
||
for name, pkg_source in loadedPackages.to_py().items(): | ||
if name in packages: | ||
continue | ||
|
||
if name in REPODATA_PACKAGES: | ||
version = REPODATA_PACKAGES[name]["version"] | ||
source_ = "pyodide" | ||
if pkg_source != "default channel": | ||
# Pyodide package loaded from a custom URL | ||
source_ = pkg_source | ||
else: | ||
# TODO: calculate version from wheel metadata | ||
version = "unknown" | ||
source_ = pkg_source | ||
packages[name] = PackageMetadata(name=name, version=version, source=source_) | ||
return packages | ||
return list_installed_packages(REPODATA_PACKAGES) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
import importlib.metadata | ||
from typing import Any | ||
|
||
from ._compat import loadedPackages | ||
from .package import PackageDict, PackageMetadata | ||
|
||
|
||
def list_installed_packages( | ||
lockfile_packages: dict[str, dict[str, Any]] | ||
) -> PackageDict: | ||
"""Get the dictionary of installed packages. | ||
Returns | ||
------- | ||
``PackageDict`` | ||
A dictionary of installed packages. | ||
>>> import micropip | ||
>>> await micropip.install('regex') # doctest: +SKIP | ||
>>> package_list = micropip.list() | ||
>>> print(package_list) # doctest: +SKIP | ||
Name | Version | Source | ||
----------------- | -------- | ------- | ||
regex | 2021.7.6 | pyodide | ||
>>> "regex" in package_list # doctest: +SKIP | ||
True | ||
""" | ||
|
||
# Add packages that are loaded through pyodide.loadPackage | ||
packages = PackageDict() | ||
for dist in importlib.metadata.distributions(): | ||
name = dist.name | ||
version = dist.version | ||
source = dist.read_text("PYODIDE_SOURCE") | ||
if source is None: | ||
# source is None if PYODIDE_SOURCE does not exist. In this case the | ||
# wheel was installed manually, not via `pyodide.loadPackage` or | ||
# `micropip`. | ||
continue | ||
packages[name] = PackageMetadata( | ||
name=name, | ||
version=version, | ||
source=source, | ||
) | ||
|
||
for name, pkg_source in loadedPackages.to_py().items(): | ||
if name in packages: | ||
continue | ||
|
||
if name in lockfile_packages: | ||
version = lockfile_packages[name]["version"] | ||
source_ = "pyodide" | ||
if pkg_source != "default channel": | ||
# Pyodide package loaded from a custom URL | ||
source_ = pkg_source | ||
else: | ||
# TODO: calculate version from wheel metadata | ||
version = "unknown" | ||
source_ = pkg_source | ||
packages[name] = PackageMetadata(name=name, version=version, source=source_) | ||
return packages |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters