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

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.0rc1.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.0rc1-py2.py3-none-any.whl (196.9 kB view details)

Uploaded Python 2Python 3

File details

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

File metadata

  • Download URL: getitfixed-1.1.0rc1.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.0rc1.tar.gz
Algorithm Hash digest
SHA256 169fff9152454db3db326f71ff405d952105707a1612b1cf1577ab04ff33558d
MD5 f811b8f3b0b12c245ea8e7e5fb28a019
BLAKE2b-256 38e175dac12ac99e07ac72547a214d2f411f4565a9c788d40901507d00859ff5

See more details on using hashes here.

Provenance

The following attestation bundles were made for getitfixed-1.1.0rc1.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.0rc1-py2.py3-none-any.whl.

File metadata

  • Download URL: getitfixed-1.1.0rc1-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.0rc1-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 3fac94771effeee1ad65149571c9174851cf45b85c127032b7bb0de4cf52e43e
MD5 9a1512238298ea731df766713211e7f1
BLAKE2b-256 3472e436ffb1b69e2445b8224c29798d292c49adf1f410f9bc43096f85d40b31

See more details on using hashes here.

Provenance

The following attestation bundles were made for getitfixed-1.1.0rc1-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