From 40ccd1501b25a7b36c9fd1700af2bb38f1f0fd04 Mon Sep 17 00:00:00 2001 From: Alexei Znamensky <103110+russoz@users.noreply.github.com> Date: Sat, 30 Oct 2021 19:11:57 +1300 Subject: [PATCH] pipx - fixed bug in state=inject (#3611) * pipx - fixed bug in state=inject * added changelog fragment * copy/paste error in the integration test * replaced injected package with simpler one * testing force_lang = None * disable UTF-8 emojis in pipx output * better way to achieve the same outcome * Adjsuted the changelog fragment --- changelogs/fragments/3611-pipx-fix-inject.yml | 3 ++ plugins/modules/packaging/language/pipx.py | 5 ++- tests/integration/targets/pipx/tasks/main.yml | 34 +++++++++++++++++++ 3 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 changelogs/fragments/3611-pipx-fix-inject.yml diff --git a/changelogs/fragments/3611-pipx-fix-inject.yml b/changelogs/fragments/3611-pipx-fix-inject.yml new file mode 100644 index 0000000000..19433b2cb8 --- /dev/null +++ b/changelogs/fragments/3611-pipx-fix-inject.yml @@ -0,0 +1,3 @@ +bugfixes: + - pipx - ``state=inject`` was failing to parse the list of injected packages (https://github.com/ansible-collections/community.general/pull/3611). + - pipx - set environment variable ``USE_EMOJI=0`` to prevent errors in platforms that do not support ``UTF-8`` (https://github.com/ansible-collections/community.general/pull/3611). diff --git a/plugins/modules/packaging/language/pipx.py b/plugins/modules/packaging/language/pipx.py index 5dd7ffacb1..53c085ed61 100644 --- a/plugins/modules/packaging/language/pipx.py +++ b/plugins/modules/packaging/language/pipx.py @@ -176,6 +176,9 @@ class PipX(CmdStateModuleHelper): _list=dict(fmt=('list', '--include-injected', '--json'), style=ArgFormat.BOOLEAN), ) check_rc = True + run_command_fixed_options = dict( + environ_update={'USE_EMOJI': '0'} + ) def _retrieve_installed(self): def process_list(rc, out, err): @@ -188,7 +191,7 @@ class PipX(CmdStateModuleHelper): results[venv_name] = { 'version': venv['metadata']['main_package']['package_version'], 'injected': dict( - (k, v['package_version']) for k, v in venv['metadata']['injected_packages'] + (k, v['package_version']) for k, v in venv['metadata']['injected_packages'].items() ), } return results diff --git a/tests/integration/targets/pipx/tasks/main.yml b/tests/integration/targets/pipx/tasks/main.yml index b48b83fc71..67f65b9a48 100644 --- a/tests/integration/targets/pipx/tasks/main.yml +++ b/tests/integration/targets/pipx/tasks/main.yml @@ -90,3 +90,37 @@ - downgrade_tox_324.application.tox.version == '3.24.0' - uninstall_tox_324 is changed - "'tox' not in uninstall_tox_324.application" + +############################################################################## +- name: ensure application ansible-lint is uninstalled + community.general.pipx: + name: ansible-lint + state: absent + +- name: install application ansible-lint + community.general.pipx: + name: ansible-lint + register: install_ansible_lint + +- name: inject packages + community.general.pipx: + state: inject + name: ansible-lint + inject_packages: + - licenses + register: inject_pkgs_ansible_lint + +- name: cleanup ansible-lint + community.general.pipx: + state: absent + name: ansible-lint + register: uninstall_ansible_lint + +- name: check assertions inject_packages + assert: + that: + - install_ansible_lint is changed + - inject_pkgs_ansible_lint is changed + - '"ansible-lint" in inject_pkgs_ansible_lint.application' + - '"licenses" in inject_pkgs_ansible_lint.application["ansible-lint"]["injected"]' + - uninstall_ansible_lint is changed