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