Skip to content

Instantly share code, notes, and snippets.

@bhuiyanmobasshir94
Created April 25, 2024 03:39
Show Gist options
  • Save bhuiyanmobasshir94/6f78f566d9c794ad7c63fe09ede19860 to your computer and use it in GitHub Desktop.
Save bhuiyanmobasshir94/6f78f566d9c794ad7c63fe09ede19860 to your computer and use it in GitHub Desktop.
import streamlit as st
import sqlite3
import pandas as pd
from datetime import datetime, timedelta
# Function to calculate days left until a given date
def calculate_days_left(event_date):
current_date = datetime.now().date()
days_left = (event_date - current_date).days
return days_left
# Function to create a SQLite database and table
def create_table():
conn = sqlite3.connect("events.db")
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS events
(id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, date DATE)''')
conn.commit()
conn.close()
# Function to insert a new event into the database
def insert_event(name, date):
conn = sqlite3.connect("events.db")
c = conn.cursor()
c.execute("INSERT INTO events (name, date) VALUES (?, ?)", (name, date))
conn.commit()
conn.close()
# Function to retrieve all events from the database
def get_events():
conn = sqlite3.connect("events.db")
c = conn.cursor()
c.execute("SELECT * FROM events")
events = c.fetchall()
conn.close()
return events
# Function to update an existing event in the database
def update_event(event_id, name, date):
conn = sqlite3.connect("events.db")
c = conn.cursor()
c.execute("UPDATE events SET name=?, date=? WHERE id=?", (name, date, event_id))
conn.commit()
conn.close()
# Function to delete an event from the database
def delete_event(event_id):
conn = sqlite3.connect("events.db")
c = conn.cursor()
c.execute("DELETE FROM events WHERE id=?", (event_id,))
conn.commit()
conn.close()
# Main function to run the Streamlit app
def main():
st.title("Event Days Countdown")
# Create SQLite database table if not exists
create_table()
# Sidebar input fields for adding new events
with st.sidebar:
st.header("Add New Event")
event_name = st.text_input("Event Name")
event_date = st.date_input("Event Date")
if st.button("Add Event"):
insert_event(event_name, event_date)
st.success("Event added successfully!")
# Display events and days left
st.header("Events")
events = get_events()
if events:
for idx, event in enumerate(events):
event_id, event_name, event_date_str = event
event_date = datetime.strptime(event_date_str, "%Y-%m-%d").date()
if event_date >= datetime.now().date(): # Check if event date is in the future
days_left = calculate_days_left(event_date)
st.write(f"{idx + 1}. **{event_name}** - {days_left} days left until **{event_date.strftime('%d-%m-%Y')}**")
else:
days_passed = abs(calculate_days_left(event_date)) # Calculate days passed for past events
st.write(f"{idx + 1}. **{event_name}** - {days_passed} days passed since **{event_date.strftime('%d-%m-%Y')}**")
# Sorting functionality
sort_option = st.sidebar.selectbox("Sort by", ["Event Date", "Days Left"])
if sort_option == "Event Date":
events.sort(key=lambda x: x[2])
elif sort_option == "Days Left":
events.sort(key=lambda x: abs(calculate_days_left(datetime.strptime(x[2], "%Y-%m-%d").date())))
# Display sorted data
st.header("Sorted Events")
for idx, event in enumerate(events):
event_id, event_name, event_date_str = event
event_date = datetime.strptime(event_date_str, "%Y-%m-%d").date()
if event_date >= datetime.now().date(): # Check if event date is in the future
days_left = calculate_days_left(event_date)
st.write(f"{idx + 1}. **{event_name}** - {days_left} days left until **{event_date.strftime('%d-%m-%Y')}**")
else:
days_passed = abs(calculate_days_left(event_date)) # Calculate days passed for past events
st.write(f"{idx + 1}. **{event_name}** - {days_passed} days passed since **{event_date.strftime('%d-%m-%Y')}**")
# Update and delete functionality
st.header("Update or Delete Events")
selected_event = st.selectbox("Select Event to Update/Delete", [event[1] for event in events])
event_id = None
for event in events:
if event[1] == selected_event:
event_id = event[0]
break
if event_id:
new_name = st.text_input("New Event Name")
new_date = st.date_input("New Event Date")
if st.button("Update Event"):
update_event(event_id, new_name, new_date)
st.success("Event updated successfully!")
if st.button("Delete Event"):
delete_event(event_id)
st.success("Event deleted successfully!")
# Run the app
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment