From 9b4288492ce354ed9167d997f1cf952c58982fb3 Mon Sep 17 00:00:00 2001 From: "Mauro Rosero P." Date: Wed, 12 Mar 2025 12:47:54 -0500 Subject: [PATCH] =?UTF-8?q?[ADDED]=20Implementar=20opci=C3=B3n=20--init=20?= =?UTF-8?q?para=20actualizar=20todas=20las=20tarifas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 馃 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- bin/rate_update.py | 40 ++++++++++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 12 deletions(-) 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()