Skeleton Web App
Installation Process
Clone this repository using your favorite method, then:
$ python3 -m venv compendium-v2
$ .compendium-v2/bin/activate
$ pip install -r requirements.txt
$ tox -e py39
Overview
This module implements a Flask-based webservice and in-browser React front-end.
The webservice communicates with the front end over HTTP.
Responses to valid requests are returned as JSON messages.
The server will therefore return an error unless
application/json
is in the Accept
request header field.
Configuration
This app allows specification of a few
example configuration parameters. These
parameters should be stored in a file formatted
similarly to config-example.json
, and the name
of this file should be stored in the environment
variable SETTINGS_FILENAME
when running the service.
Building the web application
For instructions on building the React frontend see <name>-webapp/README.md
.
Running this module
This module has been tested in the following execution environments:
- As an embedded Flask application. For example, the application could be launched as follows:
$ export FLASK_APP=compendium_v2.app
$ export SETTINGS_FILENAME=config-example.json
$ flask run
See https://flask.palletsprojects.com/en/2.1.x/deploying/ for best practices about running in production environments.
Importing the historical data
Pip install can use the setup.py file to register the click cli commands:
pip install --editable .
survey-publisher-v1
survey-publisher-2022
To import the 2022 data to the new datamodel for prefilling the 2023 surveys:
pip install --editable .
conversion
Creating a db migration after editing the sqlalchemy models
flask db migrate -m "description"
Then go to the created migration file to make any necessary additions, for example to migrate data.
Also see https://alembic.sqlalchemy.org/en/latest/autogenerate.html#what-does-autogenerate-detect-and-what-does-it-not-detect
Flask-migrate sets compare_type=True
by default.
Note that starting the application applies all upgrades.
This also happens when running flask db
commands such as flask db downgrade
,
so if you want to downgrade 2 or more versions you need to do so in one command, eg by specifying the revision number.
Editing a newly created survey
A new survey can be created and inspected from the survey admin page. If you need to make edits, do the following:
pip install --editable .
dump_survey_model
This will create a json dump of the new survey in the migrations/surveymodels
folder.
Create a new branch, commit this file in git, and make the edits, which should of course also be committed.
Create an empty db migration with flask db revision
, copy the upgrade command from
b3e1c5149181_insert_survey_model_2022.py
, set the year, and copy the contents of the json file into the migration.
Merge this back and deploy.