uwsgi service: use python.buildEnv, fix PATH

This commit is contained in:
Nikolay Amiantov 2016-03-21 18:46:26 +03:00
parent ea5c7d553c
commit 25754a5fc2

View File

@ -32,17 +32,27 @@ let
self = pythonPackages; self = pythonPackages;
}; };
json = builtins.toJSON { penv = python.buildEnv.override {
extraLibs = (c.pythonPackages or (self: [])) pythonPackages;
};
uwsgiCfg = {
uwsgi = uwsgi =
if c.type == "normal" if c.type == "normal"
then { then {
inherit plugins; inherit plugins;
} // removeAttrs c [ "type" "pythonPackages" ] } // removeAttrs c [ "type" "pythonPackages" ]
// optionalAttrs (python != null) { // optionalAttrs (python != null) {
pythonpath = "@PYTHONPATH@"; pythonpath = "${penv}/${python.sitePackages}";
env = (c.env or {}) // { env =
PATH = optionalString (c ? env.PATH) "${c.env.PATH}:" + "@PATH@"; # Argh, uwsgi expects list of key-values there instead of a dictionary.
}; let env' = c.env or [];
getPath =
x: if hasPrefix "PATH=" x
then substring (stringLength "PATH=") (stringLength x) x
else null;
oldPaths = filter (x: x != null) (map getPath env');
in env' ++ [ "PATH=${optionalString (oldPaths != []) "${last oldPaths}:"}${penv}/bin" ];
} }
else if c.type == "emperor" else if c.type == "emperor"
then { then {
@ -55,35 +65,7 @@ let
else throw "`type` attribute in UWSGI configuration should be either 'normal' or 'emperor'"; else throw "`type` attribute in UWSGI configuration should be either 'normal' or 'emperor'";
}; };
in in pkgs.writeTextDir "${name}.json" (builtins.toJSON uwsgiCfg);
if python == null || c.type != "normal"
then pkgs.writeTextDir "${name}.json" json
else pkgs.stdenv.mkDerivation {
name = "uwsgi-config";
inherit json;
passAsFile = [ "json" ];
nativeBuildInputs = [ pythonPackages.wrapPython ];
pythonInputs = (c.pythonPackages or (self: [])) pythonPackages;
buildCommand = ''
mkdir $out
declare -A pythonPathsSeen=()
program_PYTHONPATH=
program_PATH=
if [ -n "$pythonInputs" ]; then
for i in $pythonInputs; do
_addToPythonPath $i
done
fi
# A hack to replace "@PYTHONPATH@" with a JSON list
if [ -n "$program_PYTHONPATH" ]; then
program_PYTHONPATH="\"''${program_PYTHONPATH//:/\",\"}\""
fi
substitute $jsonPath $out/${name}.json \
--replace '"@PYTHONPATH@"' "[$program_PYTHONPATH]" \
--subst-var-by PATH "$program_PATH"
'';
};
in { in {