homework / app.py
Ricky596474230's picture
Upload 2 files
77bb6bb
raw
history blame contribute delete
No virus
5.56 kB
from datetime import datetime
import streamlit as st
from pymongo.mongo_client import MongoClient
from pymongo.server_api import ServerApi
# Function to connect to MongoDB
def connect_to_mongodb():
uri = "mongodb+srv://ricky:ykcir@cluster0.ifzrzzd.mongodb.net/?retryWrites=true&w=majority"
client = MongoClient(uri, server_api=ServerApi("1"))
db = client["todo"]
collection = db["tasks"]
return collection
# Function to validate task fields
def validate_fields(task, category, priority, deadline):
if not task or not category or not priority or not deadline:
st.warning("Please fill in all fields.")
return False
return True
# Home page
def home(collection):
# Display tasks sorted by priority
tasks = collection.find().sort("priority", -1)
for task in tasks:
st.write(f"Task ID: {task['_id']}")
st.write(f"Task: {task['task']}")
st.write(f"Category: {task['category']}")
st.write(f"Priority: {task['priority']}")
st.write(f"Deadline: {task['deadline'].strftime('%Y-%m-%d')}")
st.write("---")
# Create page
def create(collection):
# Get input from user
task = st.text_input("Task", key="create_task")
category = st.text_input("Category", key="create_category")
priority = st.number_input("Priority", min_value=1, max_value=5, key="create_priority")
deadline = st.date_input("Deadline", key="create_deadline")
if st.button("Create", key="create_button"):
if validate_fields(task, category, priority, deadline):
# Check if task already exists
if collection.find_one({"task": task}):
st.warning("Task already exists.")
else:
# Convert deadline to datetime object
deadline_datetime = datetime.combine(deadline, datetime.min.time())
# Insert task into database
new_task = {"task": task, "category": category, "priority": priority, "deadline": deadline_datetime}
collection.insert_one(new_task)
st.success("Task created successfully.")
# Edit page
def edit(collection):
# Get task titles for dropdown selection
tasks = collection.find()
task_titles = [task["task"] for task in tasks]
# Select task to edit
selected_task = st.selectbox("Select Task", [""] + task_titles, key="edit_select_task")
if selected_task:
# Get selected task
task = collection.find_one({"task": selected_task})
if task:
# Display task details
st.write(f"Task: {task['task']}")
st.write(f"Category: {task['category']}")
st.write(f"Priority: {task['priority']}")
st.write(f"Deadline: {task['deadline'].strftime('%Y-%m-%d')}")
# Get input from user
new_task = st.text_input("Task", task["task"], key="edit_task")
new_category = st.text_input("Category", task["category"], key="edit_category")
new_priority = st.number_input("Priority", min_value=1, max_value=5, value=task["priority"], key="edit_priority")
new_deadline = st.date_input("Deadline", task["deadline"].date(), key="edit_deadline")
if st.button("Save", key="edit_button"):
if validate_fields(new_task, new_category, new_priority, new_deadline):
# Convert new deadline to datetime object
new_deadline_datetime = datetime.combine(new_deadline, datetime.min.time())
# Update task in database
updated_task = {"$set": {"task": new_task, "category": new_category, "priority": new_priority, "deadline": new_deadline_datetime}}
collection.update_one({"task": selected_task}, updated_task)
st.success("Task updated successfully.")
# Delete page
def delete(collection):
# Get task titles for dropdown selection
tasks = collection.find()
task_titles = [task["task"] for task in tasks]
# Select task to delete
selected_task = st.selectbox("Select Task", [""] + task_titles, key="delete_select_task")
if selected_task:
# Get selected task
task = collection.find_one({"task": selected_task})
if task:
# Display task details
st.write(f"Task: {task['task']}")
st.write(f"Category: {task['category']}")
st.write(f"Priority: {task['priority']}")
st.write(f"Deadline: {task['deadline'].strftime('%Y-%m-%d')}")
if st.button("Delete", key="delete_button"):
# Delete task from database
result = collection.delete_one({"task": selected_task})
if result.deleted_count > 0:
st.success("Task deleted successfully.")
else:
st.warning("Task not found.")
# Main function
def main():
st.set_page_config(layout="wide")
st.title("My List")
# Connect to MongoDB
collection = connect_to_mongodb()
# Clear all tasks
if st.button("Clear All"):
collection.delete_many({})
st.success("All tasks cleared successfully.")
# Refresh page
st.experimental_rerun()
# Create tabs
tabs = ["Home", "Create", "Edit", "Delete"]
tabs = st.tabs(tabs)
with tabs[0]:
home(collection)
with tabs[1]:
create(collection)
with tabs[2]:
edit(collection)
with tabs[3]:
delete(collection)
# Run the app
if __name__ == "__main__":
main()