Files
Autoparts-DB/console
consultoria-as 274cf30e79 perf(console): persistent DB connection, query cache, PRAGMA tuning
- Reuse a single SQLite connection instead of open/close per query
- Add in-memory cache for frequently accessed data (brands, models,
  categories) — 1000x faster on repeated access
- Enable WAL journal mode, 8MB cache, 64MB mmap for faster reads
- Cache terminal size per render cycle to avoid repeated getmaxyx()
- Close DB connection on app exit

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 02:19:50 +00:00
..

AUTOPARTES Console - Sistema Pick/VT220

Interfaz de consola para el catálogo de autopartes, inspirada en los sistemas Pick/D3 con estética de terminal VT220. Funciona 100% con teclado.

Requisitos

  • Python 3.8+
  • SQLite 3 (incluido con Python)
  • Paquete rich (solo para modo moderno)
pip install rich   # Opcional, solo para --mode modern

Inicio Rápido

# Modo VT220 (clásico, verde sobre negro)
python -m console

# Modo moderno (Rich/TUI con colores)
python -m console --mode modern

# Especificar base de datos
python -m console --db /ruta/a/vehicle_database.db

# Ver versión
python -m console --version

Modos de Visualización

VT220 (por defecto)

  • Terminal clásica verde sobre negro
  • Caracteres de dibujo de cajas (box-drawing)
  • Compatible con cualquier terminal
  • Usa la librería curses (incluida en Python)

Modern

  • Interfaz moderna con colores y estilos Rich
  • Tema azul/cian
  • Requiere pip install rich
  • Si rich no está instalado, cae automáticamente a modo VT220

Menú Principal

╔══════════════════════════════════════╗
║        AUTOPARTES v1.0.0            ║
║  Sistema de Catalogo de Autopartes  ║
╠══════════════════════════════════════╣
║  1. Buscar por Vehiculo             ║
║  2. Buscar por Numero de Parte      ║
║  3. Buscar por Texto                ║
║  4. Decodificar VIN                 ║
║  5. Catalogo por Categoria          ║
║  ──────────────────────────         ║
║  6. Admin: Partes                   ║
║  7. Admin: Fabricantes              ║
║  8. Admin: Referencias Cruzadas     ║
║  9. Import/Export                   ║
║  ──────────────────────────         ║
║  S. Estadisticas del Sistema        ║
║  0. Salir                           ║
╚══════════════════════════════════════╝

Teclas de Función

Tecla Acción
0-9 Seleccionar opción del menú / saltar a campo
ENTER Confirmar selección
ESC Regresar / Cancelar
F1 Ayuda / Lista de búsqueda
F2 Modo edición
F3 Buscar
F4 Referencias cruzadas
F5 Refrescar
F6 Vehículos relacionados
F9 Guardar
F10 Menú principal
TAB / Siguiente campo
Campo anterior
PgUp/PgDn Navegación por páginas
←→ Scroll horizontal (comparador)

Pantallas

1. Búsqueda por Vehículo

Navegación jerárquica: Marca → Modelo → Año → Motor. Cada nivel muestra una lista filtrable con búsqueda incremental.

2. Búsqueda por Número de Parte

Campo de entrada para número de parte. Busca en partes OEM, aftermarket y referencias cruzadas.

3. Búsqueda por Texto

Búsqueda full-text (FTS5) en nombres y descripciones de partes con resultados paginados.

4. Decodificador VIN

Ingresa un VIN de 17 caracteres. Consulta la API de NHTSA (con caché de 30 días) y muestra información del vehículo.

5. Catálogo por Categoría

Navega: Categorías → Grupos → Partes, independiente de la selección de vehículo.

6-9. Administración

  • Partes: CRUD completo de partes OEM
  • Fabricantes: CRUD de fabricantes aftermarket
  • Referencias Cruzadas: CRUD de referencias cruzadas entre partes
  • Import/Export: Importar CSV, exportar JSON

Detalle de Parte

Vista completa de la parte con alternativas aftermarket. F4 para referencias cruzadas, F6 para vehículos compatibles.

Comparador

Columnas lado a lado: OEM vs alternativas aftermarket con barras de calidad, porcentaje de ahorro y scroll horizontal.

Estadísticas

Dashboard con contadores de la base de datos (marcas, modelos, partes, etc.) y métricas de cobertura.

Arquitectura

console/
├── main.py                  # Punto de entrada, --mode vt220|modern
├── config.py                # Configuración (DB, colores, paginación)
├── db.py                    # Capa de datos abstracta (SQLite)
│
├── core/
│   ├── app.py               # Controlador principal
│   ├── screens.py           # Clase base Screen
│   ├── navigation.py        # Pila de navegación y breadcrumbs
│   └── keybindings.py       # Constantes de teclas y registro
│
├── screens/
│   ├── menu_principal.py    # Menú principal (12 opciones)
│   ├── vehiculo_nav.py      # Drill-down: marca → modelo → año → motor
│   ├── buscar_parte.py      # Búsqueda por número de parte
│   ├── buscar_texto.py      # Búsqueda full-text (FTS)
│   ├── vin_decoder.py       # Decodificador VIN (API NHTSA)
│   ├── catalogo.py          # Categorías → grupos → partes
│   ├── parte_detalle.py     # Detalle con alternativas
│   ├── comparador.py        # Comparador OEM vs aftermarket
│   ├── estadisticas.py      # Dashboard de estadísticas
│   ├── admin_partes.py      # CRUD partes
│   ├── admin_fabricantes.py # CRUD fabricantes
│   ├── admin_crossref.py    # CRUD referencias cruzadas
│   └── admin_import.py      # Import/Export CSV/JSON
│
├── renderers/
│   ├── base.py              # Interfaz abstracta BaseRenderer
│   ├── curses_renderer.py   # Modo VT220 (curses)
│   └── textual_renderer.py  # Modo moderno (Rich)
│
├── utils/
│   ├── formatting.py        # Formato de tablas, moneda, números
│   └── vin_api.py           # Cliente API NHTSA
│
└── tests/
    ├── test_db.py           # 36 tests - capa de datos
    ├── test_core.py         # 31 tests - keybindings, navigation, screens
    ├── test_utils.py        # 30 tests - utilidades de formato
    └── test_integration.py  # 19 tests - integración con MockRenderer

Tests

# Ejecutar todos los tests (116 total)
python -m pytest console/tests/ -v

# Ejecutar por módulo
python -m pytest console/tests/test_db.py -v
python -m pytest console/tests/test_core.py -v
python -m pytest console/tests/test_utils.py -v
python -m pytest console/tests/test_integration.py -v

Capa de Datos

La clase Database en db.py abstrae todas las consultas SQL. Diseñada para migrar de SQLite a PostgreSQL cambiando solo la implementación interna.

Métodos principales:

  • get_brands(), get_models(), get_years(), get_engines()
  • get_categories(), get_groups(), get_parts()
  • get_part(), get_alternatives(), get_cross_references()
  • search_parts(), search_part_number()
  • decode_vin(), get_stats()
  • Métodos CRUD para administración