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