diff --git a/bin/rate_update.py b/bin/rate_update.py index b7a63c1..0bc0f3f 100755 --- a/bin/rate_update.py +++ b/bin/rate_update.py @@ -565,10 +565,13 @@ def update_single_rate(programmer_type): return True -def update_rate_files(): +def update_rate_files(force_update=False): """ Actualiza los archivos de tarifas con datos de Perplexity. Crea un archivo por tipo de programador con la tarifa por hora general. + + Parámetros: + force_update (bool): Si es True, actualiza todos los tipos incluso si ya existen archivos. """ # Obtener modelo configurado model = get_ai_model() @@ -590,10 +593,10 @@ def update_rate_files(): programmer_types = get_programmer_types() logger.info(f"Procesando {len(programmer_types)} tipos de programadores.") - # Procesamos primero devops si bash está pendiente + # Procesamos primero devops siempre que force_update sea True o bash esté pendiente devops_rate = None - need_devops_for_bash = 'bash' in programmer_types and not (RATES_DIR / "bash.rate").exists() - need_process_devops = 'devops' in programmer_types and not (RATES_DIR / "devops.rate").exists() + need_devops_for_bash = ('bash' in programmer_types and (not (RATES_DIR / "bash.rate").exists() or force_update)) + need_process_devops = ('devops' in programmer_types and (not (RATES_DIR / "devops.rate").exists() or force_update)) # Si necesitamos la tarifa de devops para bash, la procesamos primero if need_devops_for_bash and need_process_devops: @@ -637,7 +640,7 @@ def update_rate_files(): # Mostrar el resultado en la consola result_message = f"Tarifa para devops: {devops_rate:.2f} USD/hora" - logger.info(f"Creado archivo {devops_rate_file} con valor: {devops_rate:.2f}") + logger.info(f"{'Actualizado' if force_update else 'Creado'} archivo {devops_rate_file} con valor: {devops_rate:.2f}") show_result(result_message) # Actualizamos la lista de tipos pendientes @@ -664,8 +667,8 @@ def update_rate_files(): # Comprobar si ya existe el archivo para este tipo de programador rate_file = RATES_DIR / f"{programmer_type}.rate" - # Si el archivo ya existe, saltamos este tipo - if rate_file.exists(): + # Si el archivo ya existe y no estamos forzando la actualización, saltamos este tipo + if rate_file.exists() and not force_update: logger.info(f"El archivo {rate_file} ya existe. Saltando.") continue @@ -716,7 +719,7 @@ def update_rate_files(): # Mostrar el resultado en la consola result_message = f"Tarifa para {programmer_type}: {rate:.2f} USD/hora" - logger.info(f"Creado archivo {rate_file} con valor: {rate:.2f}") + logger.info(f"{'Actualizado' if force_update and rate_file.exists() else 'Creado'} archivo {rate_file} con valor: {rate:.2f}") show_result(result_message) # Pequeña pausa para no sobrecargar la API @@ -835,6 +838,8 @@ if __name__ == "__main__": parser.add_argument('-l', '--list', action='store_true', help='Listar todas las tarifas disponibles') parser.add_argument('-t', '--type', choices=valid_types, help=f'Actualizar la tarifa para un tipo específico de programador. Tipos válidos: {valid_types_str}') + parser.add_argument('-i', '--init', action='store_true', + help='Actualizar todas las tarifas, incluso si ya existen archivos') args = parser.parse_args() # Configurar nivel de log según parámetros @@ -860,8 +865,19 @@ if __name__ == "__main__": logger.info("Usando lista interna para validación básica de códigos de país.") try: + # Si se solicita inicializar/actualizar todas las tarifas + if args.init: + logger.info("Iniciando actualización forzada de todas las tarifas...") + + if not args.quiet: + print("Actualizando todas las tarifas (forzado)...") + + update_rate_files(force_update=True) + + if not args.quiet: + print("Proceso de actualización forzada completado exitosamente.") # Si se especifica un tipo de programador, actualizar solo ese tipo - if args.type: + elif args.type: logger.info(f"Actualizando tarifa para el tipo: {args.type}") if not args.quiet: print(f"Actualizando tarifa para {args.type}...") @@ -873,11 +889,11 @@ if __name__ == "__main__": elif not success: sys.exit(1) else: - # Actualizar todos los archivos de tarifas - logger.info("Iniciando actualización de tarifas...") + # Actualizar archivos de tarifas faltantes + logger.info("Iniciando actualización de tarifas faltantes...") if not args.quiet: - print("Actualizando tarifas...") + print("Actualizando tarifas faltantes...") update_rate_files()