Properly fetch sdists with extension

This commit is contained in:
adisbladis 2019-06-24 16:23:02 +01:00
parent b4abe49e04
commit e0e2a3f659
No known key found for this signature in database
GPG key ID: 110BFAD44C6249B7
6 changed files with 73 additions and 14 deletions

9
Makefile Normal file
View file

@ -0,0 +1,9 @@
.PHONY: all generate
all: generate test
generate:
./generate.py
test:
nix-shell -p python3Packages.flake8 --run 'flake8 ./*.py'

View file

@ -8,6 +8,7 @@ Need to filter out certain deps like enum34
*** TODO Lock file hashes not distinguishable by origin *** TODO Lock file hashes not distinguishable by origin
Reported upstream at https://github.com/sdispater/poetry/issues/1172 and fixed in https://github.com/sdispater/poetry/pull/1183 Reported upstream at https://github.com/sdispater/poetry/issues/1172 and fixed in https://github.com/sdispater/poetry/pull/1183
This branch depends on upstream PR #1183.
*** TODO Non-pypi dependencies *** TODO Non-pypi dependencies
Not implemented at all currently Not implemented at all currently

View file

@ -12,6 +12,11 @@ let
then builtins.getAttr attribute set then builtins.getAttr attribute set
else default; else default;
extensions = pkgs.lib.importJSON ./extensions.json;
getExtension = filename: builtins.elemAt
(builtins.filter (ext: builtins.match "^.*\.${ext}" filename != null) extensions)
0;
defaultPoetryOverrides = import ./overrides.nix { inherit pkgs; }; defaultPoetryOverrides = import ./overrides.nix { inherit pkgs; };
mkPoetryPackage = { mkPoetryPackage = {
@ -19,9 +24,6 @@ let
pyproject ? src + "/pyproject.toml", pyproject ? src + "/pyproject.toml",
poetrylock ? src + "/poetry.lock", poetrylock ? src + "/poetry.lock",
overrides ? defaultPoetryOverrides, overrides ? defaultPoetryOverrides,
buildInputs ? [ ],
checkInputs ? [ ],
propagatedBuildInputs ? [ ],
... ...
}@attrs: let }@attrs: let
pyProject = importTOML pyproject; pyProject = importTOML pyproject;
@ -51,12 +53,13 @@ let
src = let src = let
files = getAttrDefault "files" pkgMeta []; files = getAttrDefault "files" pkgMeta [];
files_sdist = builtins.filter (f: f.packagetype == "sdist") files; files_sdist = builtins.filter (f: f.packagetype == "sdist") files;
files_tar = builtins.filter (f: (builtins.match "^.*?tar.gz$" f.name) != null) files_sdist; # Grab the first sdist, we dont care about which one
file = assert builtins.length files_tar == 1; builtins.elemAt files_tar 0; file = assert builtins.length files_sdist >= 1; builtins.elemAt files_sdist 0;
in self.fetchPypi { in self.fetchPypi {
pname = pkgMeta.name; pname = pkgMeta.name;
version = pkgMeta.version; version = pkgMeta.version;
sha256 = file.hash; sha256 = file.hash;
extension = getExtension file.name;
}; };
}; };
@ -82,27 +85,30 @@ let
}).pkgs; }).pkgs;
getDeps = deps: let getDeps = depAttr: let
deps = builtins.getAttr depAttr pyProject.tool.poetry;
depAttrs = builtins.attrNames deps; depAttrs = builtins.attrNames deps;
in builtins.map (dep: pythonPackages."${dep}") depAttrs; in builtins.map (dep: pythonPackages."${dep}") depAttrs;
getInputs = attr: getAttrDefault attr attrs [];
mkInput = attr: extraInputs: getInputs attr ++ extraInputs;
in pythonPackages.buildPythonApplication (passedAttrs // { in pythonPackages.buildPythonApplication (passedAttrs // {
pname = pyProject.tool.poetry.name; pname = pyProject.tool.poetry.name;
version = pyProject.tool.poetry.version; version = pyProject.tool.poetry.version;
format = "pyproject"; format = "pyproject";
buildInputs = [ pythonPackages.poetry ] buildInputs = mkInput "buildInputs" ([ pythonPackages.poetry ]);
++ buildInputs; propagatedBuildInputs = mkInput "propagatedBuildInputs" (getDeps "dependencies");
checkInputs = mkInput "checkInputs" (getDeps "dev-dependencies");
propagatedBuildInputs = getDeps pyProject.tool.poetry.dependencies passthru = {
++ propagatedBuildInputs; inherit pythonPackages;
};
checkInputs = getDeps pyProject.tool.poetry.dev-dependencies
++ checkInputs;
meta = { meta = {
description = pyProject.tool.poetry.description; inherit (pyProject.tool.poetry) description;
licenses = [ pyProject.tool.poetry.license ]; licenses = [ pyProject.tool.poetry.license ];
}; };

14
extensions.json Normal file
View file

@ -0,0 +1,14 @@
[
"tar",
"tar.bz2",
"tar.gz",
"tar.lz",
"tar.lzma",
"tar.xz",
"tbz",
"tgz",
"tlz",
"txz",
"whl",
"zip"
]

14
generate.py Executable file
View file

@ -0,0 +1,14 @@
#!/usr/bin/env nix-shell
#! nix-shell -i python3 -p python3Packages.poetry
# Run code generation used by poetry2nix
from poetry.packages.utils.utils import SUPPORTED_EXTENSIONS
import json
EXT_FILE = 'extensions.json'
if __name__ == '__main__':
with open(EXT_FILE, 'w') as f:
ext = sorted(ext.lstrip('.') for ext in SUPPORTED_EXTENSIONS)
f.write(json.dumps(ext, indent=2))

View file

@ -38,6 +38,21 @@ in {
jsonschema = addSetupTools; jsonschema = addSetupTools;
python-dateutil = addSetupTools;
numpy = self: super: drv: drv.overrideAttrs(old: {
nativeBuildInputs = old.nativeBuildInputs ++ [ pkgs.gfortran ];
buildInputs = old.buildInputs ++ [ pkgs.openblasCompat ];
# inherit (super.numpy) preConfigure preBuild enableParallelBuilding;
});
shapely = self: super: drv: drv.overrideAttrs(old: {
buildInputs = old.buildInputs ++ [ pkgs.geos self.cython ];
inherit (super.shapely) patches GEOS_LIBRARY_PATH;
});
lockfile = self: super: drv: drv.overrideAttrs(old: { lockfile = self: super: drv: drv.overrideAttrs(old: {
propagatedBuildInputs = old.propagatedBuildInputs ++ [ self.pbr ]; propagatedBuildInputs = old.propagatedBuildInputs ++ [ self.pbr ];
}); });