day_in_history / app.py
santhosh's picture
Fix error message
ed67125 verified
import pandas as pd
import streamlit as st
from datasets import load_dataset
from datetime import datetime
# Load data
@st.cache_data # Cache data for performance improvement
def load_data(language="en"):
dataset = load_dataset("santhosh/day_in_history", language, split="train")
df = pd.DataFrame(dataset)
return df
# Function to process user input (date) and return description and reference
def process_date(day, month, year=None):
# Filter data based on selected date
if year is None or year == "":
filtered_data = df[(df["month"] == month) & (df["day"] == int(day))]
else:
filtered_data = df[
(df["year"] == int(year)) & (df["month"] == month) & (df["day"] == int(day))
]
if not filtered_data.empty:
# Prepare empty lists to store descriptions and references
descriptions = []
references = []
# Loop through filtered data and append descriptions and references
for index, row in filtered_data.iterrows():
descriptions.append(row["event_description"])
references.append(row["reference"])
# Return lists of descriptions and references
return descriptions
else:
return [f"No data found for selected date {year} {month} {day}"]
supported_languages = {
"en": "English",
"ml": "Malayalam",
}
MONTHS = [
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December",
]
def main():
# Page title and header
st.title("Day in History")
with st.form("my_form"):
st.header("Select a date")
selected_language = st.selectbox(
"Select language",
supported_languages.keys(),
format_func=lambda x: supported_languages[x],
index=0,
)
col1, col2, col3 = st.columns(3)
# Datepicker
with col1:
selected_day = st.selectbox(
"Select Day", range(1, 32), index=datetime.now().day - 1
)
with col2:
selected_month = st.selectbox(
"Select Month",
range(0, 12),
format_func=lambda x: MONTHS[x],
index=datetime.now().month - 1,
)
with col3:
selected_year = st.number_input(
"Enter Year (optional)", min_value=0, max_value=9999, value=None
)
submitted = st.form_submit_button("Submit")
if submitted:
df = load_data(selected_language)
# Process data based on selected date
if selected_year is None or selected_year == "":
filtered_data = df[
(df["month"] == int(selected_month + 1))
& (df["day"] == int(selected_day))
]
else:
filtered_data = df[
(df["year"] == int(selected_year))
& (df["month"] == selected_month + 1)
& (df["day"] == int(selected_day))
]
# Display results
if not filtered_data.empty:
st.subheader("Search Results")
for index, row in filtered_data.iterrows():
container = st.container(border=True)
container.subheader(
f"{row['year']} {MONTHS[row['month']-1]} {row['day']}"
)
container.markdown(
f"{row['event_description']}", unsafe_allow_html=True
)
if row["reference"] is not None:
container.markdown(f"{row['reference']}", unsafe_allow_html=True)
else:
st.warning(
f"No data found for selected date {selected_day} {MONTHS[selected_month]} {selected_year}"
)
if __name__ == "__main__":
main()