jscholtz's picture
feat: finshed dynamic colors
b46a94b
Raw
History Blame Contribute Delete
6.93 kB
import streamlit as st
from const import BLURB
from streamlit.runtime.media_file_storage import MediaFileStorageError
import pandas as pd
from pymongo.errors import PyMongoError
import datetime
from preload import mongo_client
#### Logging
def store_data(data, mongo_client):
try:
mongo_client["poverta_educativa"]["logging"].insert_one(data)
except PyMongoError as e:
st.toast("Could not connect to our database!")
def save_report(session_state, modal=None, error=None):
if error is not None:
_save_report(session_state, modal=modal, error=error)
elif modal is not None and session_state["logging_level"] == "modal":
_save_report(session_state, modal=modal, error=error)
elif session_state["logging_level"] == "advanced":
_save_report(session_state, modal=modal, error=error)
def _save_report(session_state, modal=None, error=None):
data = {
"UniqueID": session_state["id"],
"Timestamp": str(datetime.datetime.now()),
"Start": False,
}
if session_state["view"]:
data["view"] = {
"map_name": session_state["view"].get_map_name(),
"hierarchy": session_state["view"].hierarchy,
"hierarchy_names": session_state["view"].hierarchy_names,
}
data["filters"] = {
"deprivation": session_state["filter_deprivation"],
"objective": session_state["filter_objective"],
"activities": session_state["filter_activities"],
"target": session_state["filter_target"],
}
data["modal"] = modal
data["error"] = error
store_data(data, mongo_client)
#### SIDEBAR
# This part of the code deals with the sidebar
def display_sidebar():
with st.sidebar:
try:
st.image("./graphics/Logo_CdFdOBdPdL.png")
except MediaFileStorageError:
st.write("Alternative Text: Logo")
st.header(
"Mappatura dei progetti di contrasto alla Povertà Educativa attivi in Piemonte, Liguria e Valle d'Aosta"
)
for item in BLURB:
st.write(item)
try:
st.image("./graphics/Logo_ASVAPP.png", width=60)
except MediaFileStorageError:
st.write("Alternative Text: Logo")
#### HELPERS
@st.cache_data()
def make_trues(size: int) -> pd.DataFrame:
trues = [True for _ in range(size)]
return pd.DataFrame({"true": trues})
#### Construct filter
def construct_filters(session_state, mappatura_data):
df_true = make_trues(len(mappatura_data))
target_masks = df_true["true"]
# level_masks = df_true['true']
objective_masks = df_true["true"]
activities_masks = df_true["true"]
deprivation_masks = df_true["true"]
if len(session_state["filter_target"]) > 0:
target_masks = sum(
[
mappatura_data["Target"].str.contains(item,regex=False)
for item in session_state["filter_target"]
]
)
# if len(session_state["filter_level"]) > 0:
# level_masks = sum([mappatura_data['Ambito territoriale'].str.contains(item) for item in session_state["filter_level"]])
if len(session_state["filter_objective"]) > 0:
objective_masks = sum(
[
mappatura_data["Obiettivo sintetico"].str.contains(item,regex=False)
for item in session_state["filter_objective"]
]
)
if len(session_state["filter_activities"]) > 0:
# FIXME: `Attività sitentico`
activities_masks = sum(
[
mappatura_data["Attività sintetico"].str.contains(item,regex=False)
for item in session_state["filter_activities"]
]
)
if len(session_state["filter_deprivation"]) > 0:
deprivation_masks = sum(
[
mappatura_data["Apprendimento/privazione educativa"].str.contains(item,regex=False)
for item in session_state["filter_deprivation"]
]
)
# full_masks = target_masks & level_masks & objective_masks & activities_masks & deprivation_masks & geo_masks
full_masks = (
target_masks
& objective_masks
& activities_masks
& deprivation_masks
)
return full_masks
def construct_filters_geo(session_state, mappatura_data, st_data):
df_true = make_trues(len(mappatura_data))
target_masks = df_true["true"]
# level_masks = df_true['true']
objective_masks = df_true["true"]
activities_masks = df_true["true"]
deprivation_masks = df_true["true"]
geo_masks = df_true["true"]
if len(session_state["filter_target"]) > 0:
target_masks = sum(
[
mappatura_data["Target"].str.contains(item, regex=False)
for item in session_state["filter_target"]
]
)
# if len(session_state["filter_level"]) > 0:
# level_masks = sum([mappatura_data['Ambito territoriale'].str.contains(item) for item in session_state["filter_level"]])
if len(session_state["filter_objective"]) > 0:
objective_masks = sum(
[
mappatura_data["Obiettivo sintetico"].str.contains(item,regex=False)
for item in session_state["filter_objective"]
]
)
if len(session_state["filter_activities"]) > 0:
# FIXME: `Attività sitentico`
activities_masks = sum(
[
mappatura_data["Attività sintetico"].str.contains(item,regex=False)
for item in session_state["filter_activities"]
]
)
if len(session_state["filter_deprivation"]) > 0:
deprivation_masks = sum(
[
mappatura_data["Apprendimento/privazione educativa"].str.contains(item,regex=False)
for item in session_state["filter_deprivation"]
]
)
last_level = session_state["view"].level
if last_level == 1:
geo_masks = mappatura_data["Regioni di intervento"].str.contains(
session_state["view"].hierarchy_names[-1],regex=False
)
if last_level == 2:
if (
"last_active_drawing" in st_data
and st_data["last_active_drawing"] is not None
):
geo_masks = mappatura_data["Comuni di intervento"].str.contains(
st_data["last_active_drawing"]["properties"]["name"],regex=False
)
else:
geo_masks = mappatura_data["Province di intervento"].str.contains(
session_state["view"].hierarchy_names[-1],regex=False
)
# full_masks = target_masks & level_masks & objective_masks & activities_masks & deprivation_masks & geo_masks
full_masks = (
target_masks
& objective_masks
& activities_masks
& deprivation_masks
& geo_masks
)
return full_masks