3.6 KiB
3.6 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Project Overview
decp.info is a French public procurement data explorer — a Dash (Python) web app for browsing, filtering, and visualizing Données Essentielles de la Commande Publique (DECP). The UI is in French.
Commands
Setup
Setting up the virtual environment:
python -m venv .venv # s'il n'existe pas déjà
source .venv/bin/activate
rtk pip install -U pip > /dev/null 2>&1
rtk pip install -e . --group=dev
Environment variables:
cp .template.env .env # then customize .env
Development
python run.py # starts Dash app
Production
gunicorn app:server
Tests
rtk pytest # run all tests (some are Selenium-based integration tests)
rtk pytest tests/test_main.py::test_001_logo_and_search # run a single test
Tests require a running Chrome/Chromium browser. They use DashComposite from dash[testing] with Selenium WebDriver.
Architecture
Multi-page Dash app
src/app.py— creates the Dash app instance, navbar, SEO endpoints (robots.txt, sitemap.xml), Matomo analyticssrc/pages/*.py— each page registers itself with@register_page()and o.wns its own layout and callbacksrun.py— dev entry point; exportsserver(Flask) for gunicorn
Module imports
- always import modules from the app starting with
src.(e.g.src.utils.,src.pages.recherche, etc.), NOTutils.cacheorpages.observatoire.
Key pages
| Page | URL | Purpose |
|---|---|---|
recherche.py |
/ |
Search homepage for buyers/contractors |
acheteur.py |
/acheteur |
Buyer detail with stats, charts, maps |
titulaire.py |
/titulaire |
Contractor detail |
tableau.py |
/tableau |
Filterable data table with exports |
marche.py |
/marche |
Individual contract detail |
observatoire.py |
/observatoire |
An interactive analytics dashboard |
Data layer
- Data is stored as Parquet at rest, possibly in DuckDB, loaded in DuckDB, served from DuckDB for big queries and manipulated with Polars for the remaining steps
- Path set via
DATA_FILE_PARQUET_PATHenv var; tests usetests/test.parquet src/util/*.py— helpers shared by other modules, search (search_org), link generation, geographic data loadingsrc/callbacks.py— shared Dash callbacks (e.g.get_top_org_table)src/figures.py— chart and map components (Plotly Express, Dash Leaflet with marker clustering)- a Parquet file with production data is located at
../decp-processing/decp_prod.parquet(~ 1,5 million records) - the TableSchema of the dataset with the list of field and their definition is located at
../decp-processing/reference/base_schema.json tests/test.parquetis very small and may not contain all possible columns, only those necessary for testing
UI stack
- Dash 3.4 + Dash Bootstrap Components for layout
- Plotly Express for charts
- Dash Leaflet + Dash Extensions for interactive maps with clustering
- Custom CSS in
src/assets/css/
Environment
DEVELOPMENT=trueenables debug logging and is set automatically during tests.envfile is required at runtime (copy fromtemplate.env)
Deployment
mainbranch → manual deploy to decp.info via GitHub Actionsdevbranch → auto-deploy to test.decp.info via GitHub Actions