Загрузка данных


def get_containers_list():
    """Получить список контейнеров на токене с правильным парсингом имен с пробелами"""
    try:
        # Запускаем csptest с нужными параметрами
        result = subprocess.run([
            CSPTEST, "-keyset", "-enum_cont", "-fqcn", "-verifyc"
        ], capture_output=True, text=True)
        
        containers = []
        
        # Разбиваем вывод на строки
        for line in result.stdout.split('\n'):
            line = line.strip()
            
            # Пропускаем пустые строки
            if not line:
                continue
            
            # Пропускаем служебные строки csptest
            if line.startswith("CSP Version"):
                continue
            if line.startswith("---"):
                continue
            if line.startswith("Acquire context"):
                continue
            if line.startswith("Get CryptoProvInfo"):
                continue
            if "CSP CryptAcquireContext" in line:
                continue
            if "Error:" in line:
                continue
            
            # Строка с именем контейнера обычно НЕ начинается с ключевых слов выше
            # и содержит символы \\.\ для полного имени
            # Имя может содержать пробелы, поэтому берем всю строку целиком
            
            # Вариант 1: Полное имя контейнера с префиксом \\.\
            if line.startswith('\\\\.\\'):
                containers.append(line)
            # Вариант 2: Если контейнер без префикса (маловероятно с -fqcn, но на всякий случай)
            elif not any(skip in line for skip in ["not found", "Error", "Failed"]):
                # Проверяем, что это похоже на имя контейнера (содержит хотя бы один обратный слеш)
                if '\\' in line or '_' in line or line.isalnum():
                    containers.append(line)
        
        # Удаляем дубликаты (могут появиться из-за разных форматов вывода)
        containers = list(dict.fromkeys(containers))
        
        return containers
        
    except Exception as e:
        show_error(f"Не удалось получить список контейнеров:\n{e}")
        return []