croc: 10.1.1 -> 10.1.3 (#364662)
[NixPkgs.git] / pkgs / development / python-modules / spacy / models.nix
bloba8e99669b4489366492b1f5666fb66e18a8563b4
2   lib,
3   buildPythonPackage,
4   fetchurl,
5   protobuf,
6   pymorphy3,
7   pymorphy3-dicts-uk,
8   sentencepiece,
9   setuptools,
10   spacy,
11   spacy-pkuseg,
12   spacy-transformers,
13   writeScript,
14   stdenv,
15   jq,
16   nix,
17   moreutils,
19 let
20   buildModelPackage =
21     {
22       pname,
23       version,
24       sha256,
25       license,
26     }:
28     let
29       lang = builtins.substring 0 2 pname;
30       requires-protobuf = pname == "fr_dep_news_trf" || pname == "uk_core_news_trf";
31     in
32     buildPythonPackage {
33       inherit pname version;
34       pyproject = true;
36       src = fetchurl {
37         url = "https://github.com/explosion/spacy-models/releases/download/${pname}-${version}/${pname}-${version}.tar.gz";
38         inherit sha256;
39       };
41       propagatedBuildInputs =
42         [ spacy ]
43         ++ lib.optionals (lib.hasSuffix "_trf" pname) [ spacy-transformers ]
44         ++ lib.optionals (lang == "ru") [ pymorphy3 ]
45         ++ lib.optionals (lang == "uk") [
46           pymorphy3
47           pymorphy3-dicts-uk
48         ]
49         ++ lib.optionals (lang == "zh") [ spacy-pkuseg ]
50         ++ lib.optionals (pname == "fr_dep_news_trf") [ sentencepiece ];
52       postPatch = lib.optionalString requires-protobuf ''
53         substituteInPlace meta.json \
54           --replace "protobuf<3.21.0" "protobuf"
55       '';
57       nativeBuildInputs = [ setuptools ] ++ lib.optionals requires-protobuf [ protobuf ];
59       pythonImportsCheck = [ pname ];
61       passthru.updateScript = writeScript "update-spacy-models" ''
62         #!${stdenv.shell}
63         set -eou pipefail
64         PATH=${
65           lib.makeBinPath [
66             jq
67             nix
68             moreutils
69           ]
70         }
72         IFS=. read -r major minor patch <<<"${spacy.version}"
73         spacyVersion="$(echo "$major.$minor.0")"
75         pushd pkgs/development/python-modules/spacy/ || exit
77         jq -r '.[] | .pname' models.json | while IFS= read -r pname; do
78           if [ "$(jq --arg pname "$pname" -r '.[] | select(.pname == $pname) | .version' models.json)" == "$spacyVersion" ]; then
79             continue
80           fi
82           newHash="$(nix-prefetch-url "https://github.com/explosion/spacy-models/releases/download/$pname-$spacyVersion/$pname-$spacyVersion.tar.gz")"
83           jq --arg newHash "$newHash" --arg pname "$pname" --arg spacyVersion "$spacyVersion" \
84            '[(.[] | select(.pname != $pname)), (.[] | select(.pname == $pname) | .sha256 = $newHash | .version = $spacyVersion)] | sort_by(.pname)' \
85            models.json | sponge models.json
86         done
88         popd || exit
89       '';
91       meta = {
92         description = "Models for the spaCy NLP library";
93         homepage = "https://github.com/explosion/spacy-models";
94         license = lib.licenses.${license};
95       };
96     };
98   makeModelSet =
99     models: lib.listToAttrs (map (m: lib.nameValuePair m.pname (buildModelPackage m)) models);
101 makeModelSet (lib.importJSON ./models.json)