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
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
Not implemented at all currently

View file

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