diff --git a/micropip/freeze.py b/micropip/freeze.py index 4c32c38..b4fa9a3 100644 --- a/micropip/freeze.py +++ b/micropip/freeze.py @@ -1,5 +1,4 @@ import importlib.metadata -import itertools import json from collections.abc import Iterator from copy import deepcopy @@ -19,12 +18,11 @@ def freeze_lockfile( def freeze_data( lockfile_packages: dict[str, dict[str, Any]], lockfile_info: dict[str, str] ) -> dict[str, Any]: - pyodide_packages = deepcopy(lockfile_packages) - pip_packages = load_pip_packages() - package_items = itertools.chain(pyodide_packages.items(), pip_packages) + packages = deepcopy(lockfile_packages) + packages.update(load_pip_packages()) # Sort - packages = dict(sorted(package_items)) + packages = dict(sorted(packages.items())) return { "info": lockfile_info, "packages": packages, diff --git a/tests/test_freeze.py b/tests/test_freeze.py index d04c706..d6fe0de 100644 --- a/tests/test_freeze.py +++ b/tests/test_freeze.py @@ -66,12 +66,21 @@ async def test_freeze_fix_depends( assert dep2_metadata["imports"] == toplevel[2] -def test_freeze_lockfile_compat(selenium_standalone_micropip, wheel_catalog, tmp_path): +@pytest.mark.parametrize( + ("name", "depends"), + [ + ["pytest", {"attrs", "iniconfig", "packaging", "pluggy"}], + ["snowballstemmer", set()], + ], +) +def test_freeze_lockfile_compat( + name, depends, selenium_standalone_micropip, wheel_catalog, tmp_path +): from pyodide_lock import PyodideLockSpec selenium = selenium_standalone_micropip - snowball_wheel = wheel_catalog.get("snowballstemmer") - url = snowball_wheel.url + wheel = wheel_catalog.get(name) + url = wheel.url lockfile_content = selenium.run_async( f""" @@ -85,10 +94,11 @@ def test_freeze_lockfile_compat(selenium_standalone_micropip, wheel_catalog, tmp f.write(lockfile_content) lockfile = PyodideLockSpec.from_json(lockfile_path) - assert lockfile.packages["snowballstemmer"].file_name == url - assert lockfile.packages["snowballstemmer"].name == "snowballstemmer" - assert lockfile.packages["snowballstemmer"].depends == [] - assert lockfile.packages["snowballstemmer"].imports == ["snowballstemmer"] - assert lockfile.packages["snowballstemmer"].install_dir == "site" - assert not lockfile.packages["snowballstemmer"].unvendored_tests - assert lockfile.packages["snowballstemmer"].version == snowball_wheel.version + package = lockfile.packages[name] + assert package.file_name == url + assert package.name == name + assert set(package.depends) == depends + assert name in package.imports + assert package.install_dir == "site" + assert not package.unvendored_tests + assert package.version == wheel.version