feat(console): scaffold project structure and config

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-15 01:29:54 +00:00
parent 140117a8e5
commit 7cf3ddc758
9 changed files with 111 additions and 0 deletions

0
console/__init__.py Normal file
View File

7
console/__main__.py Normal file
View File

@@ -0,0 +1,7 @@
"""
Allow running the package with: python -m console
"""
from console.main import main
main()

39
console/config.py Normal file
View File

@@ -0,0 +1,39 @@
"""
Configuration settings for the AUTOPARTES console application.
"""
import os
# Application metadata
VERSION = "1.0.0"
APP_NAME = "AUTOPARTES"
APP_SUBTITLE = "Sistema de Catalogo de Autopartes"
# Database path (relative to the console/ directory, resolved to absolute)
_CONSOLE_DIR = os.path.dirname(os.path.abspath(__file__))
DB_PATH = os.path.join(_CONSOLE_DIR, "..", "vehicle_database", "vehicle_database.db")
DB_PATH = os.path.normpath(DB_PATH)
# NHTSA VIN Decoder API
NHTSA_API_URL = "https://vpic.nhtsa.dot.gov/api/vehicles/DecodeVin"
VIN_CACHE_DAYS = 30
# Display defaults
DEFAULT_MODE = "vt220"
PAGE_SIZE = 15
# VT220 color pairs: (foreground, background)
# These map to curses color pair indices used by the renderer.
COLORS_VT220 = {
"header": ("green", "black"),
"footer": ("black", "green"),
"normal": ("green", "black"),
"highlight": ("black", "green"),
"border": ("green", "black"),
"title": ("white", "black"),
"error": ("red", "black"),
"info": ("cyan", "black"),
"field_label": ("green", "black"),
"field_value": ("white", "black"),
"field_active": ("black", "cyan"),
}

0
console/core/__init__.py Normal file
View File

65
console/main.py Normal file
View File

@@ -0,0 +1,65 @@
"""
Entry point for the AUTOPARTES Pick/VT220-style console application.
Usage:
python -m console # via package
python -m console.main # via module
python console/main.py # direct
"""
import argparse
import sys
from console.config import VERSION, APP_NAME, APP_SUBTITLE, DB_PATH, DEFAULT_MODE
def parse_args(argv=None):
"""Parse command-line arguments."""
parser = argparse.ArgumentParser(
prog=APP_NAME.lower(),
description=f"{APP_NAME} - {APP_SUBTITLE}",
)
parser.add_argument(
"--mode",
choices=["vt220", "modern"],
default=DEFAULT_MODE,
help=f"Display mode (default: {DEFAULT_MODE})",
)
parser.add_argument(
"--version",
action="version",
version=f"{APP_NAME} {VERSION}",
)
parser.add_argument(
"--db",
default=DB_PATH,
help="Path to the vehicle database (default: auto-detected)",
)
return parser.parse_args(argv)
def main(argv=None):
"""Main entry point: parse args, set up renderer, DB, and launch the app."""
args = parse_args(argv)
db_path = args.db
mode = args.mode
# Lazy imports so the module can be loaded without curses available
# (e.g. during tests or when just checking --version).
from console.core.database import Database
from console.renderers import create_renderer
from console.core.app import App
db = Database(db_path)
renderer = create_renderer(mode)
app = App(renderer=renderer, db=db)
try:
app.run()
finally:
db.close()
if __name__ == "__main__":
main()

View File

View File

View File

View File