#!/bin/bash # ================================================================= # # Authors: Just van den Broecke # # Copyright (c) 2019 Just van den Broecke # # Permission is hereby granted, free of charge, to any person # obtaining a copy of this software and associated documentation # files (the "Software"), to deal in the Software without # restriction, including without limitation the rights to use, # copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the # Software is furnished to do so, subject to the following # conditions: # # The above copyright notice and this permission notice shall be # included in all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES # OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT # HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR # OTHER DEALINGS IN THE SOFTWARE. # # ================================================================= # pygeoapi entry script echo "START /entrypoint.sh" set +e export PYGEOAPI_HOME=/pygeoapi export PYGEOAPI_CONFIG="${PYGEOAPI_HOME}/local.config.yml" export PYGEOAPI_OPENAPI="${PYGEOAPI_HOME}/local.openapi.yml" # gunicorn env settings with defaults SCRIPT_NAME=${SCRIPT_NAME:=/} CONTAINER_NAME=${CONTAINER_NAME:=pygeoapi} CONTAINER_HOST=${CONTAINER_HOST:=0.0.0.0} CONTAINER_PORT=${CONTAINER_PORT:=80} WSGI_WORKERS=${WSGI_WORKERS:=4} WSGI_WORKER_TIMEOUT=${WSGI_WORKER_TIMEOUT:=6000} WSGI_WORKER_CLASS=${WSGI_WORKER_CLASS:=gevent} # What to invoke: default is to run gunicorn server entry_cmd=${1:-run} # Shorthand function error() { echo "ERROR: $@" exit -1 } # Workdir cd ${PYGEOAPI_HOME} echo "Trying to generate openapi.yml" pygeoapi openapi generate ${PYGEOAPI_CONFIG} --output-file ${PYGEOAPI_OPENAPI} [[ $? -ne 0 ]] && error "openapi.yml could not be generated ERROR" echo "openapi.yml generated continue to pygeoapi" case ${entry_cmd} in # Run Unit tests test) for test_py in $(ls tests/test_*.py) do # Skip tests requiring backend server or libs installed case ${test_py} in tests/test_elasticsearch__provider.py) ;& tests/test_sensorthings_provider.py) ;& tests/test_postgresql_provider.py) ;& tests/test_mongo_provider.py) echo "Skipping: ${test_py}" ;; *) python3 -m pytest ${test_py} ;; esac done ;; # Run pygeoapi server run) # SCRIPT_NAME should not have value '/' [[ "${SCRIPT_NAME}" = '/' ]] && export SCRIPT_NAME="" && echo "make SCRIPT_NAME empty from /" echo "Start gunicorn name=${CONTAINER_NAME} on ${CONTAINER_HOST}:${CONTAINER_PORT} with ${WSGI_WORKERS} workers and SCRIPT_NAME=${SCRIPT_NAME}" exec gunicorn --workers ${WSGI_WORKERS} \ --worker-class=${WSGI_WORKER_CLASS} \ --timeout ${WSGI_WORKER_TIMEOUT} \ --name=${CONTAINER_NAME} \ --bind ${CONTAINER_HOST}:${CONTAINER_PORT} \ pygeoapi.flask_app:APP ;; *) error "unknown command arg: must be run (default) or test" ;; esac echo "END /entrypoint.sh"