This package uses Poetry >=1.2
(documentation).
Original template repository: https://github.com/buehlefs/flask-template/
For vscode install the python extension and add the poetry venv path to the folders the python extension searches for venvs.
On linux:
{
"python.venvFolders": [
"~/.cache/pypoetry/virtualenvs"
]
}
Run poetry install
to install dependencies.
The flask dev server loads environment variables from .flaskenv
and .env
.
To override any variable create a .env
file.
Environment variables in .env
take precedence over .flaskenv
.
See the content of the .flaskenv
file for the default environment variables.
Create dev database
poetry run flask create-db
Run the development server with
poetry run flask run
Start redis instance in docker container (if not started yet) and start worker process used for executing background tasks with
poetry run invoke start-broker
poetry run invoke worker --beat --watch
pip install pydevd-pycharm~=241.18034.82
import pydevd_pycharm
pydevd_pycharm.settrace('localhost', port=1234, stdoutToServer=True, stderrToServer=True)
SQLALCHEMY_DATABASE_URI
BROKER_URL
, RESULT_BACKEND
and CELERY_QUEUE
PLUGIN_DISCOVERY_INTERVAL
, PLUGIN_BATCH_SIZE
, PLUGIN_PURGE_INTERVAL
and PLUGIN_PURGE_AFTER
QHANA_ENV_
get loaded environment into the DB without the prefixINITIAL_PLUGIN_SEEDS
and PRECONFIGURED_SERVICES
URL_MAP_FROM_LOCALHOST
and URL_MAP_TO_LOCALHOST
LOCALHOST_PROXY_PORTS
to e.g. :1234 :2345
.REVERSE_PROXY_COUNT
to the number of trusted reverse proxies (e.g. 1)UI_TEMPLATE_PATHS
(:
separated list of paths to files/folders)For a list of all dependencies with their license open http://localhost:5000/licenses/.
Configured in qhana_plugin_registry/util/config/smorest_config.py
.
To investigate the cause of a circular import you can visualize the module dependencies with the package pydeps
that
is included in the dependencies of this project.
To use pydeps
you also need to install Graphvis
.
Please refer to the installation instruction in the documentation
of pydeps
.
To create a graph of all modules use pydeps qhana_plugin_registry -o graph.svg --noshow
.
The graph will be saved as graph.svg
.
This graph can be very huge and messy.
To create a graph that is small and tidy you can render only circular dependencies with pydeps qhana_plugin_registry -o graph.svg --noshow --show-cycles
.
See https://github.com/UST-QuAntiL/qhana-plugin-registry/issues/7
This template uses the following libraries to build a rest app with a database on top of flask.
qhana_plugin_registry/__init__.py
.qhana_plugin_registry/babel.py
and babel.cfg
.\
Translation files and Folders: translations
(and messages.pot
currently in .gitignore)qhana_plugin_registry/db/models
\
Config: qhana_plugin_registry/util/config/sqlalchemy_config.py
and qhana_plugin_registry/db/db.py
migrations
qhana_plugin_registry/api
\
API Models: qhana_plugin_registry/api/v1_api/models
\
Config: qhana_plugin_registry/util/config/smorest_config.py
and qhana_plugin_registry/api/__init__.py
qhana_plugin_registry/util/config/smorest_config.py
and qhana_plugin_registry/api/jwt.py
pyproject.toml
and docs/conf.py
(toml config input is manually configured in conf.py
)docs/conf.py
(API title is read from spec)tasks.py
Additional files and folders:
default.nix
and shell.nix
\
For use with the nix ecosystem.pyproject.toml
\
Poetry package config and config for the black formatter..flaskenv
\
Environment variables loaded by the flask
command and the flask dev server..flake8
\
Config for the flake8 linter.editorconfig
tests
\
Reserved for unit tests, this template has no unit tests.instance
(in .gitignore)qhana_plugin_registry/templates
and qhana_plugin_registry/static
\
Templates and static files of the flask appdocs
\
Folder containing a sphinx documentationtypings
\
Python typing stubs for libraries that have no type information.
Mostly generated with the pylance extension of vscode.tasks.py
\
Tasks that can be executed with invoke
(see invoke tasks)Library alternatives or recommendations:
# install dependencies from lock file in a virtualenv
poetry install
# open a shell in the virtualenv
poetry shell
# update dependencies
poetry update
poetry run invoke update-dependencies # to update other dependencies in the repository
# run a command in the virtualenv (replace cmd with the command to run without quotes)
poetry run cmd
Invoke is a python tool for scripting cli commands.
It allows to define complex commands in simple python functions in the tasks.py
file.
:warning: Make sure to update the module name in tasks.py
after renaming the qhana_plugin_registry
module!
# list available commands
poetry run invoke --list
# update dependencies (requirements.txt in ./docs and licenses template)
poetry run invoke update-dependencies
# Compile the documentation
poetry run invoke doc
# Open the documentation in the default browser
poetry run invoke browse-doc
# initial
poetry run pybabel extract -F babel.cfg -o messages.pot .
# create language
poetry run pybabel init -i messages.pot -d translations -l en
# compile translations to be used
poetry run pybabel compile -d translations
# extract updated strings
poetry run pybabel update -i messages.pot -d translations
# create dev db (this will NOT run migrations!)
poetry run flask create-db
# drop dev db
poetry run flask drop-db
# create a new migration after changes in the db (Always manually review the created migration!)
poetry run flask db migrate -m "Initial migration."
# upgrade db to the newest migration
poetry run flask db upgrade
# help
poetry run flask db --help
# compile documentation
poetry run invoke doc
# Open the documentation in the default browser
poetry run invoke browse-doc
# Find reference targets defined in the documentation
poetry run invoke doc-index --filter=searchtext
# export/update requirements.txt from poetry dependencies (for readthedocs build)
poetry run invoke update-dependencies
Update the python source documentation
poetry run sphinx-apidoc --separate --force -o docs/source . ./tasks.py docs plugins migrations
rm docs/source/modules.rst # delete modules file as this repository only contains one module
Current development is supported by the Federal Ministry for Economic Affairs and Energy as part of the PlanQK project (01MK20005N).
Dies ist ein Forschungsprototyp. Die Haftung für entgangenen Gewinn, Produktionsausfall, Betriebsunterbrechung, entgangene Nutzungen, Verlust von Daten und Informationen, Finanzierungsaufwendungen sowie sonstige Vermögens- und Folgeschäden ist, außer in Fällen von grober Fahrlässigkeit, Vorsatz und Personenschäden, ausgeschlossen.
Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.