Spaces:
				
			
			
	
			
			
		Configuration error
		
	
	
	
			
			
	
	
	
	
		
		
		Configuration error
		
	| import os | |
| import json | |
| import platform | |
| import sys | |
| import numpy as np | |
| import builtins | |
| import torch | |
| import shutil | |
| import hashlib | |
| import atexit | |
| import server | |
| import gc | |
| import execution | |
| import folder_paths | |
| from functools import lru_cache | |
| from aiohttp import web | |
| from pathlib import Path | |
| from PIL import Image | |
| from PIL.PngImagePlugin import PngInfo | |
| VERSION = "0.0.1" | |
| ADDON_NAME = "AIGODLIKE-COMFYUI-TRANSLATION" | |
| COMFY_PATH = Path(folder_paths.__file__).parent | |
| CUR_PATH = Path(__file__).parent | |
| def try_get_json(path: Path): | |
| for coding in ["utf-8", "gbk"]: | |
| try: | |
| return json.loads(path.read_text(encoding=coding)) | |
| except Exception: | |
| continue | |
| return {} | |
| def get_nodes_translation(locale): | |
| path = CUR_PATH.joinpath(locale, "Nodes") | |
| if not path.exists(): | |
| path = CUR_PATH.joinpath("en_US") | |
| if not path.exists(): | |
| return {} | |
| translations = {} | |
| for jpath in path.glob("*.json"): | |
| translations.update(try_get_json(jpath)) | |
| return translations | |
| def get_category_translation(locale): | |
| path = CUR_PATH.joinpath(locale, "NodeCategory.json") | |
| if not path.exists(): | |
| path = CUR_PATH.joinpath("en_US", "NodeCategory.json") | |
| if not path.exists(): | |
| return {} | |
| return try_get_json(path) | |
| def get_menu_translation(locale): | |
| path = CUR_PATH.joinpath(locale, "Menu.json") | |
| if not path.exists(): | |
| path = CUR_PATH.joinpath("en_US", "Menu.json") | |
| if not path.exists(): | |
| return {} | |
| return try_get_json(path) | |
| def compile_translation(locale): | |
| # translations_path = CUR_PATH.joinpath(f"translations_{locale}.json") | |
| # if translations_path.exists(): | |
| # return try_get_json(translations_path) | |
| # Nodes | |
| nodes_translation = get_nodes_translation(locale) | |
| # NodeCategory | |
| node_category_translation = get_category_translation(locale) | |
| # Menus | |
| menu_translation = get_menu_translation(locale) | |
| # compile | |
| json_data = json.dumps(obj={"Nodes": nodes_translation, | |
| "NodeCategory": node_category_translation, | |
| "Menu": menu_translation | |
| }, | |
| ensure_ascii=False) | |
| # translations_path.write_text(json_data, encoding="utf-8") | |
| return json_data | |
| def compress_json(data, method="gzip"): | |
| if method == "gzip": | |
| import gzip | |
| return gzip.compress(data.encode("utf-8")) | |
| else: | |
| return data | |
| async def get_translation(request: web.Request): | |
| post = await request.post() | |
| locale = post.get("locale", "en_US") | |
| accept_encoding = request.headers.get("Accept-Encoding", "") | |
| json_data = "{}" | |
| headers = {} | |
| try: | |
| json_data = compile_translation(locale) | |
| if "gzip" in accept_encoding: | |
| json_data = compress_json(json_data, method="gzip") | |
| headers["Content-Encoding"] = "gzip" | |
| # 指定 charset 为 utf-8 | |
| # headers["Content-Type"] = "application/json; charset=utf-8" | |
| except Exception as e: | |
| sys.stderr.write(f"[agl/get_translation error]: {e}\n") | |
| sys.stderr.flush() | |
| return web.Response(status=200, body=json_data, headers=headers) | |
| def rmtree(path: Path): | |
| # unlink symbolic link | |
| if not path.exists(): | |
| return | |
| if Path(path.resolve()).as_posix() != path.as_posix(): | |
| path.unlink() | |
| return | |
| if path.is_file(): | |
| path.unlink() | |
| elif path.is_dir(): | |
| # 移除 .git | |
| if path.name == ".git": | |
| if platform.system() == "darwin": | |
| from subprocess import call | |
| call(['rm', '-rf', path.as_posix()]) | |
| elif platform.system() == "Windows": | |
| os.system(f'rd/s/q "{path.as_posix()}"') | |
| return | |
| for child in path.iterdir(): | |
| rmtree(child) | |
| try: | |
| path.rmdir() # nas 的共享盘可能会有残留 | |
| except BaseException: | |
| ... | |
| def register(): | |
| import nodes | |
| aigodlike_ext_path = COMFY_PATH.joinpath("web", "extensions", ADDON_NAME) | |
| if hasattr(nodes, "EXTENSION_WEB_DIRS"): | |
| rmtree(aigodlike_ext_path) | |
| return | |
| # 新版已经不需要复制文件了 | |
| try: | |
| if os.name == "nt": | |
| try: | |
| import _winapi | |
| _winapi.CreateJunction(CUR_PATH.as_posix(), aigodlike_ext_path.as_posix()) | |
| except WindowsError as e: | |
| shutil.copytree(CUR_PATH.as_posix(), aigodlike_ext_path.as_posix(), ignore=shutil.ignore_patterns(".git")) | |
| else: | |
| # 复制时过滤 .git | |
| shutil.copytree(CUR_PATH.as_posix(), aigodlike_ext_path.as_posix(), ignore=shutil.ignore_patterns(".git")) | |
| except Exception as e: | |
| sys.stderr.write(f"[agl/register error]: {e}\n") | |
| sys.stderr.flush() | |
| def unregister(): | |
| # 移除缓存json | |
| # for data in CUR_PATH.glob("*.json"): | |
| # if not data.name.startswith("translations_"): | |
| # continue | |
| # data.unlink() | |
| aigodlike_ext_path = COMFY_PATH.joinpath("web", "extensions", ADDON_NAME) | |
| try: | |
| rmtree(aigodlike_ext_path) | |
| except BaseException: | |
| ... | |
| register() | |
| atexit.register(unregister) | |
| NODE_CLASS_MAPPINGS = {} | |
| WEB_DIRECTORY = "./" | |