diff options
Diffstat (limited to 'nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/default.nix')
-rw-r--r-- | nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/default.nix | 103 |
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 ]; }; -} +}) |