Two bugs fixed: 1. Arrow keys detected as ESC: sys.stdin.read(1) uses Python's internal buffer, so after reading ESC byte, the remaining escape sequence bytes ([A for up-arrow) were in Python's buffer but not visible to select.select() on the OS fd. Switched to os.read(fd, 1) which reads directly from the file descriptor, bypassing Python's buffer. 2. Footer positioned wrong: draw_footer() counted buffer items to calculate padding, but a Rich Table renders as multiple lines. Added _line_count tracker with _add_line() and _add_lines(n) so footer padding is calculated from actual rendered line count. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Autoparts DB
Sistema completo de gestión de base de datos de vehículos y autopartes con dashboard web, herramientas de web scraping y múltiples interfaces de consulta.
Descripción
Autoparts DB es una solución integral para la gestión de información de vehículos que incluye:
- Base de datos SQLite normalizada con información de marcas, modelos, motores y años
- Dashboard web moderno y responsivo para consultar y explorar datos
- Herramientas de web scraping para recopilar datos de RockAuto.com
- Interfaces de línea de comandos (CLI) y programática
- Scripts de utilidad para gestión y mantenimiento de datos
Estadísticas de la Base de Datos
| Elemento | Cantidad |
|---|---|
| Marcas | 12 |
| Modelos | 10,923 |
| Motores | 10,919 |
| Combinaciones modelo-año-motor | 12,075 |
Tecnologías Utilizadas
Backend
- Python 3 - Lenguaje principal
- SQLite 3 - Base de datos
- Flask 2.3.3 - Framework web
- BeautifulSoup4 - Web scraping
- requests - HTTP client
- lxml - Parser XML/HTML
Frontend
- HTML5 - Estructura
- Bootstrap 5.3.0 - Framework CSS
- JavaScript (ES6+) - Lógica cliente
- Font Awesome 6.0.0 - Iconos
Estructura del Proyecto
Autopartes/
├── vehicle_database/ # Sistema principal de base de datos
│ ├── sql/
│ │ └── schema.sql # Esquema de la base de datos
│ ├── scripts/
│ │ ├── database_manager.py # Gestión de la BD
│ │ ├── query_interface.py # Interfaz CLI
│ │ └── csv_importer.py # Importador CSV
│ ├── data/
│ │ ├── brands.csv # Datos de marcas
│ │ ├── engines.csv # Datos de motores
│ │ └── models.csv # Datos de modelos
│ ├── vehicle_database.db # Base de datos SQLite
│ └── setup.sh # Script de inicialización
│
├── dashboard/ # Interfaz web
│ ├── server.py # Backend Flask
│ ├── index.html # Frontend HTML
│ ├── dashboard.js # Lógica JavaScript
│ └── start_dashboard.sh # Script de inicio
│
├── console/ # Consola Pick/VT220
│ ├── main.py # Punto de entrada
│ ├── db.py # Capa de datos abstracta
│ ├── core/ # Framework (app, screens, nav, keys)
│ ├── screens/ # 14 pantallas (menú, CRUD, búsqueda)
│ ├── renderers/ # VT220 (curses) y moderno (Rich)
│ ├── utils/ # Formato y API VIN
│ └── tests/ # 116 tests
│
├── vehicle_scraper/ # Herramientas de web scraping
│ ├── rockauto_scraper.py # Scraper RockAuto
│ ├── rockauto_scraper_v2.py # Scraper mejorado
│ ├── scrape_toyota.py # Scraper Toyota
│ ├── scrape_nissan_ford_chevrolet.py
│ └── manual_input.py # Ingreso manual
│
├── add_*.py # Scripts para agregar datos
├── remove_*.py # Scripts de limpieza
└── QUICK_START.sh # Guía rápida de inicio
Consola Pick/VT220
Interfaz de terminal inspirada en los sistemas Pick/D3, 100% operada con teclado. Incluye dos modos de visualización:
- VT220 (curses): Terminal clásica verde sobre negro con caracteres de caja
- Modern (Rich): Interfaz moderna con colores y estilos TUI
# Modo clásico VT220
python -m console
# Modo moderno
python -m console --mode modern
Funcionalidades: navegación por vehículo (marca→modelo→año→motor), búsqueda por número de parte, búsqueda full-text, decodificador VIN (NHTSA), catálogo por categorías, comparador OEM vs aftermarket, y administración CRUD completa.
116 tests automatizados. Ver console/README.md para documentación completa.
Instalación
Requisitos Previos
- Python 3.8 o superior
- pip (gestor de paquetes de Python)
Pasos de Instalación
-
Clonar el repositorio
git clone https://git.consultoria-as.com/[usuario]/Autoparts-DB.git cd Autoparts-DB -
Instalar dependencias
pip install flask requests beautifulsoup4 lxml pip install rich # Opcional: para modo moderno de consola -
Inicializar la base de datos (opcional - ya incluye datos)
cd vehicle_database ./setup.sh
Uso
Iniciar el Dashboard Web
cd dashboard
python3 server.py
El dashboard estará disponible en: http://localhost:5000
Iniciar la Consola Pick/VT220
python -m console # Modo VT220 (clásico)
python -m console --mode modern # Modo moderno (Rich)
Usar la Interfaz CLI Legacy
cd vehicle_database/scripts
python3 query_interface.py
Ejecutar Web Scraping
cd vehicle_scraper
python3 rockauto_scraper_v2.py
Agregar Datos Manualmente
cd vehicle_scraper
python3 manual_input.py
API REST
El dashboard expone los siguientes endpoints:
| Endpoint | Método | Descripción |
|---|---|---|
/api/brands |
GET | Obtiene todas las marcas |
/api/models?brand=X |
GET | Obtiene modelos por marca |
/api/years |
GET | Obtiene años disponibles |
/api/engines |
GET | Obtiene motores disponibles |
/api/vehicles |
GET | Búsqueda con filtros |
Ejemplo de Uso
# Obtener todas las marcas
curl http://localhost:5000/api/brands
# Buscar vehículos por marca y año
curl "http://localhost:5000/api/vehicles?brand=Toyota&year=2020"
Esquema de Base de Datos
Tablas
brands
| Campo | Tipo | Descripción |
|---|---|---|
| id | INTEGER | Clave primaria |
| name | TEXT | Nombre de la marca |
| country | TEXT | País de origen |
| founded_year | INTEGER | Año de fundación |
models
| Campo | Tipo | Descripción |
|---|---|---|
| id | INTEGER | Clave primaria |
| brand_id | INTEGER | FK a brands |
| name | TEXT | Nombre del modelo |
| body_type | TEXT | Tipo de carrocería |
| generation | TEXT | Generación |
| production_start_year | INTEGER | Año inicio producción |
| production_end_year | INTEGER | Año fin producción |
engines
| Campo | Tipo | Descripción |
|---|---|---|
| id | INTEGER | Clave primaria |
| name | TEXT | Nombre del motor |
| displacement_cc | INTEGER | Cilindrada en cc |
| cylinders | INTEGER | Número de cilindros |
| fuel_type | TEXT | Tipo de combustible |
| power_hp | INTEGER | Potencia en HP |
| torque_nm | INTEGER | Torque en Nm |
| engine_code | TEXT | Código del motor |
years
| Campo | Tipo | Descripción |
|---|---|---|
| id | INTEGER | Clave primaria |
| year | INTEGER | Año |
model_year_engine
| Campo | Tipo | Descripción |
|---|---|---|
| id | INTEGER | Clave primaria |
| model_id | INTEGER | FK a models |
| year_id | INTEGER | FK a years |
| engine_id | INTEGER | FK a engines |
| trim_level | TEXT | Nivel de equipamiento |
| drivetrain | TEXT | Tracción |
| transmission | TEXT | Transmisión |
Diagrama de Relaciones
brands ──┐
│
├──< models ──┐
│ │
years ───┼─────────────┼──< model_year_engine
│ │
engines ─┴─────────────┘
Scripts Disponibles
Scripts de Datos
| Script | Descripción |
|---|---|
add_toyota_data.py |
Agrega datos de Toyota |
add_honda_data.py |
Agrega datos de Honda |
add_nissan_data.py |
Agrega datos de Nissan |
add_ford_data.py |
Agrega datos de Ford |
add_chevrolet_data.py |
Agrega datos de Chevrolet |
add_audi_data.py |
Agrega datos de Audi |
add_acura_data.py |
Agrega datos de Acura |
| ... | Y más marcas |
Scripts de Mantenimiento
| Script | Descripción |
|---|---|
remove_brands_and_cleanup.py |
Limpia marcas innecesarias |
check_and_remove_brands.py |
Verifica y elimina marcas |
Funcionalidades del Dashboard
Panel de Filtros
- Selección de marca
- Selección de modelo (dinámico según marca)
- Filtro por año
- Filtro por motor
Panel de Resultados
- Visualización en tarjetas
- Información detallada del vehículo
- Especificaciones del motor
- Datos de transmisión y tracción
Características
- Diseño responsivo
- Actualización en tiempo real
- Animaciones y transiciones suaves
- Soporte para múltiples idiomas
Arquitectura del Sistema
┌─────────────────┐ ┌──────────────────┐
│ RockAuto.com │────>│ Web Scraper │
└─────────────────┘ └────────┬─────────┘
│
v
┌─────────────────┐ ┌──────────────────┐
│ Manual Input │────>│ SQLite Database │
└─────────────────┘ └────────┬─────────┘
│
┌───────────────────────┼───────────────────────┐
│ │ │
v v v
┌─────────────────┐ ┌──────────────────┐ ┌──────────────────┐
│ Flask API │ │ Pick Console │ │ CSV Importer │
└────────┬────────┘ │ (VT220/Rich) │ └──────────────────┘
│ └──────────────────┘
v
┌─────────────────┐
│ Web Dashboard │
│ (Browser) │
└─────────────────┘
Contribuir
- Fork el repositorio
- Crea una rama para tu feature (
git checkout -b feature/nueva-funcionalidad) - Commit tus cambios (
git commit -am 'Agrega nueva funcionalidad') - Push a la rama (
git push origin feature/nueva-funcionalidad) - Crea un Pull Request
Licencia
Este proyecto es de uso interno.
Contacto
Para más información, contactar al equipo de desarrollo.
Autoparts DB - Sistema de Gestión de Base de Datos de Vehículos