summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--pkgs/tools/package-management/poetry/default.nix136
-rw-r--r--pkgs/tools/package-management/poetry/plugins/poetry-audit-plugin.nix54
-rw-r--r--pkgs/tools/package-management/poetry/plugins/poetry-plugin-up.nix43
-rw-r--r--pkgs/tools/package-management/poetry/unwrapped.nix149
-rw-r--r--pkgs/top-level/all-packages.nix2
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;
   };