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}