diff --git a/mk-poetry-dep.nix b/mk-poetry-dep.nix index 097b5f80d..feab59fb8 100644 --- a/mk-poetry-dep.nix +++ b/mk-poetry-dep.nix @@ -178,54 +178,61 @@ pythonPackages.callPackage # Interpreters should declare what wheel types they're compatible with (python type + ABI) # Here we can then choose a file based on that info. src = - if isGit then - ( - builtins.fetchGit ({ - inherit (source) url; - rev = source.resolved_reference or source.reference; - ref = sourceSpec.branch or (if sourceSpec ? tag then "refs/tags/${sourceSpec.tag}" else "HEAD"); - } // ( - lib.optionalAttrs - (((sourceSpec ? rev) || (sourceSpec ? branch) || (source ? resolved_reference) || (source ? reference)) - && (lib.versionAtLeast builtins.nixVersion "2.4")) + let + srcRoot = + if isGit then + ( + builtins.fetchGit ({ + inherit (source) url; + rev = source.resolved_reference or source.reference; + ref = sourceSpec.branch or (if sourceSpec ? tag then "refs/tags/${sourceSpec.tag}" else "HEAD"); + } // ( + lib.optionalAttrs + (((sourceSpec ? rev) || (sourceSpec ? branch) || (source ? resolved_reference) || (source ? reference)) + && (lib.versionAtLeast builtins.nixVersion "2.4")) + { + allRefs = true; + }) // ( + lib.optionalAttrs (lib.versionAtLeast builtins.nixVersion "2.4") { + submodules = true; + }) + ) + ) + else if isWheelUrl then + builtins.fetchurl { - allRefs = true; - }) // ( - lib.optionalAttrs (lib.versionAtLeast builtins.nixVersion "2.4") { - submodules = true; - }) - ) - ) - else if isWheelUrl then - builtins.fetchurl - { - inherit (source) url; - sha256 = fileInfo.hash; - } - else if isUrl then - builtins.fetchTarball - { - inherit (source) url; - sha256 = fileInfo.hash; - } - else if isDirectory then - (poetryLib.cleanPythonSources { src = localDepPath; }) - else if isFile then - localDepPath - else if isLegacy then - fetchFromLegacy - { - pname = name; - inherit python; - inherit (fileInfo) file hash; - inherit (source) url; - } + inherit (source) url; + sha256 = fileInfo.hash; + } + else if isUrl then + builtins.fetchTarball + { + inherit (source) url; + sha256 = fileInfo.hash; + } + else if isDirectory then + (poetryLib.cleanPythonSources { src = localDepPath; }) + else if isFile then + localDepPath + else if isLegacy then + fetchFromLegacy + { + pname = name; + inherit python; + inherit (fileInfo) file hash; + inherit (source) url; + } + else + fetchFromPypi { + pname = name; + inherit (fileInfo) file hash kind; + inherit version; + }; + in + if source ? subdirectory then + srcRoot + "/${source.subdirectory}" else - fetchFromPypi { - pname = name; - inherit (fileInfo) file hash kind; - inherit version; - }; + srcRoot; } ) { } diff --git a/tests/default.nix b/tests/default.nix index 4edb9078c..4b9270e3f 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -141,6 +141,7 @@ in contourpy-no-wheel = callTest ./contourpy-no-wheel { }; pytesseract = callTest ./pytesseract { }; sphinx5 = callTest ./sphinx5 { }; + subdirectory = callTest ./subdirectory { }; } // lib.optionalAttrs (!stdenv.isDarwin) { # Test deadlocks on darwin, sandboxing issue? dependency-environment = callTest ./dependency-environment { }; diff --git a/tests/subdirectory/default.nix b/tests/subdirectory/default.nix new file mode 100644 index 000000000..b4869742c --- /dev/null +++ b/tests/subdirectory/default.nix @@ -0,0 +1,14 @@ +{ lib, poetry2nix, postgresql_14, runCommandCC, stdenv }: + +let env = poetry2nix.mkPoetryEnv { projectDir = ./.; }; +in if stdenv.isDarwin then + env +else + runCommandCC "subdirectory-test" + { + PSYCOPG_IMPL = "python"; + LD_LIBRARY_PATH = lib.makeLibraryPath [ postgresql_14 ]; + } '' + '${env}/bin/python' -c 'import psycopg' + touch "$out" + '' diff --git a/tests/subdirectory/poetry.lock b/tests/subdirectory/poetry.lock new file mode 100644 index 000000000..9b74ae213 --- /dev/null +++ b/tests/subdirectory/poetry.lock @@ -0,0 +1,58 @@ +# This file is automatically @generated by Poetry and should not be changed by hand. + +[[package]] +name = "psycopg" +version = "3.1.10" +description = "PostgreSQL database adapter for Python" +category = "main" +optional = false +python-versions = ">=3.7" +files = [] +develop = false + +[package.dependencies] +typing-extensions = ">=4.1" +tzdata = {version = "*", markers = "sys_platform == \"win32\""} + +[package.extras] +binary = ["psycopg-binary (==3.1.10)"] +c = ["psycopg-c (==3.1.10)"] +dev = ["black (>=23.1.0)", "dnspython (>=2.1)", "flake8 (>=4.0)", "mypy (>=1.4.1)", "types-setuptools (>=57.4)", "wheel (>=0.37)"] +docs = ["Sphinx (>=5.0)", "furo (==2022.6.21)", "sphinx-autobuild (>=2021.3.14)", "sphinx-autodoc-typehints (>=1.12)"] +pool = ["psycopg-pool"] +test = ["anyio (>=3.6.2)", "mypy (>=1.4.1)", "pproxy (>=2.7)", "pytest (>=6.2.5)", "pytest-cov (>=3.0)", "pytest-randomly (>=3.5)"] + +[package.source] +type = "git" +url = "https://github.com/psycopg/psycopg.git" +reference = "3.1.10" +resolved_reference = "8d2ba2d7587116b65911cdccdf24af0413f17865" +subdirectory = "psycopg" +[[package]] +name = "typing-extensions" +version = "4.7.1" +description = "Backported and Experimental Type Hints for Python 3.7+" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, + {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, +] + +[[package]] +name = "tzdata" +version = "2023.3" +description = "Provider of IANA time zone data" +category = "main" +optional = false +python-versions = ">=2" +files = [ + {file = "tzdata-2023.3-py2.py3-none-any.whl", hash = "sha256:7e65763eef3120314099b6939b5546db7adce1e7d6f2e179e3df563c70511eda"}, + {file = "tzdata-2023.3.tar.gz", hash = "sha256:11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a"}, +] + +[metadata] +lock-version = "2.0" +python-versions = "^3.10" +content-hash = "57aea2a6ff62c054b7524aaf8ace8a91628f19986f8076ff0fc42f651c45b595" diff --git a/tests/subdirectory/pyproject.toml b/tests/subdirectory/pyproject.toml new file mode 100644 index 000000000..d7a9dc61a --- /dev/null +++ b/tests/subdirectory/pyproject.toml @@ -0,0 +1,13 @@ +[tool.poetry] +name = "subdirectory-test" +version = "0.1.0" +description = "" +authors = [] + +[tool.poetry.dependencies] +python = "^3.10" +psycopg = {git = "https://github.com/psycopg/psycopg.git", rev = "3.1.10", subdirectory = "psycopg"} + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api"