Backend
Documentation for the backend section of itDAGENE. This involves the GraphQL API for itdagene.no
and the admin interface for admin.itdagene.no
API and admin interface for itdagene.no & admin.itdagene.no
GraphQL API
TL;DR
- GraphQL API with django-graphene
- Python 3.6 with Django
- Postgres for persistant storage
- Celery (with redis-broker) for async tasks
- CircleCI for continuous integration
- yarn and webpack for admin panel
Setup
First make sure that you have the following software installed on your system:
- Python 3.6
- Node.js and yarn
- docker together with docker-compose
Setup python environment
# Create a new venv and activate it
$ python3 -m venv venv
$ source venv/bin/activate
# Install the base requirements and import settings
$ pip install -r requirements/base.txt
$ echo "from itdagene.settings.dev import *" > itdagene/settings/local.py
Setup the admin interface
# Install all dependensies in the project
$ yarn
# Start the server
$ yarn start
Starting the app
# Start all docker containers for the project
$ docker-compose up -d
# Activate the venv. You need to do this every time your terminal restarts.
$ source venv/bin/activate
# Run the django server
$ python manage.py runserver
Migrations
In order to setup a new dev environment you have to create a superuser. Every time there are new migrations, you have to apply them. If you don't, the runserver
command will give you a warning.
$ python manage.py migrate
$ python manage.py createsuperuser
Model changes
Have you changed a model? Then you have to make and apply migrations. Migrations should always be committed to the repo in the same commit/PR as the model change.
$ python manage.py makemigrations
$ python manage.py migrate
Testing
In order to execute the tests, you have to install tox
. The tests are always run in the continuous integration server, and no code that doesn't pass all the tests (including linting) should not be merged into the master branch.
$ pip install tox
$ tox
Code style
We enforce the style guide PEP 8 with flake8, and isort for import sorting. yapf is used for code formatting.
$ isort -rc itdagene # Fix isort errors
$ yapf -ir itdagene # Fix code formatting
$ tox -e isort -e flake8 -e yapf # Verify code style
Celery
$ celery worker -A itdagene # worker
$ celery beat -A itdagene # beat
$ celery flower -A itdagene --address="127.0.0.1" --port=5555 # flower