| import datetime | |
| import streamlit as st | |
| from config import DEFAULT_ICON | |
| from shared_page import common_page_config | |
| from data_storage import add_new_user, is_admin, DB_PATH, drop_tables | |
| def admin_add_new_user(): | |
| add_new_user(st.session_state["admin_new_user_email"], st.session_state["admin_new_user_name"]) | |
| def admin_add_new_user_form(): | |
| with st.form("Add new user"): | |
| st.header("Admin add new user") | |
| st.write("Adds new user to sqlite db") | |
| st.text_input("Email Address", key="admin_new_user_email") | |
| st.text_input("Name", key="admin_new_user_name") | |
| st.form_submit_button("Submit", on_click=admin_add_new_user) | |
| def database_backup_form(): | |
| with st.container(): | |
| st.header("Utility for backing up and restoring db file") | |
| with open(DB_PATH, "rb") as f: | |
| file_name = f"backup-{datetime.datetime.now().strftime('%y%m%d%H%M')}.db" | |
| st.download_button("Download db", f, file_name=file_name) | |
| def drop_db_if_confirmed(): | |
| confirmed = st.session_state.get("delete_confirmation") == "delete" | |
| if confirmed: | |
| drop_tables() | |
| st.warning("Database tables have been dropped") | |
| else: | |
| st.warning("Must confirm deletion by typing 'delete'") | |
| def drop_db_form(): | |
| with st.form("Reset DB"): | |
| st.header("Reset DB") | |
| st.text_input("Enter 'delete' to confirm deletion", key="delete_confirmation") | |
| st.form_submit_button("Submit", on_click=drop_db_if_confirmed) | |
| def get_page(): | |
| page_title = "Admin" | |
| st.set_page_config(page_title=page_title, page_icon=DEFAULT_ICON, layout="wide") | |
| common_page_config() | |
| if not is_admin(st.session_state.get("logged_in_user")): | |
| st.write("Not authorized") | |
| st.stop() | |
| st.title(page_title) | |
| database_backup_form() | |
| admin_add_new_user_form() | |
| drop_db_form() | |
| if __name__ == "__main__": | |
| get_page() | |