2018-10-30 13:30:46 +00:00
# GOV.UK Notify API
2015-11-20 10:51:08 +00:00
2018-10-30 13:30:46 +00:00
Contains:
- the public-facing REST API for GOV.UK Notify, which teams can integrate with using [our clients ](https://www.notifications.service.gov.uk/documentation )
- an internal-only REST API built using Flask to manage services, users, templates, etc (this is what the [admin app ](http://github.com/alphagov/notifications-admin ) talks to)
- asynchronous workers built using Celery to put things on queues and read them off to be processed, sent to providers, updated, etc
2015-11-20 10:51:08 +00:00
2016-10-04 15:09:58 +01:00
## Setting Up
2018-10-30 13:33:56 +00:00
### Python version
2021-11-10 14:05:17 +00:00
We run python 3.9 both locally and in production.
2018-10-30 13:33:56 +00:00
2021-11-15 15:21:09 +00:00
### pycurl
See https://github.com/alphagov/notifications-manuals/wiki/Getting-started#pycurl
2016-10-04 15:09:58 +01:00
### AWS credentials
2016-10-04 11:12:55 +01:00
2021-02-17 16:56:20 +00:00
To run the API you will need appropriate AWS credentials. See the [Wiki ](https://github.com/alphagov/notifications-manuals/wiki/aws-accounts#how-to-set-up-local-development ) for more details.
2016-10-04 15:09:58 +01:00
2018-07-30 15:25:48 +01:00
### `environment.sh`
2016-10-04 15:09:58 +01:00
2021-02-17 17:04:28 +00:00
Creating and edit an environment.sh file.
2016-02-17 10:20:40 +00:00
2016-02-16 15:25:46 +00:00
```
2016-02-17 09:49:36 +00:00
echo "
2016-10-04 15:09:58 +01:00
export NOTIFY_ENVIRONMENT='development'
2018-02-21 18:12:03 +00:00
2016-09-07 09:35:31 +01:00
export MMG_API_KEY='MMG_API_KEY'
2016-10-04 15:09:58 +01:00
export FIRETEXT_API_KEY='FIRETEXT_ACTUAL_KEY'
export NOTIFICATION_QUEUE_PREFIX='YOUR_OWN_PREFIX'
2018-02-21 18:12:03 +00:00
2017-11-06 12:34:29 +00:00
export FLASK_APP=application.py
2021-02-18 09:10:13 +00:00
export FLASK_ENV=development
2017-11-06 12:34:29 +00:00
export WERKZEUG_DEBUG_PIN=off
2016-02-17 09:49:36 +00:00
"> environment.sh
```
2021-02-17 17:04:28 +00:00
Things to change:
* Replace `YOUR_OWN_PREFIX` with `local_dev_<first name>` .
* Run the following in the credentials repo to get the API keys.
2016-02-17 10:20:40 +00:00
2021-02-17 17:04:28 +00:00
```
2022-02-07 10:46:05 +00:00
notify-pass credentials/firetext
notify-pass credentials/mmg
2021-02-17 17:04:28 +00:00
```
2016-02-23 12:28:10 +00:00
2016-10-04 15:09:58 +01:00
### Postgres
2016-10-04 11:12:55 +01:00
2021-02-18 15:19:40 +00:00
Install [Postgres.app ](http://postgresapp.com/ ).
2016-02-23 12:28:10 +00:00
2021-02-18 15:19:40 +00:00
Currently the API works with PostgreSQL 11. After installation, open the Postgres app, open the sidebar, and update or replace the default server with a compatible version.
**Note:** you may need to add the following directory to your PATH in order to bootstrap the app.
```
export PATH=${PATH}:/Applications/Postgres.app/Contents/Versions/11/bin/
```
2018-11-07 16:33:22 +00:00
2016-12-02 10:09:36 +00:00
### Redis
2016-12-02 10:11:31 +00:00
To switch redis on you'll need to install it locally. On a OSX we've used brew for this. To use redis caching you need to switch it on by changing the config for development:
REDIS_ENABLED = True
2016-12-02 10:09:36 +00:00
2016-02-23 12:28:10 +00:00
## To run the application
```
2021-02-17 17:06:58 +00:00
# install dependencies, etc.
2021-02-17 17:22:45 +00:00
make bootstrap
2021-02-17 17:06:58 +00:00
# run the web app
2021-02-17 16:49:05 +00:00
make run-flask
2016-02-23 12:28:10 +00:00
2021-02-17 17:06:58 +00:00
# run the background tasks
2021-02-17 16:49:05 +00:00
make run-celery
2016-02-23 12:28:10 +00:00
2021-02-17 17:06:58 +00:00
# run scheduled tasks (optional)
2021-02-17 16:49:05 +00:00
make run-celery-beat
2016-03-18 12:58:17 +00:00
```
2016-05-11 15:52:49 +01:00
2016-08-24 14:30:46 +01:00
## To test the application
```
2021-02-17 17:06:58 +00:00
# install dependencies, etc.
2021-02-17 17:22:45 +00:00
make bootstrap
2021-02-17 17:06:58 +00:00
2016-08-24 14:30:46 +01:00
make test
```
2017-11-22 16:36:09 +00:00
## To run one off tasks
2016-05-11 15:52:49 +01:00
2017-11-22 16:36:09 +00:00
Tasks are run through the `flask` command - run `flask --help` for more information. There are two sections we need to
care about: `flask db` contains alembic migration commands, and `flask command` contains all of our custom commands. For
example, to purge all dynamically generated functional test data, do the following:
2016-05-11 15:52:49 +01:00
Locally
```
2017-11-22 16:36:09 +00:00
flask command purge_functional_test_data -u <functional tests user name prefix>
2016-05-11 15:52:49 +01:00
```
On the server
```
2017-11-22 16:36:09 +00:00
cf run-task notify-api "flask command purge_functional_test_data -u <functional tests user name prefix>"
2016-05-11 15:52:49 +01:00
```
2017-11-22 16:36:09 +00:00
All commands and command options have a --help command if you need more information.
2018-03-08 14:02:08 +00:00
2021-09-15 15:33:42 +01:00
## Further documentation
2018-03-08 14:02:08 +00:00
2021-09-15 17:09:04 +01:00
- [Writing public APIs ](docs/writing-public-apis.md )
2021-12-29 14:59:38 +00:00
- [Updating dependencies ](https://github.com/alphagov/notifications-manuals/wiki/Dependencies )