Django-based REST API for processing parking data.
- Python 3.x
- PostgreSQL + PostGIS
# Ubuntu 16.04
sudo apt-get install python3-dev libpq-dev postgresql postgis
# Ubuntu 16.04
sudo apt-get install binutils libproj-dev gdal-bin
Create a Python 3.x virtualenv either using the traditional virtualenv
tool or using the great virtualenvwrapper
toolset. Assuming the former, once installed, simply do:
mkvirtualenv -p /usr/bin/python3 parkkihubi
The virtualenv will automatically activate. To activate it in the future, just do:
workon parkkihubi
Use pip-tools
to install and maintain installed dependencies.
pip install -U pip # pip-tools needs pip==6.1 or higher (!)
pip install pip-tools
Install requirements as follows
pip-sync requirements.txt requirements-dev.txt
Environment variables are used to customize configuration in parkkihubi/settings.py
. If you wish to override any settings, you can place them in a local .env
file which will automatically be sourced when Django imports the settings file.
Create a basic file for development as follows
echo 'DEBUG=True' > .env
Create user and database
sudo -u postgres createuser -P -R -S parkkihubi # use password `parkkihubi`
sudo -u postgres createdb -O parkkihubi parkkihubi
sudo -u postgres psql parkkihubi -c "CREATE EXTENSION postgis;"
Allow user to create test database
sudo -u postgres psql -c "ALTER USER parkkihubi CREATEDB;"
Tests also require that PostGIS extension is installed on the test database. This can be achieved most easily by adding PostGIS extension to the default template:
sudo -u postgres psql -d template1 -c "CREATE EXTENSION IF NOT EXISTS postgis;"
Run migrations
python manage.py migrate
Use pip-tools
to update the requirements*.txt
files.
pip install -U pip # pip-tools needs pip==6.1 or higher (!)
pip install pip-tools
When you change requirements, set them in requirements.in
or requirements-dev.in
. Then run:
pip-compile requirements.in
pip-compile requirements-dev.in
Run all tests
py.test
Run with coverage
py.test --cov-report html --cov .
Open htmlcov/index.html
for the coverage report.
python manage.py runserver
Operator API will be available at http://127.0.0.1:8000/operator/v1/
Internal API will be available at http://127.0.0.1:8000/internal/v1/
The API documentation conforms to Swagger Specification 2.0, and we use swagger-codegen to generate the documentation.
Due to a bug in swagger-codegen, we're using an unreleased version at the moment.
To build swagger-codegen from source, you need Apache maven installed (you'll need java 7 runtime at a minimum):
# Ubuntu
sudo apt-get install maven
Clone swagger-codegen master branch and build it:
git clone https://github.com/swagger-api/swagger-codegen
cd swagger-codegen/
mvn clean package # Takes a few minutes
The client will now be available at modules/swagger-codegen-cli/target/swagger-codegen-cli.jar
.
To build the docs, in parkkihubi
repository root:
cd docs/api
java -jar /path/to/codegen/swagger-codegen-cli.jar generate -i internal.yaml -l html2 -c config.json -o /output/path/internal/
java -jar /path/to/codegen/swagger-codegen-cli.jar generate -i operator.yaml -l html2 -c config.json -o /output/path/operator/