Files
CloudRecoveryAS/runner.py

96 lines
2.9 KiB
Python

"""Punto de entrada principal de la aplicación."""
import argparse
import sys
from pathlib import Path
ROOT_DIR = Path(__file__).parent.resolve()
if not getattr(sys, "frozen", False):
sys.path.insert(0, str(ROOT_DIR))
# Bootstrap y ODBC antes de importar módulos que usan pyodbc
from app.config.bootstrap import ensure_runtime_layout
from app.config.odbc_setup import configure_odbc_environment
ensure_runtime_layout()
configure_odbc_environment()
from PySide6.QtWidgets import QApplication
from PySide6.QtCore import Qt
from app.config import get_launch_options, initialize_env, is_panel_configured
from app.ui.main_window import MainWindow
from app.utils.logger import app_logger
def parse_args(argv: list[str] | None = None) -> argparse.Namespace:
parser = argparse.ArgumentParser(description="CloudRestoreAS")
parser.add_argument(
"--minimized",
action="store_true",
help="Inicia minimizado en la bandeja del sistema",
)
parser.add_argument(
"--start-engine",
action="store_true",
help="Inicia el motor de restauración automáticamente",
)
return parser.parse_args(argv)
def main():
"""Función principal."""
args = parse_args()
launch = get_launch_options()
initialize_env()
minimized = args.minimized or launch.minimized
panel_ok = is_panel_configured()
start_engine = args.start_engine or launch.start_engine
app_logger.info("=" * 80)
app_logger.info("CloudRestoreAS - Iniciando aplicación")
app_logger.info(f"Directorio app: {ROOT_DIR}")
if minimized:
app_logger.info("Modo: ventana oculta (--minimized o START_MINIMIZED)")
else:
app_logger.info("Modo: ventana visible; cerrar minimiza a bandeja")
if start_engine:
app_logger.info("Modo: motor auto-inicio")
if not panel_ok:
app_logger.warning(
"Servicio PANEL_BASES_ANEXO24 no configurado en config/.env — "
"complete CLOUDRESTORE_PANEL_* para enrutamiento automático."
)
app_logger.info("=" * 80)
app = QApplication(sys.argv)
app.setApplicationName("CloudRestoreAS")
app.setOrganizationName("Aduanasoft")
app.setAttribute(Qt.ApplicationAttribute.AA_EnableHighDpiScaling)
app.setQuitOnLastWindowClosed(False)
try:
window = MainWindow(
minimized=minimized,
start_engine=start_engine,
panel_configured=panel_ok,
)
if not minimized:
window.show()
app_logger.info("Ventana principal mostrada")
else:
app_logger.info("Ventana oculta; icono en bandeja del sistema")
exit_code = app.exec()
app_logger.info(f"Aplicación finalizada con código: {exit_code}")
sys.exit(exit_code)
except Exception as e:
app_logger.critical(f"Error fatal en la aplicación: {e}", exc_info=True)
sys.exit(1)
if __name__ == "__main__":
main()