mirror of
https://github.com/comfyanonymous/ComfyUI.git
synced 2026-07-21 23:41:28 +08:00
Improve compatibility with comfyui-extra-models, improve API
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import os
|
||||
from importlib import resources as resources
|
||||
from typing import Optional
|
||||
|
||||
|
||||
def get_path_as_dict(config_dict_or_path: str | dict | None, config_path_inside_package: str, package: str = 'comfy') -> dict:
|
||||
"""
|
||||
Given a package and a filename inside the package, returns it as a JSON dict; or, returns the file pointed to by
|
||||
config_dict_or_path, when it is not None and when it exists
|
||||
|
||||
:param config_dict_or_path: a file path or dict pointing to a JSON file. If it exists, it is parsed and returned. Otherwise, when None, falls back to other defaults
|
||||
:param config_path_inside_package: a filename inside a package
|
||||
:param package: a package containing the file
|
||||
:return:
|
||||
"""
|
||||
config: dict | None = None
|
||||
|
||||
if config_dict_or_path is None:
|
||||
config_dict_or_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), config_path_inside_package)
|
||||
|
||||
if isinstance(config_dict_or_path, str):
|
||||
if config_dict_or_path.startswith("{"):
|
||||
config = json.loads(config_dict_or_path)
|
||||
else:
|
||||
if not os.path.exists(config_dict_or_path):
|
||||
with resources.as_file(resources.files(package) / config_path_inside_package) as config_path:
|
||||
with open(config_path) as f:
|
||||
config = json.load(f)
|
||||
else:
|
||||
with open(config_dict_or_path) as f:
|
||||
config = json.load(f)
|
||||
elif isinstance(config_dict_or_path, dict):
|
||||
config = config_dict_or_path
|
||||
|
||||
assert config is not None
|
||||
return config
|
||||
|
||||
|
||||
def get_package_as_path(package: str, subdir: Optional[str] = None) -> str:
|
||||
"""
|
||||
Gets the path on the file system to a package. This unpacks it completely.
|
||||
:param package: the package containing the files
|
||||
:param subdir: if specified, a subdirectory containing files (and not python packages), such as a web/ directory inside a package
|
||||
:return:
|
||||
"""
|
||||
traversable = resources.files(package)
|
||||
if subdir is not None:
|
||||
traversable = traversable / subdir
|
||||
return os.path.commonpath(list(map(str, traversable.iterdir())))
|
||||
Reference in New Issue
Block a user