nouamanetazi's picture
nouamanetazi HF staff
add charts
c355b8a
import os
import time
from src.markers import display_interventions, display_solved, show_requests, show_verified_requests
from src.filters import show_requests_filters, show_interventions_filters
import folium
import streamlit as st
from huggingface_hub import HfApi
from streamlit_folium import st_folium
from src.components import show_charts, show_dataframes_metrics, show_embed_code, show_donations
from src.text_content import (
CREDITS_TEXT,
LOGO,
SLOGAN,
)
from src.utils import init_map
from src.map_utils import get_legend_macro
from src.dataframes import load_data
import gettext
gettext.install("myapplication")
TOKEN = os.environ.get("HF_TOKEN", None)
api = HfApi(TOKEN)
# Initialize Streamlit Config
st.set_page_config(
layout="wide",
initial_sidebar_state="collapsed",
page_icon="🤝",
page_title="Nt3awnou نتعاونو",
)
# Initialize States
if "sleep_time" not in st.session_state:
st.session_state.sleep_time = 2
if "auto_refresh" not in st.session_state:
st.session_state.auto_refresh = False
auto_refresh = st.sidebar.checkbox("Auto Refresh?", st.session_state.auto_refresh)
if auto_refresh:
number = st.sidebar.number_input("Refresh rate in seconds", value=st.session_state.sleep_time)
st.session_state.sleep_time = number
# Logo and Title
st.markdown(LOGO, unsafe_allow_html=True)
# st.title("Nt3awnou نتعاونو")
st.markdown(SLOGAN, unsafe_allow_html=True)
# Localization
lang_options = {
"ar": "العربية",
"fr": "Français",
"en": "English",
}
# multiple option (NOT in sidebar)
lang = st.selectbox("Choose language / اختر اللغة", list(lang_options.keys()), format_func=lambda x: lang_options[x])
if lang == "en":
_ = gettext.gettext
else:
localizator = gettext.translation("messages", localedir="locales", languages=[lang])
localizator.install()
# Initialize map
m, emergency_fgs, intervention_fgs = init_map()
fg = folium.FeatureGroup(name="Markers")
# Selection of requests
selected_options, options, show_unverified, show_interventions = show_requests_filters()
# Load data
(
df,
filtered_df,
interventions_df,
verified_df,
filtered_verified_df,
solved_verified_requests,
douar_df,
len_requests,
len_interventions,
len_solved_verified_requests,
) = load_data(show_unverified, selected_options, options)
# Selection of interventions
selected_statuses = show_interventions_filters()
# Add interventions markers to map
if show_interventions:
display_solved(solved_verified_requests, selected_statuses, fg)
display_interventions(interventions_df, selected_statuses, m, intervention_fgs)
# Add requests markers to map
if show_unverified:
show_requests(filtered_df, fg)
# Add verified requests markers to map
show_verified_requests(filtered_verified_df, emergency_fgs)
# Add legend
legend_macro = get_legend_macro(show_unverified)
# delete old legend
for child in m.get_root()._children:
pass # TODO: fix this
# if child.startswith("macro_element"):
# m.get_root()._children.remove(child)
m.get_root().add_child(legend_macro)
# add_village_names(douar_df, m)
st_folium(m, use_container_width=True, returned_objects=[], feature_group_to_add=fg, key="map")
# Embed code
show_embed_code()
# Show metrics
show_dataframes_metrics(len_requests, len_interventions, len_solved_verified_requests, lang)
# Show charts
show_charts()
# Verified Requests table
# st.divider()
# st.subheader(_("📝 **Table of verified requests**"))
# drop_cols = [
# "Phone Number",
# "id",
# "Status",
# "Intervenant ",
# "Intervention Date",
# "Any remarks",
# "VerificationStatus",
# "Automatic Extracted Coordinates",
# ]
# display_dataframe(
# verified_df, drop_cols, VERIFIED_REQUESTS_URL, search_id=True, for_help_requests=True, show_link=False
# )
# Requests table
# st.divider()
# st.subheader("📝 **Table of requests**")
# drop_cols = [
# "(عند الامكان) رقم هاتف شخص موجود في عين المكان",
# "الرجاء الضغط على الرابط التالي لمعرفة موقعك إذا كان متاحا",
# "GeoStamp",
# "GeoCode",
# "GeoAddress",
# "Status",
# "id",
# ]
# display_dataframe(filtered_df, drop_cols, REQUESTS_URL, search_id=True, for_help_requests=True)
# # Interventions table
# st.divider()
# st.subheader("📝 **Table of interventions**")
# display_dataframe(
# interventions_df,
# [], # We show NGOs contact information
# INTERVENTIONS_URL,
# search_id=False,
# status=True,
# for_help_requests=False,
# )
# Submit an id for review
# st.divider()
# id_review_submission(api)
# Donations can be made to the gouvernmental fund under the name
st.divider()
show_donations(lang)
# Credits
st.markdown(
CREDITS_TEXT,
unsafe_allow_html=True,
)
if auto_refresh:
time.sleep(number)
st.experimental_rerun()
if lang == "ar":
st.markdown(
"""
<style>
body {
text-align: right;
}
</style>
""",
unsafe_allow_html=True,
)