From e7040c37e325eef1ca17a11ad68d234d2e5a7553 Mon Sep 17 00:00:00 2001 From: shivansh-gupta4 Date: Sat, 12 Jul 2025 14:56:53 +0530 Subject: [PATCH] Created a function get_required_frontend_version and wrote tests for it --- app/frontend_management.py | 29 ++++++++++++++++++-- server.py | 2 +- tests-unit/app_test/frontend_manager_test.py | 9 ++++++ 3 files changed, 37 insertions(+), 3 deletions(-) diff --git a/app/frontend_management.py b/app/frontend_management.py index 001ebbecb..8495b46c1 100644 --- a/app/frontend_management.py +++ b/app/frontend_management.py @@ -29,6 +29,26 @@ def frontend_install_warning_message(): This error is happening because the ComfyUI frontend is no longer shipped as part of the main repo but as a pip package instead. """.strip() +def is_valid_version(version: str) -> bool: + """Validate if a string is a valid semantic version (X.Y.Z format).""" + pattern = r"^(\d+)\.(\d+)\.(\d+)$" + return bool(re.match(pattern, version)) + +def get_required_frontend_version(): + """Get the required frontend version from requirements.txt.""" + try: + with open(requirements_path, "r", encoding="utf-8") as f: + version_str = f.readline().split("=")[-1].strip() + if not is_valid_version(version_str): + logging.error(f"Invalid version format in requirements.txt: {version_str}") + return None + return version_str + except FileNotFoundError: + logging.error("requirements.txt not found. Cannot determine required frontend version.") + return None + except Exception as e: + logging.error(f"Error reading requirements.txt: {e}") + return None def check_frontend_version(): """Check if the frontend version is up to date.""" @@ -39,8 +59,8 @@ def check_frontend_version(): try: frontend_version_str = version("comfyui-frontend-package") frontend_version = parse_version(frontend_version_str) - with open(requirements_path, "r", encoding="utf-8") as f: - required_frontend = parse_version(f.readline().split("=")[-1]) + required_frontend_str = get_required_frontend_version() + required_frontend = parse_version(required_frontend_str) if frontend_version < required_frontend: app.logger.log_startup_warning( f""" @@ -168,6 +188,11 @@ def download_release_asset_zip(release: Release, destination_path: str) -> None: class FrontendManager: CUSTOM_FRONTENDS_ROOT = str(Path(__file__).parents[1] / "web_custom_versions") + @classmethod + def get_required_frontend_version(cls) -> str: + """Get the required frontend version from requirements.txt.""" + return get_required_frontend_version() + @classmethod def default_frontend_path(cls) -> str: try: diff --git a/server.py b/server.py index 9334aa8e8..dfb846b66 100644 --- a/server.py +++ b/server.py @@ -553,7 +553,7 @@ class PromptServer(): ram_free = comfy.model_management.get_free_memory(cpu_device) vram_total, torch_vram_total = comfy.model_management.get_total_memory(device, torch_total_too=True) vram_free, torch_vram_free = comfy.model_management.get_free_memory(device, torch_free_too=True) - required_frontend_version = open(os.path.join(os.path.dirname(__file__), "requirements.txt")).readline().split("==")[1].strip() + required_frontend_version = FrontendManager.get_required_frontend_version() system_stats = { "system": { diff --git a/tests-unit/app_test/frontend_manager_test.py b/tests-unit/app_test/frontend_manager_test.py index ce67df6c6..44db1cd5b 100644 --- a/tests-unit/app_test/frontend_manager_test.py +++ b/tests-unit/app_test/frontend_manager_test.py @@ -172,3 +172,12 @@ def test_init_frontend_fallback_on_error(): # Assert assert frontend_path == "/default/path" mock_check.assert_called_once() + +def test_get_required_frontend_version(): + #Arrange + expected_version = "1.23.4" + + version = FrontendManager.get_required_frontend_version() + + #Assert + assert version == expected_version