Spaces:
Running
on
Zero
Running
on
Zero
#!/usr/bin/env python3 | |
""" | |
Script to generate .pyi stub files for the synchronous API wrappers. | |
This allows generating stubs without running the full ComfyUI application. | |
""" | |
import os | |
import sys | |
import logging | |
import importlib | |
# Add ComfyUI to path so we can import modules | |
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) | |
from comfy_api.internal.async_to_sync import AsyncToSyncConverter | |
from comfy_api.version_list import supported_versions | |
def generate_stubs_for_module(module_name: str) -> None: | |
"""Generate stub files for a specific module that exports ComfyAPI and ComfyAPISync.""" | |
try: | |
# Import the module | |
module = importlib.import_module(module_name) | |
# Check if module has ComfyAPISync (the sync wrapper) | |
if hasattr(module, "ComfyAPISync"): | |
# Module already has a sync class | |
api_class = getattr(module, "ComfyAPI", None) | |
sync_class = getattr(module, "ComfyAPISync") | |
if api_class: | |
# Generate the stub file | |
AsyncToSyncConverter.generate_stub_file(api_class, sync_class) | |
logging.info(f"Generated stub file for {module_name}") | |
else: | |
logging.warning( | |
f"Module {module_name} has ComfyAPISync but no ComfyAPI" | |
) | |
elif hasattr(module, "ComfyAPI"): | |
# Module only has async API, need to create sync wrapper first | |
from comfy_api.internal.async_to_sync import create_sync_class | |
api_class = getattr(module, "ComfyAPI") | |
sync_class = create_sync_class(api_class) | |
# Generate the stub file | |
AsyncToSyncConverter.generate_stub_file(api_class, sync_class) | |
logging.info(f"Generated stub file for {module_name}") | |
else: | |
logging.warning( | |
f"Module {module_name} does not export ComfyAPI or ComfyAPISync" | |
) | |
except Exception as e: | |
logging.error(f"Failed to generate stub for {module_name}: {e}") | |
import traceback | |
traceback.print_exc() | |
def main(): | |
"""Main function to generate all API stub files.""" | |
logging.basicConfig(level=logging.INFO) | |
logging.info("Starting stub generation...") | |
# Dynamically get module names from supported_versions | |
api_modules = [] | |
for api_class in supported_versions: | |
# Extract module name from the class | |
module_name = api_class.__module__ | |
if module_name not in api_modules: | |
api_modules.append(module_name) | |
logging.info(f"Found {len(api_modules)} API modules: {api_modules}") | |
# Generate stubs for each module | |
for module_name in api_modules: | |
generate_stubs_for_module(module_name) | |
logging.info("Stub generation complete!") | |
if __name__ == "__main__": | |
main() | |