Files
SIB/backend/inject_routes.py

141 lines
4.1 KiB
Python

"""
Script de emergencia: Inyectar rutas directamente en la BD de producción
Ejecutar desde el servidor Render o con acceso directo a la BD.
USO: python inject_routes.py
"""
import os
import sys
# Añadir el path del backend
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from sqlmodel import Session, create_engine, select, SQLModel
from app.models.route import Route, RouteStatus
from app.core.config import settings
# Rutas de bus más importantes de Boquete / Chiriquí
SAMPLE_ROUTES = [
{
"name": "Boquete - David",
"origin_city": "Boquete",
"destination_city": "David",
"color": "#FEE715",
"direction": "outbound",
"distance_km": 38.0,
"estimated_duration_minutes": 55,
"average_speed_kmh": 40.0,
"status": RouteStatus.ACTIVE,
},
{
"name": "David - Boquete",
"origin_city": "David",
"destination_city": "Boquete",
"color": "#FEE715",
"direction": "inbound",
"distance_km": 38.0,
"estimated_duration_minutes": 55,
"average_speed_kmh": 40.0,
"status": RouteStatus.ACTIVE,
},
{
"name": "Boquete - Caldera",
"origin_city": "Boquete",
"destination_city": "Caldera",
"color": "#4CAF50",
"direction": "outbound",
"distance_km": 22.0,
"estimated_duration_minutes": 35,
"average_speed_kmh": 38.0,
"status": RouteStatus.ACTIVE,
},
{
"name": "Caldera - Boquete",
"origin_city": "Caldera",
"destination_city": "Boquete",
"color": "#4CAF50",
"direction": "inbound",
"distance_km": 22.0,
"estimated_duration_minutes": 35,
"average_speed_kmh": 38.0,
"status": RouteStatus.ACTIVE,
},
{
"name": "David - Paso Canoas",
"origin_city": "David",
"destination_city": "Paso Canoas",
"color": "#2196F3",
"direction": "outbound",
"distance_km": 52.0,
"estimated_duration_minutes": 70,
"average_speed_kmh": 45.0,
"status": RouteStatus.ACTIVE,
},
{
"name": "David - Cerro Punta",
"origin_city": "David",
"destination_city": "Cerro Punta",
"color": "#9C27B0",
"direction": "outbound",
"distance_km": 75.0,
"estimated_duration_minutes": 100,
"average_speed_kmh": 45.0,
"status": RouteStatus.ACTIVE,
},
{
"name": "David - Volcán",
"origin_city": "David",
"destination_city": "Volcán",
"color": "#FF5722",
"direction": "outbound",
"distance_km": 62.0,
"estimated_duration_minutes": 85,
"average_speed_kmh": 44.0,
"status": RouteStatus.ACTIVE,
},
{
"name": "Boquete - Dolega",
"origin_city": "Boquete",
"destination_city": "Dolega",
"color": "#00BCD4",
"direction": "outbound",
"distance_km": 28.0,
"estimated_duration_minutes": 40,
"average_speed_kmh": 42.0,
"status": RouteStatus.ACTIVE,
},
]
def inject_routes():
db_url = settings.get_database_url
engine = create_engine(db_url, echo=True)
with Session(engine) as session:
inserted = 0
skipped = 0
for route_data in SAMPLE_ROUTES:
# Verificar si ya existe
existing = session.exec(
select(Route).where(Route.name == route_data["name"])
).first()
if existing:
print(f" [SKIP] Ya existe: {route_data['name']}")
skipped += 1
continue
route = Route(**route_data)
session.add(route)
print(f" [ADD] {route_data['name']} ({route_data['origin_city']}{route_data['destination_city']})")
inserted += 1
session.commit()
print(f"\n✅ Listo: {inserted} rutas insertadas, {skipped} ya existían.")
if __name__ == "__main__":
print("🚌 Inyectando rutas de bus en producción...\n")
inject_routes()