99 PYTHON_BIN=" python"
1010fi
1111
12- # If the app provides its own Procfile, let Cloud Foundry use that.
13- if [ -f " Procfile" ]; then
14- exit 0
15- # Otherwise, prefer a script named after `project.name`, then fall back to `start`.
16- elif [ -n " $PYTHON_BIN " ] && [ -f " pyproject.toml" ]; then
17- START_TARGET=$( " $PYTHON_BIN " -c '
12+ resolve_script_target () {
13+ " $PYTHON_BIN " -c '
1814import sys
1915try:
2016 import tomllib
@@ -29,25 +25,40 @@ project_name = project.get("name", "")
2925scripts = project.get("scripts", {})
3026
3127print(scripts.get(project_name) or scripts.get("start", ""))
32- ' )
33-
34- if [ -n " $START_TARGET " ]; then
35- MODULE_NAME=" ${START_TARGET%%:* } "
36- FUNCTION_NAME=" ${START_TARGET##*: } "
37- DEFAULT_WEB_PROCESS=" ${PYTHON_BIN} -c \" from ${MODULE_NAME} import ${FUNCTION_NAME} ; ${FUNCTION_NAME} ()\" "
38- elif [ -f " main.py" ]; then
39- DEFAULT_WEB_PROCESS=" ${PYTHON_BIN} main.py"
40- elif [ -f " app.py" ]; then
41- DEFAULT_WEB_PROCESS=" ${PYTHON_BIN} app.py"
42- else
43- DEFAULT_WEB_PROCESS=" ${PYTHON_BIN} -m uvicorn main:app --host 0.0.0.0 --port \$ {PORT:-8000}"
28+ '
29+ }
30+
31+ build_python_entrypoint () {
32+ local target=" $1 "
33+ local module_name=" ${target%%:* } "
34+ local function_name=" ${target##*: } "
35+ echo " ${PYTHON_BIN} -c \" from ${module_name} import ${function_name} ; ${function_name} ()\" "
36+ }
37+
38+ DEFAULT_WEB_PROCESS=" "
39+
40+ # If the app provides its own Procfile, let Cloud Foundry use that.
41+ if [ -f " Procfile" ]; then
42+ exit 0
43+ fi
44+
45+ # Prefer a script named after `project.name`, then fall back to `start`.
46+ if [ -f " pyproject.toml" ]; then
47+ SCRIPT_TARGET=" $( resolve_script_target) "
48+ if [ -n " $SCRIPT_TARGET " ]; then
49+ DEFAULT_WEB_PROCESS=" $( build_python_entrypoint " $SCRIPT_TARGET " ) "
4450 fi
45- # If pyproject.toml is missing or cannot be parsed here, fall back to common app files.
46- elif [ -f " main.py" ]; then
51+ fi
52+
53+ if [ -z " $DEFAULT_WEB_PROCESS " ] && [ -f " main.py" ]; then
4754 DEFAULT_WEB_PROCESS=" ${PYTHON_BIN} main.py"
48- elif [ -f " app.py" ]; then
55+ fi
56+
57+ if [ -z " $DEFAULT_WEB_PROCESS " ] && [ -f " app.py" ]; then
4958 DEFAULT_WEB_PROCESS=" ${PYTHON_BIN} app.py"
50- else
59+ fi
60+
61+ if [ -z " $DEFAULT_WEB_PROCESS " ]; then
5162 DEFAULT_WEB_PROCESS=" ${PYTHON_BIN} -m uvicorn main:app --host 0.0.0.0 --port \$ {PORT:-8000}"
5263fi
5364
0 commit comments