Spaces:
Building
Building
| """ | |
| Session state management module for the text analysis application. | |
| Handles initialization, clearing, and management of session state. | |
| """ | |
| import streamlit as st | |
| from typing import Dict, Any, Optional | |
| class SessionManager: | |
| """Manages Streamlit session state for the application.""" | |
| def initialize_session_state(): | |
| """Initialize all session state variables with default values.""" | |
| defaults = { | |
| 'language': 'en', | |
| 'model_size': 'trf', | |
| 'analyzer': None, | |
| 'pos_parser': None, | |
| 'reference_lists': {}, | |
| 'uploaded_file_configs': {}, | |
| 'uploaded_files_content': {}, # Store file contents in memory | |
| 'last_language_change': st.session_state.get('language', 'en'), | |
| 'show_language_warning': False | |
| } | |
| for key, default_value in defaults.items(): | |
| if key not in st.session_state: | |
| st.session_state[key] = default_value | |
| def clear_analyzers(): | |
| """Clear analyzer and parser instances (e.g., when language/model changes).""" | |
| st.session_state.analyzer = None | |
| st.session_state.pos_parser = None | |
| def handle_language_change(): | |
| """Handle language change logic.""" | |
| current_lang = st.session_state.get('language', 'en') | |
| if st.session_state.last_language_change != current_lang: | |
| SessionManager.clear_analyzers() | |
| st.session_state.last_language_change = current_lang | |
| def get_reference_lists() -> Dict[str, Any]: | |
| """Get reference lists from session state.""" | |
| return st.session_state.get('reference_lists', {}) | |
| def set_reference_lists(reference_lists: Dict[str, Any]): | |
| """Set reference lists in session state.""" | |
| st.session_state.reference_lists = reference_lists | |
| def add_reference_list(name: str, data: Dict[str, Any]): | |
| """Add a single reference list to session state.""" | |
| if 'reference_lists' not in st.session_state: | |
| st.session_state.reference_lists = {} | |
| st.session_state.reference_lists[name] = data | |
| def remove_reference_list(name: str): | |
| """Remove a reference list from session state.""" | |
| if name in st.session_state.get('reference_lists', {}): | |
| del st.session_state.reference_lists[name] | |
| def get_uploaded_file_configs() -> Dict[str, Any]: | |
| """Get uploaded file configurations from session state.""" | |
| return st.session_state.get('uploaded_file_configs', {}) | |
| def set_uploaded_file_config(file_key: str, config: Dict[str, Any]): | |
| """Set configuration for an uploaded file.""" | |
| if 'uploaded_file_configs' not in st.session_state: | |
| st.session_state.uploaded_file_configs = {} | |
| st.session_state.uploaded_file_configs[file_key] = config | |
| def get_temp_dir() -> Optional[str]: | |
| """ | |
| DEPRECATED: This method is no longer used. | |
| File handling is now done in-memory to support read-only filesystems. | |
| """ | |
| import warnings | |
| warnings.warn( | |
| "get_temp_dir() is deprecated. Use in-memory file handling instead.", | |
| DeprecationWarning, | |
| stacklevel=2 | |
| ) | |
| return None | |
| def is_custom_reference_list(name: str) -> bool: | |
| """Check if a reference list is custom (uploaded) or default.""" | |
| reference_lists = SessionManager.get_reference_lists() | |
| if name not in reference_lists: | |
| return False | |
| ref_data = reference_lists[name] | |
| if 'token' in ref_data and isinstance(ref_data['token'], dict): | |
| return ref_data['token'].get('is_custom_config', False) | |
| return False | |
| def get_session_info() -> Dict[str, Any]: | |
| """Get session state information for debugging.""" | |
| return { | |
| 'language': st.session_state.get('language'), | |
| 'model_size': st.session_state.get('model_size'), | |
| 'analyzer_loaded': st.session_state.get('analyzer') is not None, | |
| 'reference_lists_count': len(st.session_state.get('reference_lists', {})), | |
| 'uploaded_files_count': len(st.session_state.get('uploaded_file_configs', {})) | |
| } |