A Django-powered REST API for powering the data transformation and tagging pipeline for Print & Probability, a joint project between Carnegie Mellon University and University of California San Diego to identify typesets in early modern printed books.
The frontend is powered with VueJS, and styled via vue-bootstrap.
Images are served as IIIF, currently using go-iiif-vips as it can serve both JPEG as well as TIFF images on demand.
- PostgreSQL database
- Django REST API
- IIIF image server
- Vue frontend
- nginx reverse proxy
docker-compose.yml
defines a local development environment running Postgres as well as the Django API.
You must have a .env
file in the same directory to supply configuration variables. Run cp .template.env .env
and edit the file.
The Makefile
defines almost all tasks needed for setting up and tearing down the development environment.
make
will start up the service, which includes building the docker images if needed, creating a blank database pp
in Postgres if it does not yet exist, and then starting the Django application to listen on http://localhost:80/api/
. Most other make tasks require the service to be running in order to work. make down
will shut down the containers and remove the Docker network (but data in the associated volumes will persist.)
When building the service for the first time in your local development environment, also run make redeploy
once the system is running, in order to copy all the static files (html, css, and js) that Django uses to the correct Docker volume. This is only necessary on first startup - as long as you keep the docker volumes, the static files will stay in place in between invocations of make
and make down
make loadtest
/make dumptest
loads and outputs test data defined in app/pp/fixtures/test.json
. This test data has fake values for most fields, so note that the tif
paths for images in the test data are not valid URLs and will display locally as broken.
To access the API, log in to the test account at http://localhost/api/auth/login
:
username: root
password: print&probability
make wipe
will drop the current database and recreate it, re-running migrations to create the necessary tables.
make redeploy
will run all migrations against the current DB, and will refresh all static assets.
To run Django other management commands such as creating and running migrations, make attach
will shell you into the Django container. make db
will shell you into Postgres.
Currently using Node 16.14.0 and npm 8.3.1
cd vue
npm install
npm run serve
The local frontend will be available at http://localhost:4000
. You must first log in to the test account at http://localhost/api/auth/login
to test the frontend locally.
For building for deployment, you must create vue/.env
and define the envvars
VUE_APP_PP_ENDPOINT=https://printprobdb.psc.edu/api
VUE_HOME=https://printprobdb.psc.edu
These will properly set the API endpoint and the home page location for the frontend when you run npm run build
.
We use poetry to pin python package versions and calculate all dependencies for local development, however the docker container itself (and production deployment) only reads requirements.txt
. Use poetry to update this file automatically:
poetry export -f requirements.txt -o requirements.txt --without-hashes
Maintained by Matthew Lincoln