Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
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 pandas as pd | |
import streamlit as st | |
from huggingface_hub import HfApi | |
from streamlit_folium import st_folium | |
from src.components import show_dataframes_metrics, show_embed_code, id_review_submission, show_donations | |
from src.text_content import ( | |
CREDITS_TEXT, | |
LOGO, | |
SLOGAN, | |
) | |
from src.utils import add_latlng_col, init_map, parse_gg_sheet, is_request_in_list, parse_json_file | |
from src.map_utils import get_legend_macro | |
from src.dataframes import display_dataframe | |
from src.filter.filter import add_category | |
from src.filter.filter import HelpCategory | |
from src.ranking.ranking import sort_request | |
TOKEN = os.environ.get("HF_TOKEN", None) | |
VERIFIED_REQUESTS_URL = ( | |
"https://docs.google.com/spreadsheets/d/1PXcAtI5L95hHSXAiRl3Y4v5O4coG39S86OTfBEcvLTE/edit#gid=0" | |
) | |
REQUESTS_URL = "https://docs.google.com/spreadsheets/d/1gYoBBiBo1L18IVakHkf3t1fOGvHWb23loadyFZUeHJs/edit#gid=966953708" | |
INTERVENTIONS_URL = ( | |
"https://docs.google.com/spreadsheets/d/1eXOTqunOWWP8FRdENPs4cU9ulISm4XZWYJJNR1-SrwY/edit#gid=2089222765" | |
) | |
DOUARS_URL = "data/regions.json" | |
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 | |
# Streamlit functions | |
# Logo and Title | |
st.markdown(LOGO, unsafe_allow_html=True) | |
# st.title("Nt3awnou نتعاونو") | |
st.markdown(SLOGAN, unsafe_allow_html=True) | |
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 and initialize map with plugins | |
df = parse_gg_sheet(REQUESTS_URL) | |
if show_unverified: | |
df = add_latlng_col(df, process_column=15) | |
interventions_df = parse_gg_sheet(INTERVENTIONS_URL) | |
interventions_df = add_latlng_col(interventions_df, process_column="Automatic Extracted Coordinates") | |
verified_df = parse_gg_sheet(VERIFIED_REQUESTS_URL) | |
verified_df = add_latlng_col(verified_df, process_column="Automatic Extracted Coordinates") | |
douar_df = parse_json_file(DOUARS_URL) | |
# check if verified requests have been solved | |
solved_verified_requests = verified_df[~pd.isnull(verified_df["Status"])] | |
verified_df = verified_df[pd.isnull(verified_df["Status"])] | |
len_requests = len(df) | |
len_interventions = len(interventions_df) | |
len_verified_requests = len(verified_df) | |
len_solved_verified_requests = len(solved_verified_requests) | |
df["id"] = df.index # Needed to display request id | |
verified_df["id"] = verified_df.index # Needed to display request id | |
# keep rows with at least one request in selected_options | |
filtered_df = df[ | |
df["ما هي احتياجاتك؟ (أضفها إذا لم يتم ذكرها)"].apply(lambda x: is_request_in_list(x, selected_options, options)) | |
] | |
filtered_verified_df = verified_df[ | |
verified_df["Help Details"].apply(lambda x: is_request_in_list(x, selected_options, options)) | |
] | |
# Selection of interventions | |
( | |
selected_statuses, | |
critical_villages, | |
partially_satisfied_villages, | |
fully_satisfied_villages, | |
) = 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(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) | |
# Verified Requests table | |
verified_df = add_category(df) | |
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 aggregate | |
st.subheader("📝 **Table of aggragate") | |
aggregate = aggregate_locations(verified_df) | |
display_dataframe( | |
aggregate, [], VERIFIED_REQUESTS_URL, search_id=True, for_help_requests=True, show_link=False | |
) | |
# Requests table shelter | |
st.subheader("📝 **Table of shelter request") | |
house_request = verified_df[verified_df['Help Details'] == HelpCategory.HOUSE] | |
display_dataframe( | |
house_request, 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) | |
st.subheader("📝 **Table of sorted requests / جدول الطلبات**") | |
sorted_request = sort_request(filtered_df) | |
display_dataframe(sorted_request, 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() | |
# Credits | |
st.markdown( | |
CREDITS_TEXT, | |
unsafe_allow_html=True, | |
) | |
if auto_refresh: | |
time.sleep(number) | |
st.experimental_rerun() | |