From cb67c624e54fadc4b47fdfa71f03c3b0fae640c3 Mon Sep 17 00:00:00 2001 From: Frederik Rietdijk Date: Thu, 21 Nov 2019 10:48:43 +0100 Subject: [PATCH] simplify fetchPypi, remove need for overrides We already have the name of the file that we need, so let's fetch it directly instead of breaking it apart first, passing it to the Nixpkgs fetchPypi, which would then put it together again. --- default.nix | 35 ++++++++++++++++++-------------- overrides.nix | 56 ++------------------------------------------------- 2 files changed, 22 insertions(+), 69 deletions(-) diff --git a/default.nix b/default.nix index 3150e30..9ac920e 100644 --- a/default.nix +++ b/default.nix @@ -14,6 +14,18 @@ let else default ); + # Fetch the artifacts from the PyPI index. + # + # Args: + # file: filename including extension + # hash: SRI hash + # kind: Language implementation and version tag https://www.python.org/dev/peps/pep-0427/#file-name-convention + fetchPypi = lib.makeOverridable ({ pname, file, hash, kind }: + pkgs.fetchurl { + url = "https://files.pythonhosted.org/packages/${kind}/${builtins.substring 0 1 file}/${pname}/${file}"; + inherit hash; + }); + getAttrPath = attrPath: set: ( builtins.foldl' (acc: v: if builtins.typeOf acc == "set" && builtins.hasAttr v acc then acc."${v}" else null) @@ -126,21 +138,14 @@ let broken = ! isCompatible python.version pkgMeta.python-versions; }; - src = - if format == "wheel" - then self.fetchPypi { - pname = pkgMeta.name; - version = pkgMeta.version; - sha256 = file.hash; - format = "wheel"; - } - else self.fetchPypi { - pname = pkgMeta.name; - version = pkgMeta.version; - sha256 = file.hash; - extension = getExtension file.file; - }; - + src = fetchPypi { + pname = pkgMeta.name; + inherit (file) file hash; + # We need to retrieve kind from the interpreter and the filename of the package + # Interpreters should declare what wheel types they're compatible with (python type + ABI) + # Here we can then choose a file based on that info. + kind = if format == "wheel" then "py2.py3" else "source"; + }; }; # Filter packages by their PEP508 markers diff --git a/overrides.nix b/overrides.nix index 2f4ca63..b92c1e8 100644 --- a/overrides.nix +++ b/overrides.nix @@ -11,23 +11,6 @@ let ]; }); - renameLiteral = pname: (self: super: drv: drv.overrideAttrs(old: { - src = old.src.override { inherit pname; }; - })); - - renameUnderscore = self: super: drv: drv.overrideAttrs(old: { - src = old.src.override { pname = builtins.replaceStrings ["-"] ["_"] old.pname; }; - }); - - renameCapital = let - capitalise = s: let - len = builtins.stringLength s; - first = lib.toUpper (builtins.substring 0 1 s); - in first + builtins.substring 1 len s; - in self: super: drv: drv.overrideAttrs(old: { - src = old.src.override { pname = capitalise old.pname; }; - }); - # Chain multiple overrides into a single one composeOverrides = overrides: (self: super: drv: builtins.foldl' (drv: override: override self super drv) drv overrides); @@ -39,8 +22,6 @@ let in { - babel = renameCapital; - django-bakery = self: super: drv: drv.overrideAttrs(old: { configurePhase = '' if ! test -e LICENSE; then @@ -49,20 +30,13 @@ in { '' + (getAttrDefault "configurePhase" old ""); }); - vat-moss = renameUnderscore; - django = composeOverrides [ - renameCapital (self: super: drv: drv.overrideAttrs(old: { propagatedNativeBuildInputs = (getAttrDefault "propagatedNativeBuildInputs" old []) ++ [ pkgs.gettext ]; })) ]; - cachecontrol = renameLiteral "CacheControl"; - - click = renameCapital; - cffi = self: super: drv: drv.overrideAttrs(old: { buildInputs = old.buildInputs ++ [ pkgs.libffi ]; }); @@ -75,20 +49,10 @@ in { buildInputs = old.buildInputs ++ [ pkgs.openssl ]; }); - django-compressor = renameUnderscore; - - django-csp = renameUnderscore; - - django-context-decorator = renameUnderscore; - - markdown = renameCapital; - markupsafe = self: super: drv: drv.overrideAttrs(old: { src = old.src.override { pname = builtins.replaceStrings [ "markupsafe" ] [ "MarkupSafe"] old.pname; }; }); - pyyaml = renameLiteral "PyYAML"; - hypothesis = addSetupTools; pillow = let @@ -98,14 +62,10 @@ in { buildInputs = with pkgs; [ freetype libjpeg zlib libtiff libwebp tcl lcms2 ] ++ old.buildInputs; }); - in composeOverrides [ renameCapital pillowOverride ]; + in pillowOverride; pytest = addSetupTools; - pyopenssl = renameLiteral "pyOpenSSL"; - - pypdf2 = renameLiteral "PyPDF2"; - pytest-mock = addSetupTools; six = addSetupTools; @@ -114,24 +74,14 @@ in { zipp = addSetupTools; - importlib-metadata = composeOverrides [ renameUnderscore addSetupTools ]; - - importlib-resources = composeOverrides [ renameUnderscore ]; - - typing-extensions = renameUnderscore; + importlib-metadata = addSetupTools; pluggy = addSetupTools; - pre-commit = renameUnderscore; - jsonschema = addSetupTools; - jinja2 = renameCapital; - python-dateutil = addSetupTools; - pygments = renameCapital; - numpy = self: super: drv: drv.overrideAttrs(old: { nativeBuildInputs = old.nativeBuildInputs ++ [ pkgs.gfortran ]; buildInputs = old.buildInputs ++ [ pkgs.openblasCompat ]; @@ -157,6 +107,4 @@ in { keyring = addSetupTools; - secretstorage = renameLiteral "SecretStorage"; - }