import json from typing import Dict from db.schema import Feedback, Response from db.crud import ingest, read import pandas as pd import streamlit as st from datetime import datetime import os from dotenv import load_dotenv from views.intro_screen import username_screen from views.questions_screen import new_questions_screen from css.layout import custom_css load_dotenv() VALIDATION_CODE = os.getenv("VALIDATION_CODE") class SurveyState: """Class to handle survey state management""" def __init__(self): pass def save_state(self, prolific_id: str, current_state: Dict) -> None: """Save current state to Firebase""" try: # Saving to Firebase via the ingest function feedback = Feedback(user_id=prolific_id, time_stamp=datetime.now().isoformat(), responses=current_state["responses"]) ingest(feedback) # Ingest feedback to Firebase st.success("Your progress has been saved! You can continue later.") except Exception as e: st.error(f"Error saving state to Firebase: {e}") def load_state(self, prolific_id: str) -> Dict: """Load state for a specific user from Firebase""" try: # Retrieve the state from Firebase for the given Prolific ID state = self.get_state_from_firebase(prolific_id) if state: return state except Exception as e: st.error(f"Error loading state from Firebase: {e}") return {} class SurveyState: """Class to handle survey state management""" def __init__(self): pass @staticmethod def save_state(self, username: str, current_state: Dict) -> None: """Save current state to Firebase""" try: # Saving to Firebase via the ingest function feedback = Feedback(user_id=username, time_stamp=datetime.now().isoformat(), responses=current_state["responses"]) ingest(feedback) # Ingest feedback to Firebase st.success("Your progress has been saved! You can continue later.") except Exception as e: st.error(f"Error saving state to Firebase: {e}") def load_state(self, username: str) -> Dict: """Load state for a specific user from Firebase""" try: # Retrieve the state from Firebase for the given Prolific ID state = self.get_state_from_firebase(username) if state: return state except Exception as e: st.error(f"Error loading state from Firebase: {e}") return {} def get_state_from_firebase(self, username: str) -> Dict: # Placeholder method to simulate getting state from Firebase # In practice, you will query Firebase to get the current state data = read(username) return {} def initialization(): """Initialize session state variables.""" if "current_index" not in st.session_state: st.session_state.current_index = 0 if "username" not in st.session_state: st.session_state.username = None if "responses" not in st.session_state: st.session_state.responses = [] if "completed" not in st.session_state: st.session_state.completed = False if "survey_state" not in st.session_state: st.session_state.survey_state = SurveyState() def exit_screen(): """Display exit screen""" st.markdown("""
Your responses have been saved successfully.
You can safely close this window or start a new survey.