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.1

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.1.tar.gz (182.0 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.1-py2.py3-none-any.whl (196.9 kB view details)

Uploaded Python 2Python 3

File details

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

File metadata

  • Download URL: getitfixed-1.1.1.tar.gz
  • Upload date:
  • Size: 182.0 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.1.tar.gz
Algorithm Hash digest
SHA256 daf435e5fee264ac865c591913cf11ab7eade5b93df91016e0058cb8a378d1ad
MD5 348162590a755eea604236691b37ae09
BLAKE2b-256 9840c78021662351e2dd33ca6f2fd4d2b08de0cbcf004d43c27b8753f468b033

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: getitfixed-1.1.1-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.1-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 d16a804ec0b4d55eca474a18a023b927facb30ac40adb428625a4287d4d2ade5
MD5 c69ac87368dffe06d8dfaaadd75bac3e
BLAKE2b-256 b1e082a3cddd4bc9a6c5603f3c9e68f908a96a1786dc3aecdf1ec3dc2e7f7040

See more details on using hashes here.

Provenance

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