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