1{
2 lib,
3 buildPythonPackage,
4 callPackage,
5 fetchFromGitHub,
6 babel,
7 gruut-ipa,
8 dateparser,
9 jsonlines,
10 num2words,
11 python-crfsuite,
12 python,
13 networkx,
14 glibcLocales,
15 pytestCheckHook,
16}:
17
18let
19 langPkgs = [
20 "ar"
21 "cs"
22 "de"
23 "en"
24 "es"
25 "fa"
26 "fr"
27 "it"
28 "lb"
29 "nl"
30 "pt"
31 "ru"
32 "sv"
33 "sw"
34 ];
35in
36buildPythonPackage rec {
37 pname = "gruut";
38 version = "2.3.4";
39 format = "setuptools";
40
41 src = fetchFromGitHub {
42 owner = "rhasspy";
43 repo = pname;
44 rev = "refs/tags/v${version}";
45 hash = "sha256-DD7gnvH9T2R6E19+exWE7Si+XEpfh0Iy5FYbycjgzgM=";
46 };
47
48 postPatch = ''
49 substituteInPlace requirements.txt \
50 --replace "gruut_lang_en~=2.0.0" "gruut_lang_en" \
51 --replace "jsonlines~=1.2.0" "jsonlines" \
52 --replace "networkx>=2.5.0,<3.0.0" "networkx"
53 '';
54
55 propagatedBuildInputs =
56 [
57 babel
58 gruut-ipa
59 jsonlines
60 num2words
61 python-crfsuite
62 dateparser
63 networkx
64 ]
65 ++ (map (
66 lang:
67 callPackage ./language-pack.nix {
68 inherit
69 lang
70 version
71 format
72 src
73 ;
74 }
75 ) langPkgs);
76
77 nativeCheckInputs = [
78 glibcLocales
79 pytestCheckHook
80 ];
81
82 disabledTests = [
83 # https://github.com/rhasspy/gruut/issues/25
84 "test_lexicon_external"
85
86 # requires mishkal library
87 "test_fa"
88 "test_ar"
89 "test_lb"
90 ];
91
92 preCheck = ''
93 export LC_ALL=en_US.utf-8
94 '';
95
96 pythonImportsCheck = [ "gruut" ];
97
98 meta = with lib; {
99 description = "A tokenizer, text cleaner, and phonemizer for many human languages";
100 mainProgram = "gruut";
101 homepage = "https://github.com/rhasspy/gruut";
102 license = licenses.mit;
103 maintainers = teams.tts.members;
104 };
105}