1{ lib
2, buildPythonPackage
3, callPackage
4, pythonOlder
5, fetchFromGitHub
6, Babel
7, gruut-ipa
8, jsonlines
9, num2words
10, python-crfsuite
11, dataclasses
12, python
13}:
14
15let
16 langPkgs = [
17 "cs"
18 "de"
19 "es"
20 "fr"
21 "it"
22 "nl"
23 "pt"
24 "ru"
25 "sv"
26 "sw"
27 ];
28in
29buildPythonPackage rec {
30 pname = "gruut";
31 version = "1.2.3";
32 format = "setuptools";
33
34 src = fetchFromGitHub {
35 owner = "rhasspy";
36 repo = pname;
37 rev = "v${version}";
38 sha256 = "sha256-qY4xsoVk1hyY9dYmVXaqDRjcShUQmp8VZOzAQNiC6EM=";
39 };
40
41 postPatch = ''
42 substituteInPlace requirements.txt \
43 --replace "Babel~=2.8.0" "Babel"
44 '';
45
46 propagatedBuildInputs = [
47 Babel
48 gruut-ipa
49 jsonlines
50 num2words
51 python-crfsuite
52 ] ++ lib.optionals (pythonOlder "3.7") [
53 dataclasses
54 ] ++ (map (lang: callPackage ./language-pack.nix {
55 inherit lang version format src;
56 }) langPkgs);
57
58 checkPhase = ''
59 runHook preCheck
60 ${python.interpreter} -m unittest discover
61 runHook postCheck
62 '';
63
64 pythonImportsCheck = [
65 "gruut"
66 ];
67
68 meta = with lib; {
69 description = "A tokenizer, text cleaner, and phonemizer for many human languages";
70 homepage = "https://github.com/rhasspy/gruut";
71 license = licenses.mit;
72 maintainers = teams.tts.members;
73 };
74}