e11sync-backend.nix (2020B) - Raw
1 { 2 lib, 3 stdenvNoCC, 4 runCommand, 5 makeWrapper, 6 python3, 7 libmaxminddb, 8 uwsgi, 9 backendPort ? 8002, 10 databasePath ? null, 11 geoip-mmdb, 12 e11sync-djangostatic, 13 }: let 14 uwsgi-python = uwsgi.override {plugins = ["python3"];}; 15 pythonEnv = python3.withPackages (ps: [ps.django ps.geoip2]); 16 in 17 stdenvNoCC.mkDerivation { 18 name = "e11sync-backend"; 19 propagatedBuildInputs = [ 20 pythonEnv 21 libmaxminddb 22 ]; 23 nativeBuildInputs = [makeWrapper]; 24 src = ../app; 25 patchPhase = ''patchShebangs --build manage.py''; 26 buildPhase = ''mkdir -p $out''; 27 installPhase = '' 28 cp -r . $out/app 29 makeWrapper $out/app/manage.py $out/bin/e11sync \ 30 ${lib.optionalString (databasePath != null) '' 31 --set E11SYNC_DATABASE_PATH "${databasePath}" \ 32 ''} \ 33 --set GEOIP_PATH "${geoip-mmdb}" 34 35 makeWrapper ${uwsgi-python}/bin/uwsgi $out/bin/e11sync-backend \ 36 --chdir $out/app \ 37 --set-default E11SYNC_HTTP_PORT ${toString backendPort} \ 38 --add-flags "--need-plugin ${uwsgi-python}/lib/uwsgi/python3_plugin.so" \ 39 --add-flags "--python-path ${pythonEnv}/lib/${pythonEnv.libPrefix}/site-packages" \ 40 --add-flags "--http-socket 127.0.0.1:${toString backendPort}" \ 41 --add-flags "--wsgi-file e11sync/wsgi.py" \ 42 --add-flags "--master --need-app" \ 43 ${lib.optionalString (databasePath != null) '' 44 --set E11SYNC_DATABASE_PATH "${databasePath}" \ 45 ''} \ 46 --set E11SYNC_STATIC_ROOT "${e11sync-djangostatic.passthru.manifest}" \ 47 --set E11SYNC_DEBUG "" \ 48 --set GEOIP_PATH "${geoip-mmdb}" \ 49 ''; 50 passthru.tests.unit = 51 runCommand "e11sync-test" { 52 srcs = ../app; 53 buildInputs = [pythonEnv]; 54 } '' 55 unpackPhase 56 patchShebangs --build app/manage.py 57 export GEOIP_PATH="${geoip-mmdb}" 58 export E11SYNC_STATIC_ROOT="${e11sync-djangostatic.passthru.manifest}" 59 app/manage.py test app 60 mkdir -p $out 61 ''; 62 }