test_001 / app_00.py
abxda's picture
Final clean initial commit for deployment
391b4b4
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)