Skip to main content

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.py — Photo, 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.yaml → config.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

Metadata

Release files for getitfixed 1.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for getitfixed 1.1.1
File Size Uploaded Provenance
getitfixed-1.1.1.tar.gz 182.0 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for getitfixed 1.1.1
File Interpreter ABI Platform
getitfixed-1.1.1-py2.py3-none-any.whl Python 2, Python 3 none any Details

Total release size: 378.9 kB

Release files / getitfixed-1.1.1.tar.gz

Download URL getitfixed-1.1.1.tar.gz
Size 182.0 kB
Tags Source
SHA-256 checksum
How to use checksums
daf435e5fee264ac865c591913cf11ab7eade5b93df91016e0058cb8a378d1ad
BLAKE2b-256 checksum
How to use checksums
9840c78021662351e2dd33ca6f2fd4d2b08de0cbcf004d43c27b8753f468b033
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 7, 2026.

Transparency log

Release files / getitfixed-1.1.1-py2.py3-none-any.whl

Download URL getitfixed-1.1.1-py2.py3-none-any.whl
Size 196.9 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
d16a804ec0b4d55eca474a18a023b927facb30ac40adb428625a4287d4d2ade5
BLAKE2b-256 checksum
How to use checksums
b1e082a3cddd4bc9a6c5603f3c9e68f908a96a1786dc3aecdf1ec3dc2e7f7040
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 7, 2026.

Transparency log

Security for getitfixed 1.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for getitfixed-1.1.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 7, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Release history Release notifications | RSS feed

This release

1.1.1 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page