Skip to main content

getitfixed

Project description

GetItFixed!

Collaborative issue/incident reporting system for public services. Citizens report geolocated problems (potholes, broken streetlights, illegal dumping, etc.) on a map; administrators validate, update, and resolve them through a structured workflow.

Live demo:

Overview

Three interfaces share a status workflow (new → validated → in_progress → waiting_for_reporter → resolved):

  • Public (/getitfixed/) — citizens submit geolocated issues with photos
  • Private (/getitfixed_private/) — reporters track their own submissions
  • Admin (/getitfixed_admin/) — moderators validate, update, and resolve

Each status transition can trigger an email to the reporter and/or the admin.

Tech stack

  • Backend: Python, Pyramid, SQLAlchemy + GeoAlchemy2, Alembic, Colander / Deform, c2cgeoform (Camptocamp's geospatial form library)
  • DB: PostgreSQL 12 + PostGIS
  • Sessions: Redis
  • Frontend: Jinja2, jQuery, Bootstrap 3, bootstrap-table
  • i18n: Lingua + Babel (EN / FR / DE)
  • Tests: pytest (acceptance tests in acceptance_tests/)
  • Deploy: Docker + docker compose, Waitress WSGI in prod
  • Dev tools: black, flake8, ipython, ipdb, sphinx

All direct runtime and dev dependencies are exact-pinned in requirements.txt and requirements-dev.txt.

Architecture

MVC Pyramid app. The core package is getitfixed/:

  • models/getitfixed.pyPhoto, Category, Type, Issue (PostGIS point), Event
  • views/{public,private,admin}/ — one view module per interface, all subclassing c2cgeoform's AbstractViews
  • routes.py — wires the three app prefixes to c2cgeoform CRUD
  • templates/, static/, locale/, emails/ — standard assets
  • alembic/versions/ — DB migrations
  • scripts/setup_test_data.py — demo-data loader

Config files: development.ini / production.ini, plus YAML customization (vars.yamlconfig.yaml) through c2c.template.

Running it locally

Prerequisites: Docker, Docker Compose, Make.

git clone git@github.com:camptocamp/getitfixed.git
cd getitfixed
make meacoffee

Then open:

Useful Make targets

Target Purpose
make meacoffee Build, run, load test data, tail logs
make meadeca Same, but with an empty database
make test Run the pytest acceptance suite
make check Run black + flake8
make black Reformat Python code with black
make venv Build a local .venv with all deps (for IDE / pyright resolution)
make docs Build Sphinx documentation
make psql Open psql in the Postgres container
make pshell Open a Pyramid interactive shell
make bash Open bash in the build container
make cleanall Remove containers, images, .env
make clean-venv Remove the local .venv
make help List all targets

Local dev overrides go in docker-compose.override.yaml (gitignored; start from docker-compose.override.sample.yaml).

Database migrations

Generate a new alembic revision:

docker compose run --rm --user `id -u` getitfixed \
    alembic -c /app/alembic.ini -n getitfixed revision --autogenerate -m 'Revision name'

Upgrade the database:

docker compose run --rm --user `id -u` getitfixed \
    alembic -c /app/alembic.ini -n getitfixed upgrade head

Documentation

cd docs
make html

CI

.github/workflows/ci.yaml runs on ubuntu-24.04 with actions/checkout@v4 and executes make build, make check, make test. Tagged pushes to camptocamp/getitfixed additionally run scripts/deploy-pypi.

0.0

  • Initial version

Project details


Release history Release notifications | RSS feed

This version

1.1.0

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

getitfixed-1.1.0.tar.gz (181.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

getitfixed-1.1.0-py2.py3-none-any.whl (196.9 kB view details)

Uploaded Python 2Python 3

File details

Details for the file getitfixed-1.1.0.tar.gz.

File metadata

  • Download URL: getitfixed-1.1.0.tar.gz
  • Upload date:
  • Size: 181.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for getitfixed-1.1.0.tar.gz
Algorithm Hash digest
SHA256 ae9ab616cddf486b199bf6d1ff83e9a458ef9d91a2e6bc76d66bf27f76c79289
MD5 c27db4063e616a9532a5bcec25885dff
BLAKE2b-256 16a50cefe03deb880c28586dea78b0537d837167831c11d2d7db8ece56a35729

See more details on using hashes here.

Provenance

The following attestation bundles were made for getitfixed-1.1.0.tar.gz:

Publisher: ci.yaml on camptocamp/getitfixed

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file getitfixed-1.1.0-py2.py3-none-any.whl.

File metadata

  • Download URL: getitfixed-1.1.0-py2.py3-none-any.whl
  • Upload date:
  • Size: 196.9 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for getitfixed-1.1.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 d4b51c06ddf0c9ce50d8cca2e1ffc01425c19d939cf2919b8f97f6a2b19de429
MD5 a043eb37d19c7c634b4d62b936458b28
BLAKE2b-256 c2b22e43bdcf17e47befb45d07e280507cf9042b7290267ede7fb3fbbbcc71e2

See more details on using hashes here.

Provenance

The following attestation bundles were made for getitfixed-1.1.0-py2.py3-none-any.whl:

Publisher: ci.yaml on camptocamp/getitfixed

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page