1{
2 lib,
3 buildPythonPackage,
4 fetchFromGitHub,
5 pythonRelaxDepsHook,
6 pytestCheckHook,
7 hatchling,
8 argostranslate,
9 flask,
10 flask-swagger,
11 flask-swagger-ui,
12 flask-limiter,
13 flask-babel,
14 flask-session,
15 waitress,
16 expiringdict,
17 langdetect,
18 lexilang,
19 ltpycld2,
20 morfessor,
21 appdirs,
22 apscheduler,
23 translatehtml,
24 argos-translate-files,
25 requests,
26 redis,
27 prometheus-client,
28 polib,
29 python,
30}:
31
32buildPythonPackage rec {
33 pname = "libretranslate";
34 version = "1.5.7";
35 pyproject = true;
36
37 src = fetchFromGitHub {
38 owner = "LibreTranslate";
39 repo = "LibreTranslate";
40 rev = "refs/tags/v${version}";
41 hash = "sha256-lOVi/809ig+KtiNwdt9Wovn+2Q8I6amps1sZ5JJy7WE=";
42 };
43
44 build-system = [
45 hatchling
46 pythonRelaxDepsHook
47 ];
48
49 pythonRelaxDeps = true;
50
51 dependencies = [
52 argostranslate
53 flask
54 flask-swagger
55 flask-swagger-ui
56 flask-limiter
57 flask-babel
58 flask-session
59 waitress
60 expiringdict
61 langdetect
62 lexilang
63 ltpycld2
64 morfessor
65 appdirs
66 apscheduler
67 translatehtml
68 argos-translate-files
69 requests
70 redis
71 prometheus-client
72 polib
73 ];
74
75 postInstall = ''
76 # expose static files to be able to serve them via web-server
77 mkdir -p $out/share/libretranslate
78 ln -s $out/${python.sitePackages}/libretranslate/static $out/share/libretranslate/static
79 '';
80
81 doCheck = false; # needs network access
82
83 nativeCheckInputs = [ pytestCheckHook ];
84
85 # required for import check to work (argostranslate)
86 env.HOME = "/tmp";
87
88 pythonImportsCheck = [ "libretranslate" ];
89
90 meta = with lib; {
91 description = "Free and Open Source Machine Translation API. Self-hosted, no limits, no ties to proprietary services";
92 homepage = "https://libretranslate.com";
93 changelog = "https://github.com/LibreTranslate/LibreTranslate/releases/tag/v${version}";
94 license = licenses.agpl3Only;
95 maintainers = with maintainers; [ misuzu ];
96 };
97}