Merge branch 'feature/17_filtres_num' into dev
This commit is contained in:
+18
-7
@@ -7,6 +7,7 @@ from dotenv import load_dotenv
|
|||||||
|
|
||||||
from src.utils import (
|
from src.utils import (
|
||||||
add_annuaire_link,
|
add_annuaire_link,
|
||||||
|
add_resource_link,
|
||||||
booleans_to_strings,
|
booleans_to_strings,
|
||||||
format_number,
|
format_number,
|
||||||
lf,
|
lf,
|
||||||
@@ -29,8 +30,6 @@ lf = lf.drop(
|
|||||||
[
|
[
|
||||||
"titulaire_siren",
|
"titulaire_siren",
|
||||||
"acheteur_siren",
|
"acheteur_siren",
|
||||||
"typeGroupementOperateurs",
|
|
||||||
"sourceOpenData",
|
|
||||||
"donneesActuelles",
|
"donneesActuelles",
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
@@ -45,6 +44,9 @@ lf = lf.fill_null("")
|
|||||||
# Ajout des liens vers l'annuaire
|
# Ajout des liens vers l'annuaire
|
||||||
lf = add_annuaire_link(lf)
|
lf = add_annuaire_link(lf)
|
||||||
|
|
||||||
|
# Ajout des liens open data
|
||||||
|
lf = add_resource_link(lf)
|
||||||
|
|
||||||
schema = lf.collect_schema()
|
schema = lf.collect_schema()
|
||||||
|
|
||||||
|
|
||||||
@@ -101,13 +103,13 @@ layout = [
|
|||||||
Vous pouvez appliquer un filtre pour chaque colonne en entrant du texte sous le nom de la colonne, puis en tapant sur `Entrée`.
|
Vous pouvez appliquer un filtre pour chaque colonne en entrant du texte sous le nom de la colonne, puis en tapant sur `Entrée`.
|
||||||
|
|
||||||
- Champs textuels : la recherche est insensible à la casse (majuscules/minuscules).
|
- Champs textuels : la recherche est insensible à la casse (majuscules/minuscules).
|
||||||
- Champs numériques : possibilité d'ajouter < ou > devant le chiffre recherché pour chercher des valeurs inférieures ou supérieur.
|
- Champs numériques : vous pouvez soit taper un nombre pour trouver les valeurs égales, soit le précéder de > ou < pour filtrer les valeurs supérieures ou inférieures.
|
||||||
|
|
||||||
Vous pouvez filtrer plusieurs colonnes à la fois. Vos filtres sont perdus quand vous rafraîchissez la page.
|
Vous pouvez filtrer plusieurs colonnes à la fois. Vos filtres sont remis à zéro quand vous rafraîchissez la page.
|
||||||
|
|
||||||
**Télécharger le résultat**
|
**Télécharger le résultat**
|
||||||
|
|
||||||
Vous pouvez télécharger le résultat de vos filtres en cliquant sur Télécharger au format Excel.
|
Vous pouvez télécharger le résultat de vos filtres et tris, pour les colonnes affichées, en cliquant sur Télécharger au format Excel.
|
||||||
|
|
||||||
Si vous téléchargez un volume important de données, il se peut que vous attendiez quelques minutes avant le début du téléchargement.
|
Si vous téléchargez un volume important de données, il se peut que vous attendiez quelques minutes avant le début du téléchargement.
|
||||||
"""
|
"""
|
||||||
@@ -222,11 +224,20 @@ def update_table(page_current, page_size, filter_query, sort_by, data_timestamp)
|
|||||||
State("table", "hidden_columns"),
|
State("table", "hidden_columns"),
|
||||||
prevent_initial_call=True,
|
prevent_initial_call=True,
|
||||||
)
|
)
|
||||||
def download_data(n_clicks, hidden_columns):
|
def download_data(n_clicks, hidden_columns: list = None):
|
||||||
df_to_download = df_filtered.clone()
|
df_to_download = df_filtered.clone()
|
||||||
|
|
||||||
|
print(df_to_download.columns)
|
||||||
|
|
||||||
|
# Rétablissement des colonnes source et sourceOpenData (voir add_resource_link)
|
||||||
|
df_to_download = df_to_download.with_columns(
|
||||||
|
pl.col("source").str.extract(r'href="(.*?)"').alias("sourceOpenData"),
|
||||||
|
pl.col("source").str.extract(r'">(.*?)<').alias("source"),
|
||||||
|
)
|
||||||
|
|
||||||
# Les colonnes masquées sont supprimées
|
# Les colonnes masquées sont supprimées
|
||||||
df_to_download = df_to_download.drop(hidden_columns)
|
if hidden_columns:
|
||||||
|
df_to_download = df_to_download.drop(hidden_columns)
|
||||||
|
|
||||||
def to_bytes(buffer):
|
def to_bytes(buffer):
|
||||||
df_to_download.write_excel(buffer, worksheet="DECP")
|
df_to_download.write_excel(buffer, worksheet="DECP")
|
||||||
|
|||||||
+19
-5
@@ -12,6 +12,8 @@ load_dotenv()
|
|||||||
operators = [
|
operators = [
|
||||||
["s<", "<"],
|
["s<", "<"],
|
||||||
["s>", ">"],
|
["s>", ">"],
|
||||||
|
["i<", "<"],
|
||||||
|
["i>", ">"],
|
||||||
["icontains", "contains"],
|
["icontains", "contains"],
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -31,14 +33,25 @@ def split_filter_part(filter_part):
|
|||||||
name_part = name_part.strip()
|
name_part = name_part.strip()
|
||||||
value = value_part.strip()
|
value = value_part.strip()
|
||||||
name = name_part[name_part.find("{") + 1 : name_part.rfind("}")]
|
name = name_part[name_part.find("{") + 1 : name_part.rfind("}")]
|
||||||
|
print("=>", name, operator_group[1], value)
|
||||||
|
|
||||||
return name, operator_group[1], value
|
return name, operator_group[1], value
|
||||||
|
|
||||||
return [None] * 3
|
return [None] * 3
|
||||||
|
|
||||||
|
|
||||||
def add_annuaire_link(dff: pl.LazyFrame):
|
def add_resource_link(lff: pl.LazyFrame) -> pl.LazyFrame:
|
||||||
dff = dff.with_columns(
|
lff = lff.with_columns(
|
||||||
|
(
|
||||||
|
'<a href="' + pl.col("sourceOpenData") + '">' + pl.col("source") + "</a>"
|
||||||
|
).alias("source")
|
||||||
|
)
|
||||||
|
lff = lff.drop("sourceOpenData")
|
||||||
|
return lff
|
||||||
|
|
||||||
|
|
||||||
|
def add_annuaire_link(lff: pl.LazyFrame):
|
||||||
|
lff = lff.with_columns(
|
||||||
pl.when(pl.col("titulaire_typeIdentifiant") == "SIRET")
|
pl.when(pl.col("titulaire_typeIdentifiant") == "SIRET")
|
||||||
.then(
|
.then(
|
||||||
'<a href = "https://annuaire-entreprises.data.gouv.fr/etablissement/'
|
'<a href = "https://annuaire-entreprises.data.gouv.fr/etablissement/'
|
||||||
@@ -50,7 +63,7 @@ def add_annuaire_link(dff: pl.LazyFrame):
|
|||||||
.otherwise(pl.col("titulaire_id"))
|
.otherwise(pl.col("titulaire_id"))
|
||||||
.alias("titulaire_id")
|
.alias("titulaire_id")
|
||||||
)
|
)
|
||||||
dff = dff.with_columns(
|
lff = lff.with_columns(
|
||||||
(
|
(
|
||||||
'<a href = "https://annuaire-entreprises.data.gouv.fr/etablissement/'
|
'<a href = "https://annuaire-entreprises.data.gouv.fr/etablissement/'
|
||||||
+ pl.col("acheteur_id")
|
+ pl.col("acheteur_id")
|
||||||
@@ -59,7 +72,7 @@ def add_annuaire_link(dff: pl.LazyFrame):
|
|||||||
+ "</a>"
|
+ "</a>"
|
||||||
).alias("acheteur_id")
|
).alias("acheteur_id")
|
||||||
)
|
)
|
||||||
return dff
|
return lff
|
||||||
|
|
||||||
|
|
||||||
def booleans_to_strings(lff: pl.LazyFrame) -> pl.LazyFrame:
|
def booleans_to_strings(lff: pl.LazyFrame) -> pl.LazyFrame:
|
||||||
@@ -105,8 +118,9 @@ def get_decp_data() -> pl.LazyFrame:
|
|||||||
df: pl.DataFrame = pl.read_parquet(os.getenv("DATA_FILE_PARQUET_PATH"))
|
df: pl.DataFrame = pl.read_parquet(os.getenv("DATA_FILE_PARQUET_PATH"))
|
||||||
|
|
||||||
lff: pl.LazyFrame = df.lazy()
|
lff: pl.LazyFrame = df.lazy()
|
||||||
|
|
||||||
# Remplacement des valeurs numériques par des chaînes de caractères
|
# Remplacement des valeurs numériques par des chaînes de caractères
|
||||||
lff = numbers_to_strings(lff)
|
# lff = numbers_to_strings(lff)
|
||||||
|
|
||||||
# Tri des marchés par date de notification
|
# Tri des marchés par date de notification
|
||||||
lff = lff.sort(by=["datePublicationDonnees"], descending=True, nulls_last=True)
|
lff = lff.sort(by=["datePublicationDonnees"], descending=True, nulls_last=True)
|
||||||
|
|||||||
Reference in New Issue
Block a user