import utils import streamlit as st import plotly.express as px import pandas as pd def exit_poll(): set_votes([]) del st.session_state["selected_poll_name"] def set_votes(votes=[]): poll = utils.find_poll(st.session_state["selected_poll_name"]) uuid = st.session_state["UUID"] poll["votes"][uuid] = votes def vote(): votes = st.session_state.get("vote_selected", []) set_votes(votes) def load_voting(): st.multiselect( "How do you feel?", utils.get_options(), [], on_change=vote, key="vote_selected") def is_admin(): password = st.session_state.get("selected_poll_admin_password", "") poll = utils.find_poll(st.session_state["selected_poll_name"]) return poll["admin_password"] == password def clear_votes_section(): poll = utils.find_poll(st.session_state["selected_poll_name"]) poll["votes"] = {} def delete_poll(): utils.load_polls().remove(utils.find_poll(st.session_state["selected_poll_name"])) del st.session_state["selected_poll_name"] def load_votes(): selected_poll_name = st.session_state["selected_poll_name"] poll = utils.find_poll(selected_poll_name) votes = {x: 0 for x in utils.get_options()} votes_count = 0 users_count = 0 for _,user_votes in poll["votes"].items(): users_count +=1 for vote in user_votes: votes_count +=1 if vote in votes: votes[vote] += 1 else: votes[vote] = 1 df = pd.DataFrame(list(votes.items()), columns=['Status', 'Count']) if df["Count"].sum() == 0: st.warning("No wotes yet!") else: st.success(f"Users:{users_count} | Votes:{votes_count}") fig = px.pie(df, values='Count', names='Status', title="Audiance Feedback",) st.plotly_chart(fig) st.write(df) st.button("Clear Votes", on_click=clear_votes_section, use_container_width=True) st.button("Delete Poll", on_click=delete_poll, use_container_width=True) def load(): selected_poll_name = st.session_state["selected_poll_name"] columns = st.columns(2) with columns[0]: st.button("Exit", on_click=exit_poll) with columns[1]: st.button("Refresh") st.title(selected_poll_name) if not is_admin(): load_voting() else: load_votes()