From c8567a75b085fa8eb260b2ab3a6e5acf03280052 Mon Sep 17 00:00:00 2001 From: "Mauro Rosero P." Date: Wed, 12 Mar 2025 10:55:50 -0500 Subject: [PATCH] [IMPROVED] Optimizar la salida de consola en rate_update.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Modificar el nivel de log para mostrar solo errores y resultados importantes - Añadir función show_result para controlar la salida de resultados - Agregar opciones de línea de comandos para controlar verbosidad (-v, -q) - Mostrar solo el valor guardado para cada archivo procesado - Añadir manejo de errores global para mejor experiencia de usuario - Proporcionar retroalimentación clara sobre éxito o fracaso 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- bin/rate_update.py | 60 +++++++++++++++++++++++++++++++++++++++------- 1 file changed, 51 insertions(+), 9 deletions(-) diff --git a/bin/rate_update.py b/bin/rate_update.py index cf1d508..9553284 100755 --- a/bin/rate_update.py +++ b/bin/rate_update.py @@ -23,12 +23,18 @@ import time from pathlib import Path # Configuración de logging -logging.basicConfig( - level=logging.INFO, - format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', - handlers=[logging.StreamHandler()] -) +# Por defecto, establecemos nivel WARNING para la consola (solo errores y advertencias) +console_handler = logging.StreamHandler() +console_handler.setLevel(logging.WARNING) +console_handler.setFormatter(logging.Formatter('%(levelname)s: %(message)s')) + +# Configuración global del logger +logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', handlers=[]) logger = logging.getLogger('rate_update') +logger.addHandler(console_handler) + +# Variable para controlar si se muestra el resultado en la consola +SHOW_RESULTS = True # Verificar si pycountry está instalado, si no, instalarlo def check_install_pycountry(): @@ -458,6 +464,14 @@ def get_fallback_rate(programmer_type, region_code): return round(adjusted_rate, 2) +def show_result(message): + """ + Función para mostrar resultados en la consola. + Solo muestra mensajes si SHOW_RESULTS es True. + """ + if SHOW_RESULTS: + print(message) + def update_rate_files(): """Actualiza los archivos de tarifas con datos de Perplexity.""" # Obtener modelo configurado @@ -537,12 +551,33 @@ def update_rate_files(): # Guardar el resultado en el archivo - solo el valor numérico con dos decimales, sin salto de línea with open(rate_file, 'w', encoding='utf-8') as f: f.write(f"{rate:.2f}") + + # Registrar en el log y mostrar el resultado en la consola + result_message = f"Tarifa para {programmer_type}" + (f" en región {region_code}" if region_code else "") + f": {rate:.2f} USD" logger.info(f"Actualizado {os.path.basename(rate_file)} con valor: {rate:.2f}") + show_result(result_message) if __name__ == "__main__": + # Parámetros de línea de comandos para controlar el comportamiento + import argparse + parser = argparse.ArgumentParser(description='Actualiza tarifas por hora de diferentes tipos de programadores.') + parser.add_argument('-q', '--quiet', action='store_true', help='No mostrar resultados individuales') + parser.add_argument('-v', '--verbose', action='store_true', help='Mostrar información detallada del proceso') + args = parser.parse_args() + + # Configurar nivel de log según parámetros + if args.verbose: + console_handler.setLevel(logging.INFO) + + # Configurar si se muestran resultados + global SHOW_RESULTS + SHOW_RESULTS = not args.quiet logger.info("Iniciando actualización de tarifas...") + if not args.quiet: + print("Actualizando tarifas...") + # Verificar e instalar pycountry si es necesario pycountry_available = check_install_pycountry() @@ -555,7 +590,14 @@ if __name__ == "__main__": else: logger.info("Usando lista interna para validación básica de códigos de país.") - # Actualizar los archivos de tarifas - update_rate_files() - - logger.info("Proceso de actualización de tarifas completado.") \ No newline at end of file + try: + # Actualizar los archivos de tarifas + update_rate_files() + + if not args.quiet: + print("Proceso de actualización de tarifas completado exitosamente.") + logger.info("Proceso de actualización de tarifas completado.") + except Exception as e: + logger.error(f"Error durante la actualización de tarifas: {e}") + print(f"ERROR: {e}") + sys.exit(1) \ No newline at end of file