import dash from dash import html import duckdb import os # --- Configuración --- CENSO_PATH = "./data/censo_manzanas_optimizado.gpq" # --- Inicialización de la App --- # Inicializa la aplicación Dash app = dash.Dash(__name__) # Variable 'server' que Gunicorn usará para iniciar la aplicación server = app.server # --- Lógica de la Consulta --- # Esta función se ejecuta UNA VEZ cuando la aplicación se inicia. def get_total_manzanas(): """ Realiza una consulta simple para contar el total de filas en el archivo GeoParquet. """ if not os.path.exists(CENSO_PATH): return "Error: No se encontró el archivo de datos. Asegúrate de que exista en ./data/" try: con = duckdb.connect(database=':memory:') # La extensión espacial es necesaria para que DuckDB entienda el tipo GEOMETRY del GeoParquet con.install_extension("spatial") con.load_extension("spatial") query = f"SELECT COUNT(*) FROM read_parquet('{CENSO_PATH}');" result = con.execute(query).fetchdf().iloc[0, 0] con.close() return f"¡Éxito! El contenedor Docker y DuckDB funcionan. Total de manzanas leídas: {result}" except Exception as e: return f"Error durante la consulta de DuckDB: {e}" # --- Layout de la Aplicación --- # Define la estructura visual de la página. app.layout = html.Div(style={'textAlign': 'center', 'fontFamily': 'Arial'}, children=[ html.H1("Prueba de Despliegue: Dash + DuckDB en Hugging Face Spaces"), html.Hr(), html.H2("Resultado de la consulta de prueba:"), html.P( id='query-result', children=get_total_manzanas(), # Llama a la función para obtener el resultado style={'fontSize': '20px', 'color': 'green' if 'Éxito' in get_total_manzanas() else 'red'} ) ]) # --- Punto de Entrada (para desarrollo local) --- if __name__ == '__main__': # Este bloque solo se ejecuta si corres 'python app_00.py' localmente. # Gunicorn no lo usa. app.run_server(debug=True)