Améliorations de typage

This commit is contained in:
Colin Maudry
2026-03-30 14:58:18 +02:00
parent 9e8811e080
commit 24e0cee2b1
4 changed files with 72 additions and 60 deletions
+6 -12
View File
@@ -3,9 +3,7 @@ name = "decp.info"
description = "Interface d'exploration et d'analyse des marchés publics français."
version = "2.7.1"
requires-python = ">= 3.10"
authors = [
{ name = "Colin Maudry", email = "colin@colmo.tech" }
]
authors = [{ name = "Colin Maudry", email = "colin@colmo.tech" }]
dependencies = [
"dash==3.4.0",
"dash[compress]",
@@ -19,7 +17,7 @@ dependencies = [
"pandas", # utilisé pour la création de certains graphiques
"unidecode",
"dash-leaflet",
"dash-extensions"
"dash-extensions",
]
[project.optional-dependencies]
@@ -30,19 +28,15 @@ dev = [
"selenium",
"webdriver-manager",
"dash[testing]",
"fastexcel"
"fastexcel",
]
[tool.pytest.ini_options]
pythonpath = [
"src"
]
testpaths = [
"tests"
]
pythonpath = ["src"]
testpaths = ["tests"]
env = [
"DATA_FILE_PARQUET_PATH=tests/test.parquet",
"DEVELOPMENT=true",
"DATA_SCHEMA_PATH=/home/colin/git/decp-processing/dist/schema.json"
"DATA_SCHEMA_PATH=/home/colin/git/decp-processing/dist/schema.json",
]
addopts = "-p no:warnings"
+1 -1
View File
@@ -13,7 +13,7 @@ load_dotenv()
# os.environ["DATA_FILE_PARQUET_PATH"]
development = os.getenv("DEVELOPMENT").lower() == "true"
development = os.getenv("DEVELOPMENT", "").lower() == "true"
meta_tags = [
{"name": "viewport", "content": "width=device-width, initial-scale=1"},
+11 -6
View File
@@ -39,7 +39,7 @@ from src.utils import (
)
def get_title(acheteur_id: str = None) -> str:
def get_title(acheteur_id: str | None = None) -> str:
acheteur_nom = df_acheteurs.filter(pl.col("acheteur_id") == acheteur_id).select(
"acheteur_nom"
)
@@ -326,13 +326,13 @@ def update_acheteur_stats(data):
Input(component_id="acheteur_url", component_property="pathname"),
Input(component_id="acheteur_year", component_property="value"),
)
def get_acheteur_marches_data(url, acheteur_year: str) -> tuple:
def get_acheteur_marches_data(url, ach_year: str) -> tuple:
acheteur_siret = url.split("/")[-1]
lff = df.lazy()
lff = lff.filter(pl.col("acheteur_id") == acheteur_siret)
if acheteur_year and acheteur_year != "Toutes les années":
acheteur_year = int(acheteur_year)
lff = lff.filter(pl.col("dateNotification").dt.year() == acheteur_year)
if ach_year and ach_year != "Toutes les années":
ach_year: int = int(ach_year)
lff = lff.filter(pl.col("dateNotification").dt.year() == ach_year)
lff = lff.sort(["dateNotification", "uid"], descending=True, nulls_last=True)
dff: pl.DataFrame = lff.collect(engine="streaming")
download_disabled, download_text, download_title = get_button_properties(dff.height)
@@ -412,7 +412,12 @@ def download_acheteur_data(
prevent_initial_call=True,
)
def download_filtered_acheteur_data(
data, n_clicks, acheteur_nom, filter_query, sort_by, hidden_columns: list = None
data,
n_clicks,
acheteur_nom,
filter_query,
sort_by,
hidden_columns: list | None = None,
):
lff: pl.LazyFrame = pl.LazyFrame(
data
+34 -21
View File
@@ -699,21 +699,21 @@ def prepare_table_data(
def prepare_dashboard_data(
lff: pl.LazyFrame,
dashboard_year,
dashboard_acheteur_id,
dashboard_acheteur_categorie,
dashboard_acheteur_departement_code,
dashboard_titulaire_id,
dashboard_titulaire_categorie,
dashboard_titulaire_departement_code,
dashboard_marche_type,
dashboard_marche_objet,
dashboard_marche_code_cpv,
dashboard_marche_considerations_sociales,
dashboard_marche_considerations_environnementales,
dashboard_marche_techniques,
dashboard_marche_innovant,
dashboard_marche_sous_traitance_declaree,
dashboard_year=None,
dashboard_acheteur_id=None,
dashboard_acheteur_categorie=None,
dashboard_acheteur_departement_code=None,
dashboard_titulaire_id=None,
dashboard_titulaire_categorie=None,
dashboard_titulaire_departement_code=None,
dashboard_marche_type=None,
dashboard_marche_objet=None,
dashboard_marche_code_cpv=None,
dashboard_marche_considerations_sociales=None,
dashboard_marche_considerations_environnementales=None,
dashboard_marche_techniques=None,
dashboard_marche_innovant=None,
dashboard_marche_sous_traitance_declaree=None,
dashboard_montant_min=None,
dashboard_montant_max=None,
) -> pl.LazyFrame:
@@ -728,20 +728,28 @@ def prepare_dashboard_data(
lff = lff.filter(pl.col("acheteur_id").str.contains(dashboard_acheteur_id))
else:
if dashboard_acheteur_categorie:
lff = lff.filter(pl.col("acheteur_categorie") == dashboard_acheteur_categorie)
lff = lff.filter(
pl.col("acheteur_categorie") == dashboard_acheteur_categorie
)
if dashboard_acheteur_departement_code:
lff = lff.filter(
pl.col("acheteur_departement_code").is_in(dashboard_acheteur_departement_code)
pl.col("acheteur_departement_code").is_in(
dashboard_acheteur_departement_code
)
)
if dashboard_titulaire_id:
lff = lff.filter(pl.col("titulaire_id").str.contains(dashboard_titulaire_id))
else:
if dashboard_titulaire_categorie:
lff = lff.filter(pl.col("titulaire_categorie") == dashboard_titulaire_categorie)
lff = lff.filter(
pl.col("titulaire_categorie") == dashboard_titulaire_categorie
)
if dashboard_titulaire_departement_code:
lff = lff.filter(
pl.col("titulaire_departement_code").is_in(dashboard_titulaire_departement_code)
pl.col("titulaire_departement_code").is_in(
dashboard_titulaire_departement_code
)
)
if dashboard_marche_type:
@@ -756,8 +764,13 @@ def prepare_dashboard_data(
if dashboard_marche_innovant and dashboard_marche_innovant != "all":
lff = lff.filter(pl.col("marcheInnovant") == dashboard_marche_innovant)
if dashboard_marche_sous_traitance_declaree and dashboard_marche_sous_traitance_declaree != "all":
lff = lff.filter(pl.col("sousTraitanceDeclaree") == dashboard_marche_sous_traitance_declaree)
if (
dashboard_marche_sous_traitance_declaree
and dashboard_marche_sous_traitance_declaree != "all"
):
lff = lff.filter(
pl.col("sousTraitanceDeclaree") == dashboard_marche_sous_traitance_declaree
)
if dashboard_marche_techniques:
lff = lff.filter(