summary refs log tree commit diff
path: root/pkgs/development/python-modules/spacy/models.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/python-modules/spacy/models.nix')
-rw-r--r--pkgs/development/python-modules/spacy/models.nix88
1 files changed, 59 insertions, 29 deletions
diff --git a/pkgs/development/python-modules/spacy/models.nix b/pkgs/development/python-modules/spacy/models.nix
index 0e0f1f19640..4110e157d62 100644
--- a/pkgs/development/python-modules/spacy/models.nix
+++ b/pkgs/development/python-modules/spacy/models.nix
@@ -6,42 +6,72 @@
 , sentencepiece
 , spacy
 , spacy-pkuseg
-, spacy-transformers }:
+, spacy-transformers
+, writeScript
+, stdenv
+, jq
+, nix
+, moreutils
+}:
 let
   buildModelPackage = { pname, version, sha256, license }:
-  let
-    lang = builtins.substring 0 2 pname;
-  in buildPythonPackage {
-    inherit pname version;
-
-    src = fetchurl {
-      url = "https://github.com/explosion/spacy-models/releases/download/${pname}-${version}/${pname}-${version}.tar.gz";
-      inherit sha256;
-    };
+    let
+      lang = builtins.substring 0 2 pname;
+    in
+    buildPythonPackage {
+      inherit pname version;
+
+      src = fetchurl {
+        url = "https://github.com/explosion/spacy-models/releases/download/${pname}-${version}/${pname}-${version}.tar.gz";
+        inherit sha256;
+      };
+
+      propagatedBuildInputs = [ spacy ]
+        ++ lib.optionals (lang == "zh") [ jieba spacy-pkuseg ]
+        ++ lib.optionals (lib.hasSuffix "_trf" pname) [ spacy-transformers ]
+        ++ lib.optionals (lang == "ru") [ pymorphy2 ]
+        ++ lib.optionals (pname == "fr_dep_news_trf") [ sentencepiece ];
+
+      postPatch = lib.optionalString (pname == "fr_dep_news_trf") ''
+        substituteInPlace meta.json \
+          --replace "sentencepiece==0.1.91" "sentencepiece>=0.1.91"
+      '';
+
+      pythonImportsCheck = [ pname ];
 
-    propagatedBuildInputs = [ spacy ]
-      ++ lib.optionals (lang == "zh") [ jieba spacy-pkuseg ]
-      ++ lib.optionals (lib.hasSuffix "_trf" pname) [ spacy-transformers ]
-      ++ lib.optionals (lang == "ru") [ pymorphy2 ]
-      ++ lib.optionals (pname == "fr_dep_news_trf") [ sentencepiece ];
+      passthru.updateScript = writeScript "update-spacy-models" ''
+        #!${stdenv.shell}
+        set -eou pipefail
+        PATH=${lib.makeBinPath [ jq nix moreutils ]}
 
-    postPatch = lib.optionalString (pname == "fr_dep_news_trf") ''
-      substituteInPlace meta.json \
-        --replace "sentencepiece==0.1.91" "sentencepiece>=0.1.91"
-    '';
+        IFS=. read -r major minor patch <<<"${spacy.version}"
+        spacyVersion="$(echo "$major.$minor.0")"
 
-    pythonImportsCheck = [ pname ];
+        pushd pkgs/development/python-modules/spacy/ || exit
 
-    meta = with lib; {
-      description = "Models for the spaCy NLP library";
-      homepage    = "https://github.com/explosion/spacy-models";
-      license     = licenses.${license};
-      maintainers = with maintainers; [ rvl ];
+        jq -r '.[] | .pname' models.json | while IFS= read -r pname; do
+          if [ "$(jq --arg pname "$pname" -r '.[] | select(.pname == $pname) | .version' models.json)" == "$spacyVersion" ]; then
+            continue
+          fi
+
+          newHash="$(nix-prefetch-url "https://github.com/explosion/spacy-models/releases/download/$pname-$spacyVersion/$pname-$spacyVersion.tar.gz")"
+          jq --arg newHash "$newHash" --arg pname "$pname" --arg spacyVersion "$spacyVersion" \
+           '[(.[] | select(.pname != $pname)), (.[] | select(.pname == $pname) | .sha256 = $newHash | .version = $spacyVersion)] | sort_by(.pname)' \
+           models.json | sponge models.json
+        done
+
+        popd || exit
+      '';
+
+      meta = with lib; {
+        description = "Models for the spaCy NLP library";
+        homepage = "https://github.com/explosion/spacy-models";
+        license = licenses.${license};
+        maintainers = with maintainers; [ rvl ];
+      };
     };
-  };
 
   makeModelSet = models: with lib; listToAttrs (map (m: nameValuePair m.pname (buildModelPackage m)) models);
 
-in makeModelSet (lib.importJSON ./models.json)
-
-# cat models.json | jq -r '.[] | @uri "https://github.com/explosion/spacy-models/releases/download/\(.pname)-\(.version)/\(.pname)-\(.version).tar.gz"' | xargs -n1 nix-prefetch-url
+in
+makeModelSet (lib.importJSON ./models.json)