API tier for Digital Marketplace.
- Python app, based on the Flask framework
Install Virtualenv
sudo easy_install virtualenv
Bootstrap the database
make bootstrap
Install dependencies, run migrations and run the app
make run-all
Install Virtualenv
sudo easy_install virtualenv
Ensure you have Postgres running locally, and then bootstrap your development environment
make bootstrap
On Debian Jessie, the following packages are required for bootstrapping to work:
apt-get install gcc virtualenv python-dev libffi-dev libpq-dev
source ./venv/bin/activate
When new database migrations are added you can bring your local database schema up to date by running upgrade.
make run-migrations
Install new Python dependencies with pip
make requirements-dev
This will run the linter, validate the migrations and run the unit tests.
make test
To test individual parts of the test stack use the test-flake8
, test-migrations
or test-unit
targets.
Run the API with environment variables required for local development set. This will install requirements, run database migrations and run the app.
make run-all
To just run the application use the run-app
target.
By default the API runs on port 5000. Calls to the API require a valid bearer token. Tokens to be accepted can be set using the DM_AUTH_TOKENS environment variable (a colon-separated list), e.g.:
export DM_API_AUTH_TOKENS=myToken1:myToken2
If DM_API_AUTH_TOKENS
is not explicitly set then the run script sets
it to myToken
. You should include a valid token in your request headers,
e.g.:
curl -i -H "Authorization: Bearer myToken" 127.0.0.1:5000/services
requirements.txt
file is generated from the requirements-app.txt
in order to pin
versions of all nested dependencies. If requirements-app.txt
has been changed (or
we want to update the unpinned nested dependencies) requirements.txt
should be
regenerated with
make freeze-requirements
requirements.txt
should be commited alongside requirements-app.txt
changes.
After editing models.py
to add/edit/remove models for the database, you'll need to generate a new migration script.
The easiest way to do this is to run python application.py db migrate --rev-id <revision_id> -m '<description'>
. Our
revision IDs increment by 10 each time; check the output of python application.py db show
to find the current
revision. Until you run the migration to update the database state, you can delete the generated revision and
re-generate it as you need to.
To use feature flags, check out the documentation in (the README of) digitalmarketplace-utils.
./scripts/list_migrations.py
checks that there are no branches in the DB migrations and prints a
list of migration versions
python application.py list_routes
prints a full list of registered application URLs with supported HTTP methods