aboutsummaryrefslogtreecommitdiff
path: root/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/default.nix')
-rw-r--r--nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/default.nix103
1 files changed, 73 insertions, 30 deletions
diff --git a/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/default.nix b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/default.nix
index eecad922d4e..cca876ca1e6 100644
--- a/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/default.nix
+++ b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/default.nix
@@ -6,11 +6,7 @@
let
inherit (poetryLib) isCompatible readTOML moduleName;
- # Poetry2nix version
- version = "1.8.0";
-
/* The default list of poetry2nix override overlays */
- defaultPoetryOverrides = (import ./overrides.nix { inherit pkgs lib; });
mkEvalPep508 = import ./pep508.nix {
inherit lib poetryLib;
stdenv = pkgs.stdenv;
@@ -22,6 +18,14 @@ let
# Get license by id falling back to input string
getLicenseBySpdxId = spdxId: spdxLicenses.${spdxId} or spdxId;
+ # Experimental withPlugins functionality
+ toPluginAble = (import ./plugins.nix { inherit pkgs lib; }).toPluginAble;
+in
+lib.makeScope pkgs.newScope (self: {
+
+ # Poetry2nix version
+ version = "1.12.0";
+
/*
Returns an attrset { python, poetryPackages, pyProject, poetryLock } for the given pyproject/lockfile.
*/
@@ -29,10 +33,11 @@ let
{ projectDir ? null
, pyproject ? projectDir + "/pyproject.toml"
, poetrylock ? projectDir + "/poetry.lock"
- , overrides ? [ defaultPoetryOverrides ]
+ , overrides ? self.defaultPoetryOverrides
, python ? pkgs.python3
, pwd ? projectDir
, preferWheels ? false
+ , __isBootstrap ? false # Hack: Always add Poetry as a build input unless bootstrapping
}@attrs:
let
poetryPkg = poetry.override { inherit python; };
@@ -77,6 +82,7 @@ let
value = self.mkPoetryDep (
pkgMeta // {
inherit pwd preferWheels;
+ inherit __isBootstrap;
source = pkgMeta.source or null;
files = lockFiles.${name};
pythonPackages = self;
@@ -106,7 +112,9 @@ let
# The canonical name is setuptools-scm
setuptools-scm = super.setuptools_scm;
- inherit (hooks) pipBuildHook removePathDependenciesHook poetry2nixFixupHook;
+ __toPluginAble = toPluginAble self;
+
+ inherit (hooks) pipBuildHook removePathDependenciesHook poetry2nixFixupHook wheelUnpackHook;
}
)
# Null out any filtered packages, we don't want python.pkgs from nixpkgs
@@ -114,7 +122,7 @@ let
# Create poetry2nix layer
baseOverlay
] ++ # User provided overrides
- overrides
+ (if builtins.typeOf overrides == "list" then overrides else [ overrides ])
);
packageOverrides = lib.foldr lib.composeExtensions (self: super: { }) overlays;
py = python.override { inherit packageOverrides; self = py; };
@@ -137,7 +145,7 @@ let
{ projectDir ? null
, pyproject ? projectDir + "/pyproject.toml"
, poetrylock ? projectDir + "/poetry.lock"
- , overrides ? [ defaultPoetryOverrides ]
+ , overrides ? self.defaultPoetryOverrides
, pwd ? projectDir
, python ? pkgs.python3
, preferWheels ? false
@@ -145,19 +153,34 @@ let
, editablePackageSources ? { }
}:
let
- py = mkPoetryPackages (
+ py = self.mkPoetryPackages (
{
inherit pyproject poetrylock overrides python pwd preferWheels;
}
);
+ inherit (py) pyProject;
+
+ # Add executables from tool.poetry.scripts
+ scripts = pyProject.tool.poetry.scripts or { };
+ hasScripts = scripts != { };
+ scriptsPackage = import ./shell-scripts.nix {
+ inherit scripts lib;
+ inherit (py) python;
+ };
+
+ hasEditable = editablePackageSources != { };
editablePackage = import ./editable.nix {
inherit pkgs lib poetryLib editablePackageSources;
inherit (py) pyProject python;
};
in
- py.python.withPackages (_: py.poetryPackages ++ lib.optional (editablePackageSources != { }) editablePackage);
+ py.python.withPackages (
+ _: py.poetryPackages
+ ++ lib.optional hasEditable editablePackage
+ ++ lib.optional hasScripts scriptsPackage
+ );
/* Creates a Python application from pyproject.toml and poetry.lock
@@ -168,19 +191,20 @@ let
*/
mkPoetryApplication =
{ projectDir ? null
- , src ? poetryLib.cleanPythonSources { src = projectDir; }
+ , src ? self.cleanPythonSources { src = projectDir; }
, pyproject ? projectDir + "/pyproject.toml"
, poetrylock ? projectDir + "/poetry.lock"
- , overrides ? [ defaultPoetryOverrides ]
+ , overrides ? self.defaultPoetryOverrides
, meta ? { }
, python ? pkgs.python3
, pwd ? projectDir
, preferWheels ? false
+ , __isBootstrap ? false # Hack: Always add Poetry as a build input unless bootstrapping
, ...
}@attrs:
let
- poetryPython = mkPoetryPackages {
- inherit pyproject poetrylock overrides python pwd preferWheels;
+ poetryPython = self.mkPoetryPackages {
+ inherit pyproject poetrylock overrides python pwd preferWheels __isBootstrap;
};
py = poetryPython.python;
@@ -206,7 +230,7 @@ let
(
dep:
let
- pkg = py.pkgs."${dep}";
+ pkg = py.pkgs."${moduleName dep}";
constraints = deps.${dep}.python or "";
isCompat = compat constraints;
in
@@ -265,29 +289,48 @@ let
app;
/* Poetry2nix CLI used to supplement SHA-256 hashes for git dependencies */
- cli = import ./cli.nix { inherit pkgs lib version; };
-in
-{
- inherit mkPoetryEnv mkPoetryApplication mkPoetryPackages cli version;
+ cli = import ./cli.nix {
+ inherit pkgs lib;
+ inherit (self) version;
+ };
+
+ # inherit mkPoetryEnv mkPoetryApplication mkPoetryPackages;
inherit (poetryLib) cleanPythonSources;
- /*
- The default list of poetry2nix override overlays
- Can be overriden by calling defaultPoetryOverrides.overrideOverlay which takes an overlay function
+ /*
+ Create a new default set of overrides with the same structure as the built-in ones
*/
- defaultPoetryOverrides = {
- __functor = defaultPoetryOverrides;
- overrideOverlay = fn: self: super:
+ mkDefaultPoetryOverrides = defaults: {
+ __functor = defaults;
+
+ extend = overlay:
+ let
+ composed = lib.foldr lib.composeExtensions overlay [ defaults ];
+ in
+ self.mkDefaultPoetryOverrides composed;
+
+ overrideOverlay = fn:
let
- defaultSet = defaultPoetryOverrides self super;
- customSet = fn self super;
+ overlay = self: super:
+ let
+ defaultSet = defaults self super;
+ customSet = fn self super;
+ in
+ defaultSet // customSet;
in
- defaultSet // customSet;
+ self.mkDefaultPoetryOverrides overlay;
};
/*
+ The default list of poetry2nix override overlays
+
+ Can be overriden by calling defaultPoetryOverrides.overrideOverlay which takes an overlay function
+ */
+ defaultPoetryOverrides = self.mkDefaultPoetryOverrides (import ./overrides.nix { inherit pkgs lib; });
+
+ /*
Convenience functions for specifying overlays with or without the poerty2nix default overrides
*/
overrides = {
@@ -303,8 +346,8 @@ in
combining it with poetry2nix default overrides
*/
withDefaults = overlay: [
- defaultPoetryOverrides
+ self.defaultPoetryOverrides
overlay
];
};
-}
+})