Skip to main content
Glama
group_manager.py4.68 kB
""" 群組管理工具 提供組件群組的創建和管理功能 """ import time from typing import Dict, Any, Optional, List, Tuple from .client import GrasshopperClient from .component_manager import ComponentManager from .utils import hex_to_rgb class GroupManager: """群組管理器""" def __init__(self, client: Optional[GrasshopperClient] = None, component_manager: Optional[ComponentManager] = None): """ 初始化群組管理器 Args: client: Grasshopper 客戶端實例 component_manager: 組件管理器實例(用於獲取組件 ID 映射) """ self.client = client or GrasshopperClient() self.component_manager = component_manager or ComponentManager(self.client) def group_components( self, component_ids: List[str], group_name: str, color: Optional[Tuple[int, int, int]] = None, color_hex: Optional[str] = None, component_id_keys: Optional[List[str]] = None ) -> bool: """ 將多個組件群組起來 Args: component_ids: 組件實際 ID 列表 group_name: 群組名稱 color: RGB 顏色元組 (r, g, b) color_hex: 十六進制顏色字符串(如 "#FF0000") component_id_keys: 組件 ID 鍵列表(用於從映射中查找) Returns: 是否成功創建群組 """ # 如果提供了 ID 鍵列表,從映射中查找實際 ID if component_id_keys: actual_ids = [] missing_components = [] for key in component_id_keys: actual_id = self.component_manager.get_component_id(key) if actual_id: actual_ids.append(actual_id) else: missing_components.append(key) if missing_components: self.client.safe_print(f"警告: 群組中有 {len(missing_components)} 個組件找不到 ID:") for comp_id in missing_components[:5]: self.client.safe_print(f" - {comp_id}") if len(missing_components) > 5: self.client.safe_print(f" ... 還有 {len(missing_components) - 5} 個") component_ids = actual_ids if not component_ids: self.client.safe_print("錯誤: 沒有可用的組件 ID") return False # 處理顏色 if color_hex: color = hex_to_rgb(color_hex) if color is None: color = (200, 200, 200) # 默認灰色 r, g, b = color params = { "componentIds": component_ids, "groupName": group_name, "colorR": r, "colorG": g, "colorB": b } response = self.client.send_command("group_components", params) if response.get("success") and response.get("data", {}).get("success"): return True else: error = response.get("error") or response.get("data", {}).get("error", "未知錯誤") self.client.safe_print(f"群組失敗: {error}") return False def group_components_batch(self, groups: List[Dict[str, Any]]) -> Tuple[int, int]: """ 批量創建多個群組 Args: groups: 群組配置列表,每個配置包含: - name: 群組名稱 - componentIds 或 componentIdKeys: 組件 ID 列表或 ID 鍵列表 - color 或 colorHex: 顏色 Returns: (成功數量, 失敗數量) 元組 """ success_count = 0 fail_count = 0 for group in groups: group_name = group.get("name", "未命名群組") component_ids = group.get("componentIds", []) component_id_keys = group.get("componentIdKeys", []) color = group.get("color") color_hex = group.get("colorHex") self.client.safe_print(f"\n群組: {group_name} ({len(component_ids) + len(component_id_keys)} 個組件)") if self.group_components( component_ids, group_name, color, color_hex, component_id_keys ): success_count += 1 else: fail_count += 1 time.sleep(0.2) return success_count, fail_count

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/AmemiyaLai/grasshopper-mcp-workflow'

If you have feedback or need assistance with the MCP directory API, please join our Discord server