import gradio as gr from pathlib import Path # Initialize Sentry first (before other imports) try: from utils.sentry_integration import initialize_sentry sentry_initialized = initialize_sentry() if sentry_initialized: print("✅ Sentry monitoring enabled") else: print("⚠️ Sentry monitoring disabled (no DSN configured)") except Exception as e: raise from utils.logger import Logger from components.login_page import LoginPage from components.dashboard_page import DashboardPage from components.review_dashboard_page import ReviewDashboardPage from utils.database import initialize_database from config import conf log = Logger() initialize_database() CSS_FILE = Path(__file__).parent / "assets" / "styles.css" custom_css = CSS_FILE.read_text(encoding="utf-8") def build_app() -> gr.Blocks: """ می‌سازد و wiring کل اپلیکیشن را انجام می‌دهد. """ demo = gr.Blocks(title=conf.APP_TITLE, css=custom_css) with demo: # حالت سراسری برنامه به‌صورت gr.State session_state = gr.State({}) gr.Markdown(f"### {conf.APP_TITLE}") # صفحات login_page = LoginPage() dashboard_page = DashboardPage() # Phase 1 interface review_dashboard_page = ReviewDashboardPage() # Phase 2 interface # اتصال رویدادها login_page.register_callbacks(dashboard_page, session_state, review_dashboard_page) dashboard_page.register_callbacks(login_page, session_state, demo, review_dashboard_page) review_dashboard_page.register_callbacks(login_page, session_state, demo) # صف پردازش گرادیو demo.queue(default_concurrency_limit=50) log.info("App Started.") return demo if __name__ == "__main__": try: log.info("Launching App ...") build_app().launch() except Exception as err: raise