1{
2 lib,
3 pkgs,
4 buildPythonPackage,
5 fetchFromGitHub,
6 pytestCheckHook,
7 runCommand,
8 hatchling,
9 argostranslate,
10 flask,
11 flask-swagger,
12 flask-swagger-ui,
13 flask-limiter,
14 flask-babel,
15 flask-session,
16 waitress,
17 expiringdict,
18 langdetect,
19 lexilang,
20 libretranslate,
21 ltpycld2,
22 morfessor,
23 appdirs,
24 apscheduler,
25 translatehtml,
26 argos-translate-files,
27 requests,
28 redis,
29 prometheus-client,
30 polib,
31 python,
32 xorg,
33}:
34
35buildPythonPackage rec {
36 pname = "libretranslate";
37 version = "1.7.3";
38 pyproject = true;
39
40 src = fetchFromGitHub {
41 owner = "LibreTranslate";
42 repo = "LibreTranslate";
43 tag = "v${version}";
44 hash = "sha256-eX/CZlHqUkarrilE4UoTMF8U/b7hn6F3nMxYnDPQ238=";
45 };
46
47 build-system = [
48 hatchling
49 ];
50
51 pythonRelaxDeps = true;
52
53 dependencies = [
54 argostranslate
55 flask
56 flask-swagger
57 flask-swagger-ui
58 flask-limiter
59 flask-babel
60 flask-session
61 waitress
62 expiringdict
63 langdetect
64 lexilang
65 ltpycld2
66 morfessor
67 appdirs
68 apscheduler
69 translatehtml
70 argos-translate-files
71 requests
72 redis
73 prometheus-client
74 polib
75 ];
76
77 postInstall = ''
78 # expose static files to be able to serve them via web-server
79 mkdir -p $out/share/libretranslate
80 ln -s $out/${python.sitePackages}/libretranslate/static $out/share/libretranslate/static
81 '';
82
83 doCheck = false; # needs network access
84
85 nativeCheckInputs = [ pytestCheckHook ];
86
87 # required for import check to work (argostranslate)
88 env.HOME = "/tmp";
89
90 pythonImportsCheck = [ "libretranslate" ];
91
92 passthru = {
93 static-compressed =
94 runCommand "libretranslate-data-compressed"
95 {
96 nativeBuildInputs = [
97 pkgs.brotli
98 xorg.lndir
99 ];
100 }
101 ''
102 mkdir -p $out/share/libretranslate/static
103 lndir ${libretranslate}/share/libretranslate/static $out/share/libretranslate/static
104
105 # Create static gzip and brotli files
106 find -L $out -type f -regextype posix-extended -iregex '.*\.(css|ico|js|svg|ttf)' \
107 -exec gzip --best --keep --force {} ';' \
108 -exec brotli --best --keep --no-copy-stat {} ';'
109 '';
110 };
111
112 meta = with lib; {
113 description = "Free and Open Source Machine Translation API. Self-hosted, no limits, no ties to proprietary services";
114 homepage = "https://libretranslate.com";
115 changelog = "https://github.com/LibreTranslate/LibreTranslate/releases/tag/${src.tag}";
116 license = licenses.agpl3Only;
117 maintainers = with maintainers; [ misuzu ];
118 };
119}