diff options
5 files changed, 272 insertions, 112 deletions
diff --git a/pkgs/tools/package-management/poetry/default.nix b/pkgs/tools/package-management/poetry/default.nix index 069b6f24eaa..eaaa2dc57d4 100644 --- a/pkgs/tools/package-management/poetry/default.nix +++ b/pkgs/tools/package-management/poetry/default.nix @@ -1,13 +1,13 @@ { lib -, stdenv , python3 -, fetchFromGitHub -, installShellFiles }: let python = python3.override { packageOverrides = self: super: { + poetry = self.callPackage ./unwrapped.nix { }; + + # version overrides required by poetry and its plugins dulwich = super.dulwich.overridePythonAttrs (old: rec { version = "0.20.50"; src = self.fetchPypi { @@ -18,118 +18,30 @@ let }); }; }; -in python.pkgs.buildPythonApplication rec { - pname = "poetry"; - version = "1.3.2"; - format = "pyproject"; - - disabled = python.pkgs.pythonOlder "3.7"; - src = fetchFromGitHub { - owner = "python-poetry"; - repo = pname; - rev = "refs/tags/${version}"; - hash = "sha256-12EiEGI9Vkb6EUY/W2KWeLigxWra1Be4ozvi8njBpEU="; + plugins = with python.pkgs; { + poetry-audit-plugin = callPackage ./plugins/poetry-audit-plugin.nix { }; + poetry-plugin-up = callPackage ./plugins/poetry-plugin-up.nix { }; }; - nativeBuildInputs = [ - installShellFiles - ]; - - propagatedBuildInputs = with python.pkgs; [ - cachecontrol - cleo - crashtest - dulwich - filelock - html5lib - jsonschema - keyring - packaging - pexpect - pkginfo - platformdirs - poetry-core - poetry-plugin-export - requests - requests-toolbelt - shellingham - tomlkit - trove-classifiers - virtualenv - ] ++ lib.optionals (stdenv.isDarwin) [ - xattr - ] ++ lib.optionals (pythonOlder "3.11") [ - tomli - ] ++ lib.optionals (pythonOlder "3.10") [ - importlib-metadata - ] ++ lib.optionals (pythonOlder "3.8") [ - backports-cached-property - ] ++ cachecontrol.optional-dependencies.filecache; - - postInstall = '' - installShellCompletion --cmd poetry \ - --bash <($out/bin/poetry completions bash) \ - --fish <($out/bin/poetry completions fish) \ - --zsh <($out/bin/poetry completions zsh) \ - ''; - - # Propagating dependencies leaks them through $PYTHONPATH which causes issues - # when used in nix-shell. - postFixup = '' - rm $out/nix-support/propagated-build-inputs - ''; + # selector is a function mapping pythonPackages to a list of plugins + # e.g. poetry.withPlugins (ps: with ps; [ poetry-plugin-up ]) + withPlugins = selector: let + selected = selector plugins; + in python.pkgs.toPythonApplication (python.pkgs.poetry.overridePythonAttrs (old: { + propagatedBuildInputs = old.propagatedBuildInputs ++ selected; - nativeCheckInputs = with python.pkgs; [ - cachy - deepdiff - flatdict - pytestCheckHook - httpretty - pytest-mock - pytest-xdist - ]; + # save some build time when adding plugins by disabling tests + doCheck = selected == [ ]; - preCheck = ('' - export HOME=$TMPDIR - '' + lib.optionalString (stdenv.isDarwin && stdenv.isAarch64) '' - # https://github.com/python/cpython/issues/74570#issuecomment-1093748531 - export no_proxy='*'; - ''); + # Propagating dependencies leaks them through $PYTHONPATH which causes issues + # when used in nix-shell. + postFixup = '' + rm $out/nix-support/propagated-build-inputs + ''; - postCheck = lib.optionalString (stdenv.isDarwin && stdenv.isAarch64) '' - unset no_proxy - ''; - - disabledTests = [ - # touches network - "git" - "solver" - "load" - "vcs" - "prereleases_if_they_are_compatible" - "test_executor" - # requires git history to work correctly - "default_with_excluded_data" - # toml ordering has changed - "lock" - # fs permission errors - "test_builder_should_execute_build_scripts" - ] ++ lib.optionals (python.pythonAtLeast "3.10") [ - # RuntimeError: 'auto_spec' might be a typo; use unsafe=True if this is intended - "test_info_setup_complex_pep517_error" - ]; - - # Allow for package to use pep420's native namespaces - pythonNamespaces = [ - "poetry" - ]; - - meta = with lib; { - changelog = "https://github.com/python-poetry/poetry/blob/${src.rev}/CHANGELOG.md"; - homepage = "https://python-poetry.org/"; - description = "Python dependency management and packaging made easy"; - license = licenses.mit; - maintainers = with maintainers; [ jakewaksbaum dotlambda ]; - }; -} + passthru = rec { + inherit plugins withPlugins; + }; + })); +in withPlugins (ps: [ ]) diff --git a/pkgs/tools/package-management/poetry/plugins/poetry-audit-plugin.nix b/pkgs/tools/package-management/poetry/plugins/poetry-audit-plugin.nix new file mode 100644 index 00000000000..85eb0b5d19b --- /dev/null +++ b/pkgs/tools/package-management/poetry/plugins/poetry-audit-plugin.nix @@ -0,0 +1,54 @@ +{ lib +, buildPythonPackage +, pythonOlder +, fetchFromGitHub +, poetry-core +, poetry +, safety +, pytestCheckHook +}: + +buildPythonPackage rec { + pname = "poetry-audit-plugin"; + version = "0.3.0"; + + disabled = pythonOlder "3.7"; + + format = "pyproject"; + + src = fetchFromGitHub { + owner = "opeco17"; + repo = "poetry-audit-plugin"; + rev = "refs/tags/${version}"; + hash = "sha256-49OnYz3EFiqOe+cLgfynjy14Ve4Ga6OUrLdM8HhZuKQ="; + }; + + nativeBuildInputs = [ + poetry-core + ]; + + buildInputs = [ + poetry + ]; + + propagatedBuildInputs = [ + safety + ]; + + pythonImportsCheck = [ "poetry_audit_plugin" ]; + + nativeCheckInputs = [ + poetry # for the executable + pytestCheckHook + ]; + + # requires networking + doCheck = false; + + meta = { + description = "Poetry plugin for checking security vulnerabilities in dependencies"; + homepage = "https://github.com/opeco17/poetry-audit-plugin"; + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ dotlambda ]; + }; +} diff --git a/pkgs/tools/package-management/poetry/plugins/poetry-plugin-up.nix b/pkgs/tools/package-management/poetry/plugins/poetry-plugin-up.nix new file mode 100644 index 00000000000..e84546573da --- /dev/null +++ b/pkgs/tools/package-management/poetry/plugins/poetry-plugin-up.nix @@ -0,0 +1,43 @@ +{ lib +, fetchFromGitHub +, buildPythonPackage +, poetry-core +, pytestCheckHook +, pytest-mock +, poetry +}: + +buildPythonPackage rec { + pname = "poetry-plugin-up"; + version = "0.2.1"; + format = "pyproject"; + + src = fetchFromGitHub { + owner = "MousaZeidBaker"; + repo = pname; + rev = "refs/tags/${version}"; + hash = "sha256-16p0emvgWa56Km8U5HualCSStbulqyINbC3Jez9Y1n0="; + }; + + nativeBuildInputs = [ + poetry-core + ]; + + nativeCheckInputs = [ + pytestCheckHook + pytest-mock + poetry + ]; + + preCheck = '' + export HOME=$TMPDIR + ''; + + meta = with lib; { + description = "Poetry plugin to simplify package updates"; + homepage = "https://github.com/MousaZeidBaker/poetry-plugin-up"; + changelog = "https://github.com/MousaZeidBaker/poetry-plugin-up/releases/tag/${version}"; + license = licenses.mit; + maintainers = [ maintainers.k900 ]; + }; +} diff --git a/pkgs/tools/package-management/poetry/unwrapped.nix b/pkgs/tools/package-management/poetry/unwrapped.nix new file mode 100644 index 00000000000..e98c571ddb7 --- /dev/null +++ b/pkgs/tools/package-management/poetry/unwrapped.nix @@ -0,0 +1,149 @@ +{ lib +, stdenv +, buildPythonPackage +, pythonOlder +, fetchFromGitHub +, installShellFiles +, cachecontrol +, cleo +, crashtest +, dulwich +, filelock +, html5lib +, jsonschema +, keyring +, packaging +, pexpect +, pkginfo +, platformdirs +, poetry-core +, poetry-plugin-export +, requests +, requests-toolbelt +, shellingham +, tomlkit +, trove-classifiers +, virtualenv +, xattr +, tomli +, importlib-metadata +, backports-cached-property +, cachy +, deepdiff +, flatdict +, pytestCheckHook +, httpretty +, pytest-mock +, pytest-xdist +, pythonAtLeast +}: + +buildPythonPackage rec { + pname = "poetry"; + version = "1.3.2"; + format = "pyproject"; + + disabled = pythonOlder "3.7"; + + src = fetchFromGitHub { + owner = "python-poetry"; + repo = pname; + rev = "refs/tags/${version}"; + hash = "sha256-12EiEGI9Vkb6EUY/W2KWeLigxWra1Be4ozvi8njBpEU="; + }; + + nativeBuildInputs = [ + installShellFiles + ]; + + propagatedBuildInputs = [ + cachecontrol + cleo + crashtest + dulwich + filelock + html5lib + jsonschema + keyring + packaging + pexpect + pkginfo + platformdirs + poetry-core + poetry-plugin-export + requests + requests-toolbelt + shellingham + tomlkit + trove-classifiers + virtualenv + ] ++ lib.optionals (stdenv.isDarwin) [ + xattr + ] ++ lib.optionals (pythonOlder "3.11") [ + tomli + ] ++ lib.optionals (pythonOlder "3.10") [ + importlib-metadata + ] ++ lib.optionals (pythonOlder "3.8") [ + backports-cached-property + ] ++ cachecontrol.optional-dependencies.filecache; + + postInstall = '' + installShellCompletion --cmd poetry \ + --bash <($out/bin/poetry completions bash) \ + --fish <($out/bin/poetry completions fish) \ + --zsh <($out/bin/poetry completions zsh) \ + ''; + + nativeCheckInputs = [ + cachy + deepdiff + flatdict + pytestCheckHook + httpretty + pytest-mock + pytest-xdist + ]; + + preCheck = ('' + export HOME=$TMPDIR + '' + lib.optionalString (stdenv.isDarwin && stdenv.isAarch64) '' + # https://github.com/python/cpython/issues/74570#issuecomment-1093748531 + export no_proxy='*'; + ''); + + postCheck = lib.optionalString (stdenv.isDarwin && stdenv.isAarch64) '' + unset no_proxy + ''; + + disabledTests = [ + # touches network + "git" + "solver" + "load" + "vcs" + "prereleases_if_they_are_compatible" + "test_executor" + # requires git history to work correctly + "default_with_excluded_data" + # toml ordering has changed + "lock" + # fs permission errors + "test_builder_should_execute_build_scripts" + ] ++ lib.optionals (pythonAtLeast "3.10") [ + # RuntimeError: 'auto_spec' might be a typo; use unsafe=True if this is intended + "test_info_setup_complex_pep517_error" + ]; + + # Allow for package to use pep420's native namespaces + pythonNamespaces = [ + "poetry" + ]; + + meta = with lib; { + changelog = "https://github.com/python-poetry/poetry/blob/${src.rev}/CHANGELOG.md"; + homepage = "https://python-poetry.org/"; + description = "Python dependency management and packaging made easy"; + license = licenses.mit; + maintainers = with maintainers; [ jakewaksbaum dotlambda ]; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 51692365bbe..19d6230369e 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -16574,6 +16574,8 @@ with pkgs; poetry = callPackage ../tools/package-management/poetry { }; + poetryPlugins = recurseIntoAttrs poetry.plugins; + poetry2nix = callPackage ../development/tools/poetry2nix/poetry2nix { inherit pkgs lib; }; |