Spaces:
Sleeping
Sleeping
File size: 5,196 Bytes
6bbbe77 5f7ff4f cb21807 472305f cb21807 472305f cb21807 472305f cb21807 6bbbe77 5f7ff4f cb21807 5f7ff4f cb21807 5f7ff4f cb21807 5f7ff4f cb21807 5f7ff4f 6bbbe77 5f7ff4f 6bbbe77 a7c6e8d 6bbbe77 a7c6e8d 6bbbe77 a7c6e8d 6bbbe77 a7c6e8d 472305f 5f7ff4f 6bbbe77 5f7ff4f 6bbbe77 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
import streamlit as st
import pandas as pd
from datetime import datetime
import os
from huggingface_hub import HfApi, upload_file, list_repo_files, hf_hub_download
# Configuration for Hugging Face Repository
REPO_ID = "https://huggingface.co/spaces/MarcosRodrigo/Breakfast-Poll" # Replace with your repository ID
HISTORY_DIR = "history" # Directory within the repository to store history
# Hugging Face API (requires a token with write access)
hf_token = st.secrets["HF_TOKEN"] # Store your token in Streamlit secrets
api = HfApi()
# Initialize session state for temporary and historical storage
if "users" not in st.session_state:
st.session_state.users = []
if "current_selections" not in st.session_state:
st.session_state.current_selections = []
# Load history from the repository
def load_history():
history = []
files_in_repo = list_repo_files(REPO_ID, token=hf_token)
history_files = [f for f in files_in_repo if f.startswith(f"{HISTORY_DIR}/") and f.endswith(".txt")]
for file in history_files:
local_filepath = hf_hub_download(repo_id=REPO_ID, filename=file, token=hf_token)
summary_df = pd.read_csv(local_filepath)
date = file.split("/")[-1].split(".txt")[0]
history.append({"Date": date, "Summary": summary_df})
return history
# Save the current summary to a text file and upload to the repository
def save_summary_to_file(summary_df):
timestamp = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
filename = f"{HISTORY_DIR}/{timestamp}.txt"
# Save the DataFrame to a local CSV file
local_filepath = f"{timestamp}.txt"
summary_df.to_csv(local_filepath, index=False)
# Upload the file to the repository
upload_file(path_or_fileobj=local_filepath, path_in_repo=filename, repo_id=REPO_ID, token=hf_token)
# Load history into session state
if "history" not in st.session_state:
st.session_state.history = load_history()
# Sidebar for navigating through different views
menu = st.sidebar.selectbox("Select View", ["Poll", "History"])
# Function to reset the current selections after submission
def reset_selections():
st.session_state.users = []
st.session_state.current_selections = []
# Poll view with four consecutive steps
if menu == "Poll":
st.title("Breakfast Poll Application")
# Step 1: User's Name
if "step" not in st.session_state:
st.session_state.step = 1
if st.session_state.step == 1:
st.header("Step 1: Enter your name")
name = st.text_input("Name:")
if st.button("Next", key="step1_next") and name: # Unique key for the button
st.session_state.users.append(name)
st.session_state.step = 2
# Step 2: Select Drinks
if st.session_state.step == 2:
st.header("Step 2: Select your drink(s)")
drinks_options = [
"Café con leche", "Colacao", "Descafeinado con leche", "Cortado",
"Aguasusia", "Aguasusia susia", "Café descafeinado con leche desnatada",
"Italiano", "Café con soja", "Té", "Manzanilla", "Nada"
]
selected_drinks = st.multiselect("Choose your drinks:", drinks_options)
if st.button("Next", key="step2_next") and selected_drinks: # Unique key for the button
st.session_state.current_selections.append({"Name": st.session_state.users[-1], "Drinks": selected_drinks})
st.session_state.step = 3
# Step 3: Select Food
if st.session_state.step == 3:
st.header("Step 3: Select your food(s)")
food_options = [
"Barrita con aceite", "Barrita con tomate", "Palmera de chocolate",
"Palmera de chocolate blanco", "Yogurt", "Pincho de tortilla", "Nada"
]
selected_food = st.multiselect("Choose your food:", food_options)
if st.button("Next", key="step3_next") and selected_food: # Unique key for the button
st.session_state.current_selections[-1]["Food"] = selected_food
st.session_state.step = 4
# Step 4: Display Summary
if st.session_state.step == 4:
st.header("Step 4: Summary of Selections")
if st.session_state.current_selections:
df = pd.DataFrame(st.session_state.current_selections)
st.table(df)
if st.button("Submit Summary", key="submit_summary"): # Unique key for the button
# Save the current summary to a text file in the repository
save_summary_to_file(df)
# Add to session state history
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
st.session_state.history.append({"Date": timestamp, "Summary": df})
st.success(f"Summary submitted at {timestamp}")
reset_selections()
st.session_state.step = 1
# History view to check past summaries
elif menu == "History":
st.title("Breakfast Poll History")
if st.session_state.history:
for record in st.session_state.history:
st.subheader(f"Date: {record['Date']}")
st.table(record["Summary"])
else:
st.write("No history records found.")
|