Files
xinjian0101-continuity-dire…/scripts/smoke_import.py
xinjian0101 2f3428b6dd feat: release Continuity Director v0.8.20 after 20 iterations
Merge 20 sequential plugin iterations covering lifecycle validation, frontend smoke tests, six reliability nodes, bilingual help pages, installable ZIP packaging, and expanded CI.
2026-06-19 15:32:07 +08:00

44 lines
1.5 KiB
Python

from __future__ import annotations
import importlib.util
import sys
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
PACKAGE = "continuity_director_smoke"
def load_package():
spec = importlib.util.spec_from_file_location(
PACKAGE,
ROOT / "__init__.py",
submodule_search_locations=[str(ROOT)],
)
if spec is None or spec.loader is None:
raise RuntimeError("unable to create package spec")
module = importlib.util.module_from_spec(spec)
sys.modules[PACKAGE] = module
spec.loader.exec_module(module)
return module
def main() -> None:
package = load_package()
mappings = package.NODE_CLASS_MAPPINGS
displays = package.NODE_DISPLAY_NAME_MAPPINGS
assert mappings, "NODE_CLASS_MAPPINGS is empty"
assert set(mappings) == set(displays), "display mappings do not match node mappings"
assert package.WEB_DIRECTORY == "./js"
for name, node_class in mappings.items():
inputs = node_class.INPUT_TYPES()
assert isinstance(inputs, dict), f"{name}.INPUT_TYPES did not return a dict"
assert hasattr(node_class, "FUNCTION"), f"{name} has no FUNCTION"
assert hasattr(node_class, "RETURN_TYPES"), f"{name} has no RETURN_TYPES"
instance = node_class()
assert callable(getattr(instance, node_class.FUNCTION)), f"{name} function is not callable"
print(f"ComfyUI lifecycle smoke passed: {len(mappings)} nodes, WEB_DIRECTORY={package.WEB_DIRECTORY}")
if __name__ == "__main__":
main()