From 3f0fc85b95b61f211c9f1922ae57230f15ada905 Mon Sep 17 00:00:00 2001 From: "Dr.Lt.Data" Date: Sat, 27 Dec 2025 03:57:19 +0900 Subject: [PATCH] refactor(core): add verbose config, improve module lookup, fix is_valid_url - Add verbose config option to control CNR fetch logging - Improve get_module_name with cnr_id/aux_id fallback via repo_cnr_map - Fix is_valid_url misuse of try/finally that could cause runtime errors - Move SSH_URL_PATTERN to module-level constant for performance --- comfyui_manager/common/cnr_utils.py | 7 ++-- comfyui_manager/glob/manager_core.py | 47 ++++++++++++++++---------- comfyui_manager/legacy/manager_core.py | 21 ++++++------ pyproject.toml | 2 +- 4 files changed, 47 insertions(+), 30 deletions(-) diff --git a/comfyui_manager/common/cnr_utils.py b/comfyui_manager/common/cnr_utils.py index a9eedb9d..4112e60e 100644 --- a/comfyui_manager/common/cnr_utils.py +++ b/comfyui_manager/common/cnr_utils.py @@ -69,7 +69,10 @@ async def _get_cnr_data(cache_mode=True, dont_wait=True): form_factor = 'git-linux' else: form_factor = 'other' - + + from comfyui_manager.glob import manager_core + verbose = manager_core.get_config().get('verbose', False) + while remained: # Add comfyui_version and form_factor to the API request sub_uri = f'{base_url}/nodes?page={page}&limit=30&comfyui_version={comfyui_ver}&form_factor={form_factor}' @@ -79,7 +82,7 @@ async def _get_cnr_data(cache_mode=True, dont_wait=True): for x in sub_json_obj['nodes']: full_nodes[x['id']] = x - if page % 5 == 0: + if page % 5 == 0 and verbose: logging.info(f"FETCH ComfyRegistry Data: {page}/{sub_json_obj['totalPages']}") page += 1 diff --git a/comfyui_manager/glob/manager_core.py b/comfyui_manager/glob/manager_core.py index fa9eb808..5d4b465a 100644 --- a/comfyui_manager/glob/manager_core.py +++ b/comfyui_manager/glob/manager_core.py @@ -48,6 +48,8 @@ version_str = f"V{version_code[0]}.{version_code[1]}" + (f'.{version_code[2]}' i DEFAULT_CHANNEL = "https://raw.githubusercontent.com/ltdrdata/ComfyUI-Manager/main" DEFAULT_CHANNEL_LEGACY = "https://raw.githubusercontent.com/ltdrdata/ComfyUI-Manager/main" +# SSH git URL pattern (e.g., git@github.com:user/repo.git) +SSH_URL_PATTERN = re.compile(r"^(.+@|ssh://).+:.+$") default_custom_nodes_path = None @@ -382,16 +384,25 @@ class UnifiedManager: self.processed_install = set() def get_module_name(self, x): + # 1. Direct cnr_id lookup info = self.active_nodes.get(x) - if info is None: - # Try to find in unknown_active_nodes by comparing normalized URLs - normalized_x = git_utils.normalize_url(x) - for url, fullpath in self.unknown_active_nodes.values(): - if url is not None and git_utils.normalize_url(url) == normalized_x: - return os.path.basename(fullpath) - else: + if info is not None: return os.path.basename(info[1]) + # 2. URL/aux_id → cnr_id conversion via repo_cnr_map + cnr_info = self.get_cnr_by_repo(x) + if cnr_info is not None: + cnr_id = cnr_info['id'] + info = self.active_nodes.get(cnr_id) + if info is not None: + return os.path.basename(info[1]) + + # 3. Fallback: search unknown_active_nodes by URL + normalized_x = git_utils.normalize_url(x) + for url, fullpath in self.unknown_active_nodes.values(): + if url is not None and git_utils.normalize_url(url) == normalized_x: + return os.path.basename(fullpath) + return None def get_cnr_by_repo(self, url): @@ -1605,6 +1616,7 @@ def write_config(): 'always_lazy_install': get_config()['always_lazy_install'], 'network_mode': get_config()['network_mode'], 'db_mode': get_config()['db_mode'], + 'verbose': get_config()['verbose'], } directory = os.path.dirname(context.manager_config_path) @@ -1644,6 +1656,7 @@ def read_config(): 'network_mode': default_conf.get('network_mode', NetworkMode.PUBLIC.value).lower(), 'security_level': default_conf.get('security_level', SecurityLevel.NORMAL.value).lower(), 'db_mode': default_conf.get('db_mode', DBMode.CACHE.value).lower(), + 'verbose': get_bool('verbose', False), } except Exception: @@ -1669,6 +1682,7 @@ def read_config(): 'network_mode': NetworkMode.PUBLIC.value, 'security_level': SecurityLevel.NORMAL.value, 'db_mode': DBMode.CACHE.value, + 'verbose': False, } @@ -2058,16 +2072,15 @@ class GitProgress(RemoteProgress): def is_valid_url(url): - try: - # Check for HTTP/HTTPS URL format - result = urlparse(url) - if all([result.scheme, result.netloc]): - return True - finally: - # Check for SSH git URL format - pattern = re.compile(r"^(.+@|ssh://).+:.+$") - if pattern.match(url): - return True + # Check for HTTP/HTTPS URL format + result = urlparse(url) + if result.scheme and result.netloc: + return True + + # Check for SSH git URL format + if SSH_URL_PATTERN.match(url): + return True + return False diff --git a/comfyui_manager/legacy/manager_core.py b/comfyui_manager/legacy/manager_core.py index 1a289955..b51eef19 100644 --- a/comfyui_manager/legacy/manager_core.py +++ b/comfyui_manager/legacy/manager_core.py @@ -49,6 +49,8 @@ version_str = f"V{version_code[0]}.{version_code[1]}" + (f'.{version_code[2]}' i DEFAULT_CHANNEL = "https://raw.githubusercontent.com/Comfy-Org/ComfyUI-Manager/main" DEFAULT_CHANNEL_LEGACY = "https://raw.githubusercontent.com/ltdrdata/ComfyUI-Manager/main" +# SSH git URL pattern (e.g., git@github.com:user/repo.git) +SSH_URL_PATTERN = re.compile(r"^(.+@|ssh://).+:.+$") default_custom_nodes_path = None @@ -2069,16 +2071,15 @@ class GitProgress(RemoteProgress): def is_valid_url(url): - try: - # Check for HTTP/HTTPS URL format - result = urlparse(url) - if all([result.scheme, result.netloc]): - return True - finally: - # Check for SSH git URL format - pattern = re.compile(r"^(.+@|ssh://).+:.+$") - if pattern.match(url): - return True + # Check for HTTP/HTTPS URL format + result = urlparse(url) + if result.scheme and result.netloc: + return True + + # Check for SSH git URL format + if SSH_URL_PATTERN.match(url): + return True + return False diff --git a/pyproject.toml b/pyproject.toml index 6a20017c..3cf45955 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta" [project] name = "comfyui-manager" license = { text = "GPL-3.0-only" } -version = "4.0.3b7" +version = "4.0.3" requires-python = ">= 3.9" description = "ComfyUI-Manager provides features to install and manage custom nodes for ComfyUI, as well as various functionalities to assist with ComfyUI." readme = "README.md"