From 5e1f3c19b053ab2134daffae3452e968de87f6e9 Mon Sep 17 00:00:00 2001 From: Ayaz Salikhov Date: Fri, 8 Nov 2024 20:52:49 +0000 Subject: [PATCH 1/2] Always print 'channels' during `env export` --- micromamba/src/env.cpp | 16 ++++++---------- micromamba/tests/test_env.py | 30 +++++++++++++++++++++++------- 2 files changed, 29 insertions(+), 17 deletions(-) diff --git a/micromamba/src/env.cpp b/micromamba/src/env.cpp index 34c4512097..e1e73be556 100644 --- a/micromamba/src/env.cpp +++ b/micromamba/src/env.cpp @@ -229,18 +229,14 @@ set_env_command(CLI::App* com, Configuration& config) } std::cout << "{\n"; - if (!channels.empty()) + std::cout << " \"channels\": [\n"; + for (auto channel_it = channels.begin(); channel_it != channels.end(); ++channel_it) { - std::cout << " \"channels\": [\n"; - for (auto channel_it = channels.begin(); channel_it != channels.end(); - ++channel_it) - { - auto last_channel = std::next(channel_it) == channels.end(); - std::cout << " \"" << *channel_it << "\"" << (last_channel ? "" : ",") - << "\n"; - } - std::cout << " ],\n"; + auto last_channel = std::next(channel_it) == channels.end(); + std::cout << " \"" << *channel_it << "\"" << (last_channel ? "" : ",") << "\n"; } + std::cout << " ],\n"; + std::cout << " \"dependencies\": [\n" << dependencies.str() << " ],\n"; std::cout << " \"name\": \"" << get_env_name(ctx, ctx.prefix_params.target_prefix) diff --git a/micromamba/tests/test_env.py b/micromamba/tests/test_env.py index a29dff8f3a..40913aa343 100644 --- a/micromamba/tests/test_env.py +++ b/micromamba/tests/test_env.py @@ -70,31 +70,47 @@ def export_env(): return env_name +@pytest.fixture(scope="module") +def empty_env(): + env_name = "env-empty" + helpers.create("-n", env_name) + return env_name + + +@pytest.mark.parametrize("json_flag", [None, "--json"]) +def test_empty_env_export(json_flag, empty_env): + flags = filter(None, [json_flag]) + output = helpers.run_env("export", "-n", empty_env, *flags) + + # json is already parsed + ret = output if json_flag else yaml.safe_load(output) + assert ret["name"] == empty_env + assert "env-empty" in ret["prefix"] + assert not ret["channels"] + + @pytest.mark.parametrize("channel_subdir_flag", [None, "--channel-subdir"]) @pytest.mark.parametrize("md5_flag", [None, "--md5", "--no-md5"]) @pytest.mark.parametrize("explicit_flag", [None, "--explicit"]) @pytest.mark.parametrize("no_build_flag", [None, "--no-build", "--no-builds"]) @pytest.mark.parametrize("json_flag", [None, "--json"]) def test_env_export( - export_env, json_flag, no_build_flag, explicit_flag, md5_flag, channel_subdir_flag + channel_subdir_flag, md5_flag, explicit_flag, no_build_flag, json_flag, export_env ): if explicit_flag and json_flag: # `--explicit` has precedence over `--json`, which is tested bellow. # But we need to omit here to avoid `helpers.run_env` to parse the output as JSON and fail. json_flag = None - flags = filter(None, [no_build_flag, json_flag, explicit_flag, md5_flag, channel_subdir_flag]) + flags = filter(None, [channel_subdir_flag, md5_flag, explicit_flag, no_build_flag, json_flag]) output = helpers.run_env("export", "-n", export_env, *flags) if explicit_flag: assert "/micromamba-0.24.0-0." in output if md5_flag != "--no-md5": assert re.search("#[a-f0-9]{32}$", output.replace("\r", "")) else: - if json_flag: - # Already parsed - ret = output - else: - ret = yaml.safe_load(output) + # json is already parsed + ret = output if json_flag else yaml.safe_load(output) assert ret["name"] == export_env assert "env-create-export" in ret["prefix"] assert set(ret["channels"]) == {"conda-forge"} From 7670c2aa98e1ad8cb06e326fdec2cc6bffb06c90 Mon Sep 17 00:00:00 2001 From: Ayaz Salikhov Date: Tue, 12 Nov 2024 13:12:20 +0000 Subject: [PATCH 2/2] Update test_env.py --- micromamba/tests/test_env.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/micromamba/tests/test_env.py b/micromamba/tests/test_env.py index af1ebd1d34..02026e35f0 100644 --- a/micromamba/tests/test_env.py +++ b/micromamba/tests/test_env.py @@ -77,7 +77,7 @@ def test_env_export_empty(json_flag, empty_env): # json is already parsed ret = output if json_flag else yaml.safe_load(output) assert ret["name"] == empty_env - assert "env-empty" in ret["prefix"] + assert empty_env in ret["prefix"] assert not ret["channels"] @@ -126,7 +126,7 @@ def test_env_export( # json is already parsed ret = output if json_flag else yaml.safe_load(output) assert ret["name"] == export_env - assert "env-create-export" in ret["prefix"] + assert export_env in ret["prefix"] assert set(ret["channels"]) == {"conda-forge"} micromamba_spec_prefix = "micromamba=0.24.0" if no_build_flag else "micromamba=0.24.0=0" assert micromamba_spec_prefix in str(ret["dependencies"])