City-of-Helsinki / kaavapino

Project management system for city planning projects

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

kaavapino

Project management system for city planning projects.

Prerequisites

  • PostgreSQL (>= 9.3)
  • Python (>= 3.6)

Development

It is possible to either use docker-compose or set up the development environment manually as described below.

1) Using docker-compose

Development environment can be initialized using docker-compose. You need to have docker and docker-compose available on your system.

To bring up the dev environment run:

docker-compose up

To manage docker-compose setup:

docker-compose build                # Builds project container from the Dockerfile
docker-compose up -d                # Start all required services in the background
docker-compose stop                 # Stop services
docker-compose down -v              # Stop services and remove containers and volumes
docker exec -it kaavapino-api bash  # Open bash into the django container

2) Setup development environment manually

PostgreSQL and PostGIS

# Ubuntu 16.04
sudo apt-get install python3-dev libpq-dev postgresql postgis

GeoDjango extra packages

# Ubuntu 16.04
sudo apt-get install binutils libproj-dev gdal-bin

Install Poetry

pip install poetry

Install project dependencies and activate virtual environment

# Installs dependencies and creates a virtual environment for project
poetry install
# Activates virtual environment
poetry shell

Adding / Removing project dependencies

poetry add/remove <dependency>
# Note: Both pyproject.toml and poetry.lock have to be committed to version control

Database

To setup a database compatible with the default database settings:

Create user and database

sudo -u postgres createuser -P -R -S kaavapino  # use password `kaavapino`
sudo -u postgres createdb -O kaavapino kaavapino

Enable PostGIS

sudo -u postgres psql -d "kaavapino" -c "CREATE EXTENSION IF NOT EXISTS postgis;"

Allow the kaavapino user to create databases when running tests

sudo -u postgres psql -c "ALTER USER kaavapino 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 which is then used when the test databases are created:

sudo -u postgres psql -d template1 -c "CREATE EXTENSION IF NOT EXISTS postgis;"

Django configuration

Environment variables are used to customize configuration in kaavapino/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.

Alternatively you can create a local_settings.py which is executed at the end of the kaavapino/settings.py in the same context so that the variables defined in the settings are available.

Running development environment

  • Enable debug echo 'DEBUG=True' >> .env
  • Run python manage.py migrate
  • Run python manage.py runserver 0.0.0.0:8000

Running tests

  • Run pytest

Importing attributes and deadlines

To import data, use:

  • python manage.py create_default_groups_and_mappings (first time only, run before other commands)
  • python manage.py import_attributes <attribute excel file> [--sheet sheet name] [--overwrite]
  • python manage.py import_deadlines <deadline excel file>
  • python manage.py import_report_types <report excel file>
  • python manage.py create_default_listviewattributecolumns

Deadlines rely on attributes, so it is recommended to run import_attributes before import_deadlines. Import will overwrite existing data.

To clear or generate missing schedules, use:

  • python manage.py clear_all_project_deadlines [--id project id]
  • python manage.py generate_missing_project_deadlines [--id project id]

If at any point attribute_data breaks for example due to changes in attribute types between imports, use following to fix one or all projects:

  • python manage.py repair_attribute_data [--id project id]

Deploy staging

Install kubectl locally. Check version to deploy and run:

#> pwd
... kaavapino/api/deploy/rancher
#> ./deploy_staging_api.sh <version> run

Schema

Generate API-schema

Unversioned:

./manage.py spectacular --file schema/schema.yaml

Access swagger ui

<server_url>/schema/swagger-ui/

About

Project management system for city planning projects

License:MIT License


Languages

Language:Python 98.7%Language:HTML 0.6%Language:Shell 0.4%Language:Dockerfile 0.3%