diff --git a/bin/rate_update.py b/bin/rate_update.py index f8a3d94..a383e36 100755 --- a/bin/rate_update.py +++ b/bin/rate_update.py @@ -620,12 +620,70 @@ def generate_prompt_base(programmer_type): return prompt +def list_rate_files(): + """ + Lista todas las tarifas por tipo de programador. + Si el archivo no existe, utiliza el valor por defecto. + """ + # Crear la carpeta rates si no existe + os.makedirs(RATES_DIR, exist_ok=True) + + # Obtener la lista de tipos de programadores + programmer_types = get_programmer_types() + programmer_types.sort() # Ordenar alfabéticamente + + print("Tarifas por tipo de programador:") + print("--------------------------------") + + # Primero procesamos devops para tener su tarifa actualizada para bash + devops_rate = None + devops_rate_file = RATES_DIR / "devops.rate" + + if devops_rate_file.exists(): + try: + with open(devops_rate_file, 'r', encoding='utf-8') as f: + devops_rate = float(f.read().strip()) + except (FileNotFoundError, ValueError) as e: + logger.warning(f"Error al leer tarifa de devops: {e}") + devops_rate = get_default_rate('devops') + else: + devops_rate = get_default_rate('devops') + + # Procesar cada tipo de programador + for programmer_type in programmer_types: + rate_file = RATES_DIR / f"{programmer_type}.rate" + + # Si el archivo existe, leer el valor + if rate_file.exists(): + try: + with open(rate_file, 'r', encoding='utf-8') as f: + rate = float(f.read().strip()) + except (FileNotFoundError, ValueError) as e: + logger.warning(f"Error al leer {rate_file}: {e}") + # Caso especial para bash + if programmer_type == 'bash' and devops_rate is not None: + rate = 0.4 * devops_rate + else: + rate = get_default_rate(programmer_type) + else: + # Si no existe, usar valor por defecto + # Caso especial para bash + if programmer_type == 'bash' and devops_rate is not None: + rate = 0.4 * devops_rate + else: + rate = get_default_rate(programmer_type) + logger.info(f"Usando valor predeterminado para {programmer_type}: {rate:.2f}") + + # Formatear la salida para alinear correctamente + print(f"{programmer_type.ljust(10)}: {rate:.2f} USD/hora") + 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') + parser.add_argument('-l', '--list', action='store_true', help='Listar todas las tarifas disponibles') args = parser.parse_args() # Configurar nivel de log según parámetros @@ -636,6 +694,11 @@ if __name__ == "__main__": # No es necesario declarar global aquí ya que estamos en el ámbito global SHOW_RESULTS = not args.quiet + # Si se solicita listar las tarifas, solo mostramos la lista y terminamos + if args.list: + list_rate_files() + sys.exit(0) + logger.info("Iniciando actualización de tarifas...") if not args.quiet: