Spaces:
Running
Running
| #!/usr/bin/env python3 | |
| """ | |
| Простой тест для проверки импорта основных зависимостей после исправления конфликта | |
| """ | |
| import sys | |
| def test_imports(): | |
| """Проверяет что все основные зависимости импортируются без ошибок""" | |
| print("🧪 Тестирование импорта зависимостей...") | |
| errors = [] | |
| # Тестируем основные зависимости | |
| test_packages = [ | |
| ("gradio", "Gradio framework"), | |
| ("bandit", "Bandit security scanner"), | |
| ("detect_secrets", "Detect Secrets scanner"), | |
| ("semgrep", "Semgrep scanner"), | |
| ("smolagents", "SmolaAgents MCP framework"), | |
| ("agno", "Agno AI agent framework"), | |
| ("rich", "Rich text formatting"), | |
| ("fastapi", "FastAPI framework"), | |
| ("uvicorn", "Uvicorn ASGI server"), | |
| ("pandas", "Pandas data analysis"), | |
| ("numpy", "Numpy arrays"), | |
| ("pydantic", "Pydantic data validation"), | |
| ("aiohttp", "Async HTTP client"), | |
| ("requests", "HTTP requests library"), | |
| ("click", "Click CLI framework"), | |
| ("yaml", "PyYAML parser"), | |
| ("toml", "TOML parser"), | |
| ("dotenv", "Python dotenv") | |
| ] | |
| success_count = 0 | |
| for package, description in test_packages: | |
| try: | |
| if package == "yaml": | |
| import yaml | |
| elif package == "dotenv": | |
| from dotenv import load_dotenv | |
| else: | |
| __import__(package) | |
| print(f"✅ {package}: {description}") | |
| success_count += 1 | |
| except ImportError as e: | |
| error_msg = f"❌ {package}: {description} - {str(e)}" | |
| print(error_msg) | |
| errors.append(error_msg) | |
| except Exception as e: | |
| error_msg = f"⚠️ {package}: {description} - Unexpected error: {str(e)}" | |
| print(error_msg) | |
| errors.append(error_msg) | |
| print(f"\n📊 Результаты тестирования:") | |
| print(f"✅ Успешно импортировано: {success_count}/{len(test_packages)}") | |
| print(f"❌ Ошибок импорта: {len(errors)}") | |
| if errors: | |
| print(f"\n❌ Ошибки:") | |
| for error in errors: | |
| print(f" {error}") | |
| return False | |
| else: | |
| print(f"\n🎉 Все зависимости импортируются корректно!") | |
| return True | |
| def test_rich_version(): | |
| """Проверяет версию rich и совместимость с semgrep и smolagents""" | |
| print("\n🔍 Проверка версии Rich...") | |
| try: | |
| import rich | |
| # Пробуем получить версию через importlib.metadata (более надежный способ) | |
| try: | |
| from importlib.metadata import version | |
| rich_version_str = version('rich') | |
| except ImportError: | |
| # Fallback для старых версий Python | |
| import pkg_resources | |
| rich_version_str = pkg_resources.get_distribution('rich').version | |
| print(f"✅ Rich версия: {rich_version_str}") | |
| # Проверяем что rich >= 13.9.4 (требование smolagents) | |
| from packaging import version as pkg_version | |
| rich_version = pkg_version.parse(rich_version_str) | |
| min_required = pkg_version.parse("13.9.4") | |
| if rich_version >= min_required: | |
| print(f"✅ Rich версия {rich_version_str} соответствует требованиям smolagents (>=13.9.4)") | |
| else: | |
| print(f"⚠️ Rich версия {rich_version_str} может быть несовместима с smolagents (требуется >=13.9.4)") | |
| return False | |
| # Пробуем импортировать функции, которые используют semgrep и smolagents | |
| from rich.console import Console | |
| from rich.table import Table | |
| print("✅ Rich Console и Table импортируются корректно") | |
| return True | |
| except Exception as e: | |
| print(f"❌ Ошибка при проверке Rich: {str(e)}") | |
| return False | |
| def main(): | |
| """Основная функция тестирования""" | |
| print("🔒 Тест совместимости зависимостей VulnBuster") | |
| print("=" * 60) | |
| # Тестируем импорты | |
| imports_ok = test_imports() | |
| # Тестируем версию Rich | |
| rich_ok = test_rich_version() | |
| print("\n" + "=" * 60) | |
| if imports_ok and rich_ok: | |
| print("🎉 Все тесты пройдены успешно!") | |
| print("💡 Теперь можно запустить: docker build -t vulnbuster .") | |
| sys.exit(0) | |
| else: | |
| print("❌ Некоторые тесты не пройдены") | |
| print("💡 Проверьте requirements.txt и Dockerfile") | |
| sys.exit(1) | |
| if __name__ == "__main__": | |
| main() |