refactor: rebrand decp.info to colibre #57

- Rename project from decp.info to colibre across all codebase
- Update domain from https://decp.info to https://colibre.fr
- Update GitHub repo references to ColinMaudry/colibre
- Rename deployment files: decpinfo-backup.* → colibre-backup.*
- Update project configuration and documentation
- Rename project assets: decp.info.png → colibre.png
- Update environment variables and constants (DOMAIN_NAME, TOKEN_PREFIX, GITHUB_REPO, etc.)
- Update URLs in all pages, tests, and configuration files
- Keep DECP acronym in text (unchanged per requirements)
- Add rebrand note to README.md

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
Colin Maudry
2026-06-30 21:43:33 +02:00
parent b46d5d8244
commit 9b124deeea
62 changed files with 225 additions and 197 deletions
+1 -1
View File
@@ -5,7 +5,7 @@ from src.api import routes
def init_api(server) -> None:
"""Enregistre le blueprint d'API privée sur le serveur Flask."""
server.config.setdefault("API_TITLE", "decp.info API")
server.config.setdefault("API_TITLE", "colibre API")
server.config.setdefault("API_VERSION", "v1")
server.config.setdefault("OPENAPI_VERSION", "3.0.3")
server.config.setdefault("OPENAPI_URL_PREFIX", "/api/v1")
+1 -1
View File
@@ -13,7 +13,7 @@ bp = Blueprint(
"api_v1",
"api_v1",
url_prefix="/api/v1",
description="API privée decp.info — accès tabulaire aux marchés publics.",
description="API privée colibre — accès tabulaire aux marchés publics.",
)
MAX_PAGE_SIZE = 1000
+1 -1
View File
@@ -5,7 +5,7 @@ from contextlib import contextmanager
from datetime import datetime, timezone
from pathlib import Path
TOKEN_PREFIX = "decpinfo_"
TOKEN_PREFIX = "colibre_"
SCHEMA = """
CREATE TABLE IF NOT EXISTS api_tokens (
+1 -1
View File
@@ -59,7 +59,7 @@ def enqueue_matomo_event(
site_id = os.getenv("MATOMO_SITE_ID")
if not url or not site_id:
return
full_url = f"https://decp.info{path}"
full_url = f"https://colibre.fr{path}"
if query_string:
full_url += f"?{query_string}"
params = {
+5 -5
View File
@@ -45,7 +45,7 @@ META_TAGS = [
{"name": "viewport", "content": "width=device-width, initial-scale=1"},
{
"name": "keywords",
"content": "commande publique, decp, marchés publics, données essentielles",
"content": "commande publique, decp, marchés publics, données essentielles, colibre",
},
]
@@ -57,7 +57,7 @@ if DEVELOPMENT:
# fonctions memoizées (@cache.memoize) dès l'import (ex. tableau.py).
server = Flask(__name__)
cache_dir = os.getenv("CACHE_DIR", "/tmp/decp-cache")
cache_dir = os.getenv("CACHE_DIR", "/tmp/colibre-cache")
if os.path.exists(cache_dir):
rmtree(cache_dir)
@@ -83,7 +83,7 @@ app: Dash = Dash(
# `src.pages.connexion` : deux identités, même URL → "duplicate paths" →
# check_for_duplicate_pathnames lève à chaque requête → 500 sur toute l'app.
name="src",
title="decp.info",
title="Colibre",
use_pages=True,
suppress_callback_exceptions=True,
compress=True,
@@ -132,7 +132,7 @@ Allow: /
@app.server.route("/sitemap.xml")
def sitemap():
base_url = "https://decp.info"
base_url = "https://colibre.fr"
pages = [
"/",
"/observatoire",
@@ -203,7 +203,7 @@ navbar = dbc.Navbar(
children=[
html.Div(
[
dcc.Link(html.H1("decp.info"), href="/", className="logo"),
dcc.Link(html.H1("colibre"), href="/", className="logo"),
html.P(
[
html.A(

Before

Width:  |  Height:  |  Size: 333 KiB

After

Width:  |  Height:  |  Size: 333 KiB

+26
View File
@@ -0,0 +1,26 @@
# decp.info
decp.info est une plateforme permettant d'explorer, filtrer et visualiser les données des marchés publics français. Elle est alimentée par des données publiées en Open Data et propose également une API REST JSON accessible sur abonnement (contacter <colin@colmo.tech>).
## Schéma des données
Le schéma des données est au format TableSchema et peut être librement téléchargé à cette adresse : <https://www.data.gouv.fr/api/1/datasets/r/9a4144c0-ee44-4dec-bee5-bbef38191d9a>
## Données source
Les données sont publiées en Open Data aux formats Parquet et CSV :
- Parquet : <https://www.data.gouv.fr/api/1/datasets/r/11cea8e8-df3e-4ed1-932b-781e2635e432>
- CSV : <https://www.data.gouv.fr/api/1/datasets/r/22847056-61df-452d-837d-8b8ceadbfc52>
## API
L'API nécessite un jeton d'authentification pour se connecter. Elle utilise le même schéma que les données et renvoie les données au format JSON.
- Point d'accès : <https://decp.info/api/v1/data>
- Spec Open API : <https://decp.info/api/v1/openapi.json>
- Health : <https://decp.info/api/v1/health>
## Sources de données
Les données proviennent de nombreuses sources de données, le projet publie des statistiques au format CSV : <https://www.data.gouv.fr/api/1/datasets/r/8ded94de-3b80-4840-a5bb-7faad1c9c234>
+2 -2
View File
@@ -25,8 +25,8 @@ def _base_url() -> str:
def _sender() -> SendTransacEmailRequestSender:
return SendTransacEmailRequestSender(
email=os.getenv("MAIL_FROM", "noreply@decp.info"),
name=os.getenv("MAIL_FROM_NAME", "decp.info"),
email=os.getenv("MAIL_FROM", "noreply@colibre"),
name=os.getenv("MAIL_FROM_NAME", "colibre"),
)
+2 -2
View File
@@ -5,9 +5,9 @@ from src.utils.seo import META_CONTENT
register_page(
__name__,
path="/a-propos",
title="À propos | decp.info",
title="À propos | colibre",
name="À propos",
description="En savoir plus sur decp.info, l'outil d'exploration des données essentielles de la commande publique.",
description="En savoir plus sur colibre, l'outil d'exploration des données essentielles de la commande publique.",
image_url=META_CONTENT["image_url"],
order=5,
)
+7 -7
View File
@@ -6,8 +6,8 @@ from src.utils.seo import META_CONTENT
register_page(
__name__,
path="/a-propos/abonnement",
title="Abonnement | À propos | decp.info",
description="Conditions d'abonnement à decp.info : tarifs, facturation, résiliation et données personnelles.",
title="Abonnement | À propos | colibre",
description="Conditions d'abonnement à colibre : tarifs, facturation, résiliation et données personnelles.",
image_url=META_CONTENT["image_url"],
)
@@ -18,7 +18,7 @@ def layout(**_):
html.H2("Abonnement"),
dcc.Markdown(
"""
L'accès aux fonctionnalités de base de decp.info est gratuit et sans inscription.
L'accès aux fonctionnalités de base de colibre est gratuit et sans inscription.
Un abonnement payant donne accès à des fonctionnalités supplémentaires qui nécessitent la création d'un compte.
"""
),
@@ -55,7 +55,7 @@ La période d'essai est accordée une seule fois par utilisateur.
"""
L'abonnement est facturé mensuellement, à la date anniversaire de la souscription.
Le paiement est traité par [Frisbii](https://www.frisbii.com), prestataire européen de paiement en ligne.
Les coordonnées bancaires sont conservées exclusivement par Frisbii et ne sont pas transmises à decp.info.
Les coordonnées bancaires sont conservées exclusivement par Frisbii et ne sont pas transmises à colibre.
"""
),
html.H4("Résiliation"),
@@ -68,9 +68,9 @@ La résiliation prend effet à la fin de la période mensuelle en cours : l'acc
html.H4("Données personnelles"),
dcc.Markdown(
"""
La gestion de l'abonnement implique le traitement de données personnelles, réparties entre decp.info et Frisbii (prestataire de paiement).
La gestion de l'abonnement implique le traitement de données personnelles, réparties entre colibre et Frisbii (prestataire de paiement).
**Données stockées par decp.info :**
**Données stockées par colibre :**
- Adresse e-mail (identification du compte)
- Numéro SIRET (si renseigné, conservé pour pré-remplir les futures souscriptions)
@@ -78,7 +78,7 @@ La gestion de l'abonnement implique le traitement de données personnelles, rép
**Données stockées par Frisbii :**
- Informations de facturation : prénom, nom, adresse postale, code postal, ville, pays, nom de l'entreprise
- Informations de paiement : coordonnées bancaires (accessibles uniquement par Frisbii, jamais transmises à decp.info)
- Informations de paiement : coordonnées bancaires (accessibles uniquement par Frisbii, jamais transmises à colibre)
- Historique des factures
Ces données sont utilisées uniquement pour la gestion de votre abonnement et ne sont pas transmises à des tiers à des fins commerciales.
+2 -2
View File
@@ -6,8 +6,8 @@ from src.utils.seo import META_CONTENT
register_page(
__name__,
path="/a-propos/contact",
title="Contact | À propos | decp.info",
description="Contactez Colin Maudry, développeur de decp.info.",
title="Contact | À propos | colibre",
description="Contactez Colin Maudry, développeur de colibre.",
image_url=META_CONTENT["image_url"],
)
+3 -3
View File
@@ -6,8 +6,8 @@ from src.utils.seo import META_CONTENT
register_page(
__name__,
path="/a-propos/contribuer",
title="Contribuer | À propos | decp.info",
description="Comment contribuer au projet decp.info.",
title="Contribuer | À propos | colibre",
description="Comment contribuer au projet colibre.",
image_url=META_CONTENT["image_url"],
)
@@ -18,7 +18,7 @@ def layout(**_):
html.H2("Pour contribuer"),
dcc.Markdown(
"""
- via l'achat d'une prestation de service (devis, prestation, facture), vous pouvez financer le développement de [fonctionnalités prévues](https://github.com/ColinMaudry/decp.info/issues), ou d'autres !
- via l'achat d'une prestation de service (devis, prestation, facture), vous pouvez financer le développement de [fonctionnalités prévues](https://github.com/ColinMaudry/colibre/issues), ou d'autres !
- ma société accepte aussi les dons (pas de réduction d'impôt possible)
- écrivez-moi et on discute !
"""
+3 -3
View File
@@ -6,8 +6,8 @@ from src.utils.seo import META_CONTENT
register_page(
__name__,
path="/a-propos/donnees-brutes",
title="Données brutes | À propos | decp.info",
description="Téléchargez ou interrogez les données brutes qui alimentent decp.info.",
title="Données brutes | À propos | colibre",
description="Téléchargez ou interrogez les données brutes qui alimentent colibre.",
image_url=META_CONTENT["image_url"],
)
@@ -18,7 +18,7 @@ def layout(**_):
html.H2("Consommer les données brutes"),
dcc.Markdown(
"""
Vous pouvez consommer les données qui alimentent decp.info en les téléchargeant [sur data.gouv.fr](https://www.data.gouv.fr/datasets/donnees-essentielles-de-la-commande-publique-consolidees-format-tabulaire) (Parquet, CSV), pensez à lire la description du jeu de données
Vous pouvez consommer les données qui alimentent colibre en les téléchargeant [sur data.gouv.fr](https://www.data.gouv.fr/datasets/donnees-essentielles-de-la-commande-publique-consolidees-format-tabulaire) (Parquet, CSV), pensez à lire la description du jeu de données
Une API REST tabulaire (JSON) est également disponible par abonnement mensuel pour accéder aux mêmes données et alimenter une application.
Documentation interactive : [Swagger UI](/api/v1/swagger). Si cela vous intéresse, [contactez-moi](/a-propos/contact)."""
+3 -3
View File
@@ -6,8 +6,8 @@ from src.utils.seo import META_CONTENT
register_page(
__name__,
path="/a-propos/explorer",
title="Explorer le projet | À propos | decp.info",
description="Ressources pour explorer le projet decp.info : données, code source, blog.",
title="Explorer le projet | À propos | colibre",
description="Ressources pour explorer le projet colibre : données, code source, blog.",
image_url=META_CONTENT["image_url"],
)
@@ -23,7 +23,7 @@ def layout(**_):
- 🗞️ [mon blog](https://colin.maudry.com)
- 📔 [wiki du projet](https://github.com/ColinMaudry/decp-processing/wiki)
- 🚰 code source
- [de decp.info](https://github.com/ColinMaudry/decp.info)
- [de colibre](https://github.com/ColinMaudry/colibre)
- [du traitement des données](https://github.com/ColinMaudry/decp-processing)
"""
),
+3 -3
View File
@@ -6,8 +6,8 @@ from src.utils.seo import META_CONTENT
register_page(
__name__,
path="/a-propos/mentions-legales",
title="Mentions légales | À propos | decp.info",
description="Mentions légales de decp.info : éditeur, hébergement, suivi d'audience, attributions.",
title="Mentions légales | À propos | colibre",
description="Mentions légales de colibre : éditeur, hébergement, suivi d'audience, attributions.",
image_url=META_CONTENT["image_url"],
)
@@ -29,7 +29,7 @@ Hébergement : serveur situé en France et administré par Scaleway, 8 rue de la
html.H4("Suivi d'audience", id="audience"),
dcc.Markdown(
"""
Ce site dépose un petit fichier texte (un « cookie ») sur votre ordinateur lorsque vous le consultez ([Wikipédia](https://fr.wikipedia.org/wiki/Cookie_(informatique))). Cela me permet de mesurer le nombre de visites, de distinguer les nouveaux visiteurs des utilisateurs réguliers et ainsi de communiquer sur l'impact de decp.info.
Ce site dépose un petit fichier texte (un « cookie ») sur votre ordinateur lorsque vous le consultez ([Wikipédia](https://fr.wikipedia.org/wiki/Cookie_(informatique))). Cela me permet de mesurer le nombre de visites, de distinguer les nouveaux visiteurs des utilisateurs réguliers et ainsi de communiquer sur l'impact de colibre.
**Ce site n'affiche pas de bannière de consentement aux cookies, pourquoi ?**
+3 -3
View File
@@ -6,8 +6,8 @@ from src.utils.seo import META_CONTENT
register_page(
__name__,
path="/a-propos/presentation",
title="Présentation | À propos | decp.info",
description="En savoir plus sur decp.info, l'outil d'exploration des données essentielles de la commande publique.",
title="Présentation | À propos | colibre",
description="En savoir plus sur colibre, l'outil d'exploration des données essentielles de la commande publique.",
image_url=META_CONTENT["image_url"],
)
@@ -23,7 +23,7 @@ Ce projet vise à démocratiser l'accès aux données des marchés publics et à
j'aimerais beaucoup échanger avec vous pour comprendre vos cas d'usages et vos besoins. Cet outil ne peut rester performant que si je comprends les problèmes qu'il peut aider à résoudre. Ce projet ne peut rester gratuit que grâce au financement du développement de nouvelles fonctionnalités.
En effet, le potentiel des données d'attribution de marchés et des données qui peuvent les enrichir est très loin d'être exploité par
les fonctionnalités actuelles de decp.info. Il est ainsi possible de rajouter
les fonctionnalités actuelles de colibre. Il est ainsi possible de rajouter
- de nombreuses visualisations de données (cartes, graphiques, tableaux) sur des thématiques variées (vivacité de la concurrence, secteurs d'activité, insertion par l'activité économique (IAE), distance acheteur-titulaire...)
- des alertes par email si des marchés correspondant à certains critères
+3 -3
View File
@@ -6,8 +6,8 @@ from src.utils.seo import META_CONTENT
register_page(
__name__,
path="/a-propos/qualite",
title="Qualité des données | À propos | decp.info",
description="Informations sur la qualité et l'exhaustivité des données de marchés publics sur decp.info.",
title="Qualité des données | À propos | colibre",
description="Informations sur la qualité et l'exhaustivité des données de marchés publics sur colibre.",
image_url=META_CONTENT["image_url"],
)
@@ -24,7 +24,7 @@ def layout(**_):
peu aidé·es par la qualité des outils à leur disposition.
Je pense que l'analyse de marchés
individuels et le comptage de marchés sur des critères autres que financiers sont plutôt fiables. En revanche, certains montants de marché estimés à des valeurs farfelues ([1 euro](https://decp.info/marches/432766947000192025S01301), [1 milliard](https://decp.info/marches/2459004280001320210000000271)) faussent les calculs par aggrégation (sommes, moyennes, médianes) et donc la production de statistiques financières fiables. Acheteurs, acheteuses : s'il vous plaît, essayez d'estimer les montants des marchés publics attribués de manière plus précise.
individuels et le comptage de marchés sur des critères autres que financiers sont plutôt fiables. En revanche, certains montants de marché estimés à des valeurs farfelues ([1 euro](https://colibre.fr/marches/432766947000192025S01301), [1 milliard](https://colibre.fr/marches/2459004280001320210000000271)) faussent les calculs par aggrégation (sommes, moyennes, médianes) et donc la production de statistiques financières fiables. Acheteurs, acheteuses : s'il vous plaît, essayez d'estimer les montants des marchés publics attribués de manière plus précise.
Quant à l'exhaustivité, je consolide toutes les sources de données exploitables que j'ai pu identifier (voir [Sources de données](/a-propos/sources)). Je tiens à souligner la belle continuité de la publication par la DGFiP des données des marchés publics remontées via le [protocole PES](https://www.collectivites-locales.gouv.fr/finances-locales/le-protocole-dechange-standard-pes). Merci à leurs équipes."""
),
+2 -2
View File
@@ -7,8 +7,8 @@ from src.utils.seo import META_CONTENT
register_page(
__name__,
path="/a-propos/roadmap",
title="Roadmap | À propos | decp.info",
description="Les prochaines fonctionnalités de decp.info, soumises au vote des abonnés.",
title="Roadmap | À propos | colibre",
description="Les prochaines fonctionnalités de colibre, soumises au vote des abonnés.",
image_url=META_CONTENT["image_url"],
)
+2 -2
View File
@@ -9,8 +9,8 @@ from src.utils.seo import META_CONTENT
register_page(
__name__,
path="/a-propos/sources",
title="Sources de données | À propos | decp.info",
description="Sources de données utilisées par decp.info pour consolider les marchés publics français.",
title="Sources de données | À propos | colibre",
description="Sources de données utilisées par colibre pour consolider les marchés publics français.",
image_url=META_CONTENT["image_url"],
)
+2 -2
View File
@@ -44,8 +44,8 @@ def get_title(acheteur_id: str | None = None) -> str:
"acheteur_nom"
)
if acheteur_nom.height > 0:
return f"Marchés publics attribués par {acheteur_nom.item(0, 0)} | decp.info"
return "Marchés publics attribués | decp.info"
return f"Marchés publics attribués par {acheteur_nom.item(0, 0)} | colibre"
return "Marchés publics attribués | colibre"
register_page(
+2 -2
View File
@@ -7,11 +7,11 @@ NAME = "Département"
def get_title(code):
return f"Marchés publics de {DEPARTEMENTS[code]['departement']} | decp.info"
return f"Marchés publics de {DEPARTEMENTS[code]['departement']} | colibre"
def get_description(code):
return f"Marchés publics passés dans le département {DEPARTEMENTS[code]['departement']} | decp.info"
return f"Marchés publics passés dans le département {DEPARTEMENTS[code]['departement']} | colibre"
register_page(
+1 -1
View File
@@ -7,7 +7,7 @@ NAME = "Départements"
register_page(
__name__,
path="/departements",
title="Marchés par département | decp.info",
title="Marchés par département | colibre",
name="Départements",
description="Tous les marchés publics, classés par départements",
)
+3 -3
View File
@@ -30,16 +30,16 @@ def make_org_nom_verbe(org_type, org_id) -> tuple:
def get_title(code, org_type, org_id):
if org_type:
org_nom, verbe = make_org_nom_verbe(org_type, org_id)
return f"Marchés publics {verbe} par {org_nom} | decp.info"
return f"Marchés publics {verbe} par {org_nom} | colibre"
else:
logger.warning(f"Pas de org_type pour org_id: {org_id}")
return "Marchés publics | decp.info"
return "Marchés publics | colibre"
def get_description(code, org_type, org_id):
org_nom, verbe = make_org_nom_verbe(org_type, org_id)
return f"Liste complète des marchés publics {verbe} par {org_nom} et publiés par decp.info. Cliquez sur les liens pour consulter les détails de chaque marché."
return f"Liste complète des marchés publics {verbe} par {org_nom} et publiés par colibre. Cliquez sur les liens pour consulter les détails de chaque marché."
register_page(
+1 -1
View File
@@ -3,7 +3,7 @@ from dash import dcc, register_page
register_page(
__name__,
path="/compte",
title="Mon compte | decp.info",
title="Mon compte | colibre",
name="Mon compte",
description="Redirection vers la gestion de compte.",
)
+2 -2
View File
@@ -8,9 +8,9 @@ from src.subscriptions import db, plans
register_page(
__name__,
path="/compte/abonnement",
title="Abonnement | decp.info",
title="Abonnement | colibre",
name="Abonnement",
description="Gestion de votre abonnement decp.info.",
description="Gestion de votre abonnement colibre.",
)
_PLAN_KEYS = ("simple", "soutien")
+7 -7
View File
@@ -10,13 +10,13 @@ from src.utils.data import get_annuaire_data
register_page(
__name__,
path="/compte/abonnement/mes-infos",
title="Mes informations | Abonnement | decp.info",
title="Mes informations | Abonnement | colibre",
name="Mes informations de facturation",
description="Informations de facturation pour votre abonnement decp.info.",
description="Informations de facturation pour votre abonnement colibre.",
)
_CGU_MARKDOWN = """
L'accès aux fonctionnalités de base de decp.info est gratuit et sans inscription.
L'accès aux fonctionnalités de base de colibre est gratuit et sans inscription.
Un abonnement payant donne accès à des fonctionnalités supplémentaires qui nécessitent la création d'un compte.
#### Fonctionnalités incluses
@@ -45,7 +45,7 @@ La période d'essai est accordée une seule fois par utilisateur.
L'abonnement est facturé mensuellement, à la date anniversaire de la souscription.
Le paiement est traité par [Frisbii](https://www.frisbii.com), prestataire européen de paiement en ligne.
Les coordonnées bancaires sont conservées exclusivement par Frisbii et ne sont pas transmises à decp.info.
Les coordonnées bancaires sont conservées exclusivement par Frisbii et ne sont pas transmises à colibre.
#### Résiliation
@@ -54,9 +54,9 @@ La résiliation prend effet à la fin de la période mensuelle en cours : l'acc
#### Données stockées
La gestion de l'abonnement implique le traitement de données personnelles, réparties entre decp.info et Frisbii (prestataire de paiement).
La gestion de l'abonnement implique le traitement de données personnelles, réparties entre colibre et Frisbii (prestataire de paiement).
**Données stockées par decp.info :**
**Données stockées par colibre :**
- Adresse e-mail (identification du compte)
- Numéro SIRET (si renseigné, conservé pour pré-remplir les futures souscriptions et alimenter des fonctionnalités)
@@ -64,7 +64,7 @@ La gestion de l'abonnement implique le traitement de données personnelles, rép
**Données stockées par Frisbii :**
- Informations de facturation : prénom, nom, adresse postale, code postal, ville, pays, nom de l'entreprise
- Informations de paiement : coordonnées bancaires (accessibles uniquement par Frisbii, jamais transmises à decp.info)
- Informations de paiement : coordonnées bancaires (accessibles uniquement par Frisbii, jamais transmises à colibre)
- Historique des factures
Ces données sont utilisées uniquement pour la gestion de votre abonnement et ne sont pas transmises à des tiers à des fins commerciales.
+2 -2
View File
@@ -7,9 +7,9 @@ from src.pages._compte_shell import account_guard, account_shell
register_page(
__name__,
path="/compte/admin",
title="Mon compte | decp.info",
title="Mon compte | colibre",
name="Mon compte",
description="Gestion de votre compte decp.info.",
description="Gestion de votre compte colibre.",
)
ERROR_MESSAGES = {
+2 -2
View File
@@ -10,9 +10,9 @@ from src.subscriptions import db as subs_db
register_page(
__name__,
path="/compte/roadmap",
title="Roadmap | decp.info",
title="Roadmap | colibre",
name="Roadmap",
description="Votez pour les prochaines fonctionnalités de decp.info.",
description="Votez pour les prochaines fonctionnalités de colibre.",
)
+1 -1
View File
@@ -19,7 +19,7 @@ from src.saved_views import ui as saved_views_ui
register_page(
__name__,
path="/compte/vues",
title="Mes vues | decp.info",
title="Mes vues | colibre",
name="Mes vues",
description="Gérez vos vues enregistrées du tableau des marchés.",
)
+2 -2
View File
@@ -6,9 +6,9 @@ NAME = "Connexion"
register_page(
__name__,
path="/connexion",
title="Connexion | decp.info",
title="Connexion | colibre",
name=NAME,
description="Se connecter à decp.info.",
description="Se connecter à colibre.",
)
ERROR_MESSAGES = {
+1 -1
View File
@@ -7,7 +7,7 @@ NAME = "Quelles données pour quelles étapes et quels seuils dans les marchés
register_page(
__name__,
path="/etapes",
title=f"{NAME} | decp.info",
title=f"{NAME} | colibre",
name="Étapes et données",
description=(
"À chaque étape d'un marché public (programmation, publicité, "
+2 -2
View File
@@ -8,9 +8,9 @@ NAME = "Inscription"
register_page(
__name__,
path="/inscription",
title="Inscription | decp.info",
title="Inscription | colibre",
name=NAME,
description="Créer un compte decp.info.",
description="Créer un compte colibre.",
)
ERROR_MESSAGES = {
+2 -2
View File
@@ -12,7 +12,7 @@ from src.utils.table import format_values, unformat_montant
def get_title(uid: str = None) -> str:
return f"Marché {uid} | decp.info"
return f"Marché {uid} | colibre"
register_page(
@@ -231,7 +231,7 @@ def get_marche_jsonld(marche, titulaires) -> str:
jsonld = {
"@context": "https://schema.org",
"@type": "Order",
"@id": f"https://decp.info/marches/{marche.get('uid')}",
"@id": f"https://colibre.fr/marches/{marche.get('uid')}",
"name": f"{marche.get('nature')} conclu par {marche.get('acheteur_nom')} le {marche.get('dateNotification')}",
"description": marche.get("objet"),
"orderNumber": marche.get("uid"),
+2 -2
View File
@@ -6,9 +6,9 @@ NAME = "Mot de passe oublié"
register_page(
__name__,
path="/mot-de-passe-oublie",
title="Mot de passe oublié | decp.info",
title="Mot de passe oublié | colibre",
name=NAME,
description="Réinitialiser votre mot de passe decp.info.",
description="Réinitialiser votre mot de passe colibre.",
)
ERROR_MESSAGES = {
+1 -1
View File
@@ -52,7 +52,7 @@ NAME = "Observatoire"
register_page(
__name__,
path="/observatoire",
title="Observatoire | decp.info",
title="Observatoire | colibre",
name=NAME,
description="Visualisez l'état de la publication des données essentielles des marchés publics en France.",
image_url=META_CONTENT["image_url"],
+1 -1
View File
@@ -12,7 +12,7 @@ NAME = "Recherche"
register_page(
__name__,
path="/",
title="Recherche de marchés publics | decp.info",
title="Recherche de marchés publics | colibre",
name=NAME,
description="Explorez et analysez les données des marchés publics français avec cet outil libre et gratuit. Pour une commande publique accessible à toutes et tous.",
image_url=META_CONTENT["image_url"],
+1 -1
View File
@@ -8,7 +8,7 @@ NAME = "Réinitialiser le mot de passe"
register_page(
__name__,
path="/reinitialiser-mot-de-passe",
title="Nouveau mot de passe | decp.info",
title="Nouveau mot de passe | colibre",
name=NAME,
description="Choisir un nouveau mot de passe.",
)
+2 -2
View File
@@ -55,7 +55,7 @@ NAME = "Tableau"
register_page(
__name__,
path="/tableau",
title="Tableau des marchés publics | decp.info",
title="Tableau des marchés publics | colibre",
name=NAME,
description="Consultez, filtrez et exportez les données essentielles de la commande publique sous forme de tableau.",
image_url=META_CONTENT["image_url"],
@@ -149,7 +149,7 @@ layout = [
"@type": "Dataset",
"name": "Données essentielles des marchés publics français (DECP)",
"description": "Données de marchés publics exhaustives décrivant les marchés publics attribués en France depuis 2018.",
"url": "https://decp.info",
"url": "https://colibre.fr",
"sameAs": "https://www.data.gouv.fr/datasets/608c055b35eb4e6ee20eb325",
"keywords": [
"marchés publics",
+2 -2
View File
@@ -43,8 +43,8 @@ def get_title(titulaire_id: str = None) -> str:
"titulaire_nom"
)
if titulaire_nom.height > 0:
return f"Marchés publics remportés par {titulaire_nom.item(0, 0)} | decp.info"
return "Marchés publics remportés | decp.info"
return f"Marchés publics remportés par {titulaire_nom.item(0, 0)} | colibre"
return "Marchés publics remportés | colibre"
register_page(
+1 -1
View File
@@ -6,7 +6,7 @@ NAME = "Vérification email"
register_page(
__name__,
path="/verification-email",
title="Vérification email | decp.info",
title="Vérification email | colibre",
name=NAME,
description="Vérification de l'adresse email.",
)
+1 -1
View File
@@ -2,7 +2,7 @@ import httpx
from src.utils.cache import cache
GITHUB_REPO = "ColinMaudry/decp.info"
GITHUB_REPO = "ColinMaudry/colibre"
_LABEL_KEYS = {"en cours": "en_cours", "mis au vote": "au_vote"}
+1 -1
View File
@@ -17,7 +17,7 @@ PLANS = {
"env": "FRISBII_PLAN_SIMPLE",
"label": "Abonnement",
"prix_ht": 20,
"description": "Accès aux fonctionnalités supplémentaires de decp.info.",
"description": "Accès aux fonctionnalités supplémentaires de colibre.",
},
"soutien": {
"env": "FRISBII_PLAN_SOUTIEN",
+3 -3
View File
@@ -34,15 +34,15 @@ DEVELOPMENT = os.getenv("DEVELOPMENT", "False").lower() == "true"
# Accès gratuit temporaire à toutes les fonctionnalités d'abonné, le temps que
# la plateforme de paiement Frisbii valide la réception de paiements.
TOUS_ABONNES = os.getenv("TOUS_ABONNES", "False").lower() == "true"
logger = logging.getLogger("decp.info")
logger = logging.getLogger("colibre")
if DEVELOPMENT:
logger.setLevel(logging.DEBUG)
DOMAIN_NAME = (
"test.decp.info"
"test.colibre.fr"
if os.getenv("DEVELOPMENT", "False").lower() == "true"
else "decp.info"
else "colibre.fr"
)
+3 -3
View File
@@ -29,7 +29,7 @@ def make_org_jsonld(org_id, org_type, org_name=None, type_org_id="SIRET") -> dic
jsonld = {
"@type": org_types[org_type],
"name": org_name,
"url": f"https://decp.info/{org_type}s/{org_id}",
"url": f"https://{DOMAIN_NAME}/{org_type}s/{org_id}",
"sameAs": f"https://annuaire-entreprises.data.gouv.fr/etablissement/{org_id}",
"identifier": {
"@type": "PropertyValue",
@@ -45,8 +45,8 @@ def make_org_jsonld(org_id, org_type, org_name=None, type_org_id="SIRET") -> dic
META_CONTENT = {
"image_url": f"https://{DOMAIN_NAME}/assets/decp.info.png",
"title": "decp.info - exploration des marchés publics français",
"image_url": f"https://{DOMAIN_NAME}/assets/colibre.png",
"title": "colibre - exploration des marchés publics français",
"description": (
"Explorez et analysez les données des marchés publics français avec cet outil libre et gratuit. "
"Pour une commande publique accessible à toutes et tous."
+1 -1
View File
@@ -9,7 +9,7 @@ from src.utils import DEVELOPMENT
def track_search(query, category):
if len(query) >= 4 and not DEVELOPMENT and os.getenv("MATOMO_DOMAIN"):
url = "https://decp.info"
url = "https://colibre.fr"
params = {
"idsite": os.getenv("MATOMO_ID_SITE"),
"url": url,