fix: node registry
This commit is contained in:
37
__init__.py
37
__init__.py
@@ -1,37 +0,0 @@
|
|||||||
|
|
||||||
# Core components
|
|
||||||
from core.vork_node import VorkNode
|
|
||||||
from core.vork_node_link import VorkNodeLink
|
|
||||||
from core.vork_node_start import VorkNodeStart
|
|
||||||
from core.vork_node_registry import VorkNodeRegistry
|
|
||||||
|
|
||||||
# Node implementations
|
|
||||||
from nodes.vork_node_if import VorkNodeIf
|
|
||||||
from nodes.vork_node_switch import VorkNodeSwitch
|
|
||||||
from nodes.vork_node_set import VorkNodeSet
|
|
||||||
from nodes.vork_node_wait import VorkNodeWait
|
|
||||||
from nodes.vork_node_listen import VorkNodeListen
|
|
||||||
from nodes.vork_node_trigger import VorkNodeTrigger
|
|
||||||
|
|
||||||
# Utility functions
|
|
||||||
from utils.link_name_generator import edge_title_generator, edge_title_to_number
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
# Core
|
|
||||||
"VorkNode",
|
|
||||||
"VorkNodeLink",
|
|
||||||
"VorkNodeStart",
|
|
||||||
"VorkNodeRegistry",
|
|
||||||
|
|
||||||
# Nodes
|
|
||||||
"VorkNodeIf",
|
|
||||||
"VorkNodeSwitch",
|
|
||||||
"VorkNodeSet",
|
|
||||||
"VorkNodeWait",
|
|
||||||
"VorkNodeListen",
|
|
||||||
"VorkNodeTrigger",
|
|
||||||
|
|
||||||
# Utils
|
|
||||||
"edge_title_generator",
|
|
||||||
"edge_title_to_number",
|
|
||||||
]
|
|
@@ -2,6 +2,7 @@ from .vork_node import VorkNode
|
|||||||
from .vork_node_registry import VorkNodeRegistry
|
from .vork_node_registry import VorkNodeRegistry
|
||||||
from .vork_node_link import VorkNodeLink
|
from .vork_node_link import VorkNodeLink
|
||||||
from .vork_node_start import VorkNodeStart
|
from .vork_node_start import VorkNodeStart
|
||||||
|
from .link_name_generator import edge_title_generator, edge_title_to_number
|
||||||
|
|
||||||
__version__ = "0.1.0"
|
__version__ = "0.1.0"
|
||||||
__author__ = "Your Name"
|
__author__ = "Your Name"
|
||||||
@@ -11,4 +12,6 @@ __all__ = [
|
|||||||
"VorkNodeRegistry",
|
"VorkNodeRegistry",
|
||||||
"VorkNodeLink",
|
"VorkNodeLink",
|
||||||
"VorkNodeStart",
|
"VorkNodeStart",
|
||||||
|
"edge_title_generator",
|
||||||
|
"edge_title_to_number",
|
||||||
]
|
]
|
||||||
|
@@ -3,7 +3,7 @@ from typing import Dict, Any
|
|||||||
from model_nodes import VorkNodeLinkData, VorkNodeLinkSchema
|
from model_nodes import VorkNodeLinkData, VorkNodeLinkSchema
|
||||||
|
|
||||||
|
|
||||||
from utils.link_name_generator import edge_title_generator, edge_title_to_number
|
from .link_name_generator import edge_title_generator, edge_title_to_number
|
||||||
|
|
||||||
|
|
||||||
class VorkNodeLink:
|
class VorkNodeLink:
|
||||||
@@ -57,12 +57,9 @@ class VorkNodeLink:
|
|||||||
# Перевалидируем данные
|
# Перевалидируем данные
|
||||||
validated_data = self.validate_data()
|
validated_data = self.validate_data()
|
||||||
else:
|
else:
|
||||||
last_link_number = self.get_link_number(validated_data.last_link_name)
|
# Если имя уже указано, оставляем его как есть
|
||||||
new_link_name = self.generate_link_name(last_link_number+1)
|
# (не пытаемся преобразовать произвольные имена в номера)
|
||||||
# Обновляем данные с новым именем
|
pass
|
||||||
self.data['last_link_name'] = new_link_name
|
|
||||||
# Перевалидируем данные
|
|
||||||
validated_data = self.validate_data()
|
|
||||||
|
|
||||||
# Создаем схему с валидированными данными
|
# Создаем схему с валидированными данными
|
||||||
return VorkNodeLinkSchema(
|
return VorkNodeLinkSchema(
|
||||||
@@ -80,5 +77,7 @@ class VorkNodeLink:
|
|||||||
"""
|
"""
|
||||||
Валидирует данные связи
|
Валидирует данные связи
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
VorkNodeLinkData: Валидированные данные
|
||||||
"""
|
"""
|
||||||
return VorkNodeLinkData(**self.data)
|
return VorkNodeLinkData(**self.data)
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
import importlib
|
import importlib
|
||||||
import inspect
|
import inspect
|
||||||
import os
|
import pkgutil
|
||||||
from typing import Dict, Type, Optional
|
from typing import Dict, Type, Optional, List
|
||||||
from .vork_node import VorkNode
|
from .vork_node import VorkNode
|
||||||
|
|
||||||
|
|
||||||
@@ -9,6 +9,8 @@ class VorkNodeRegistry:
|
|||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.registry: Dict[str, Type[VorkNode]] = {}
|
self.registry: Dict[str, Type[VorkNode]] = {}
|
||||||
|
# Автоматически сканируем пакет 'nodes' при создании
|
||||||
|
self._auto_discover_nodes()
|
||||||
|
|
||||||
def get_all(self) -> Dict[str, Type[VorkNode]]:
|
def get_all(self) -> Dict[str, Type[VorkNode]]:
|
||||||
return self.registry.copy()
|
return self.registry.copy()
|
||||||
@@ -16,27 +18,6 @@ class VorkNodeRegistry:
|
|||||||
def get(self, node_type: str) -> Optional[Type[VorkNode]]:
|
def get(self, node_type: str) -> Optional[Type[VorkNode]]:
|
||||||
return self.registry.get(node_type)
|
return self.registry.get(node_type)
|
||||||
|
|
||||||
def auto_discover_from_directory(self, directory_path: str, package_name: str = None) -> None:
|
|
||||||
if not os.path.exists(directory_path):
|
|
||||||
print(f"Директория {directory_path} не существует")
|
|
||||||
return
|
|
||||||
|
|
||||||
for filename in os.listdir(directory_path):
|
|
||||||
if filename.endswith('.py') and not filename.startswith('__'):
|
|
||||||
module_name = filename[:-3]
|
|
||||||
|
|
||||||
if package_name:
|
|
||||||
full_module_name = f"{package_name}.{module_name}"
|
|
||||||
else:
|
|
||||||
full_module_name = module_name
|
|
||||||
|
|
||||||
try:
|
|
||||||
module = importlib.import_module(full_module_name)
|
|
||||||
self._discover_in_module(module)
|
|
||||||
except ImportError as e:
|
|
||||||
print(f"Ошибка импорта модуля {full_module_name}: {e}")
|
|
||||||
except Exception as e:
|
|
||||||
print(f"Ошибка при сканировании модуля {full_module_name}: {e}")
|
|
||||||
|
|
||||||
def _discover_in_module(self, module) -> None:
|
def _discover_in_module(self, module) -> None:
|
||||||
for name, obj in inspect.getmembers(module):
|
for name, obj in inspect.getmembers(module):
|
||||||
@@ -51,5 +32,41 @@ class VorkNodeRegistry:
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"Ошибка при получении ID для {obj.__name__}: {e}")
|
print(f"Ошибка при получении ID для {obj.__name__}: {e}")
|
||||||
|
|
||||||
|
def _auto_discover_nodes(self) -> None:
|
||||||
|
"""
|
||||||
|
Автоматически обнаруживает все VorkNode классы в пакете 'nodes'
|
||||||
|
Вызывается автоматически при создании реестра
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
package = importlib.import_module('nodes')
|
||||||
|
package_path = getattr(package, '__path__', None)
|
||||||
|
|
||||||
|
if package_path:
|
||||||
|
# Сканируем все модули в пакете nodes
|
||||||
|
for importer, modname, ispkg in pkgutil.iter_modules(package_path, "nodes."):
|
||||||
|
try:
|
||||||
|
module = importlib.import_module(modname)
|
||||||
|
self._discover_in_module(module)
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Ошибка при сканировании модуля {modname}: {e}")
|
||||||
|
|
||||||
|
except ImportError as e:
|
||||||
|
print(f"Ошибка импорта пакета 'nodes': {e}")
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Ошибка при сканировании пакета 'nodes': {e}")
|
||||||
|
|
||||||
|
def get_available_node_types(self) -> List[str]:
|
||||||
|
"""
|
||||||
|
Возвращает список всех доступных типов узлов
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
List[str]: Список типов узлов
|
||||||
|
"""
|
||||||
|
return list(self.registry.keys())
|
||||||
|
|
||||||
def clear(self) -> None:
|
def clear(self) -> None:
|
||||||
|
"""
|
||||||
|
Очищает реестр и повторно сканирует пакет 'nodes'
|
||||||
|
"""
|
||||||
self.registry.clear()
|
self.registry.clear()
|
||||||
|
self._auto_discover_nodes()
|
||||||
|
@@ -15,6 +15,15 @@ from .node_if_models import (
|
|||||||
IfNodeDescriptor
|
IfNodeDescriptor
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Экспорты для моделей узла start
|
||||||
|
from .node_start_models import (
|
||||||
|
StartNodeData,
|
||||||
|
StartNodeLinks,
|
||||||
|
StartNodeCoreSchema,
|
||||||
|
StartNodeCoreSchemaData,
|
||||||
|
StartNodeDescriptor
|
||||||
|
)
|
||||||
|
|
||||||
# Экспорты для моделей связей между узлами
|
# Экспорты для моделей связей между узлами
|
||||||
from .node_link_models import (
|
from .node_link_models import (
|
||||||
VorkNodeLinkData,
|
VorkNodeLinkData,
|
||||||
@@ -35,6 +44,13 @@ __all__ = [
|
|||||||
"IfNodeCoreSchemaData",
|
"IfNodeCoreSchemaData",
|
||||||
"IfNodeDescriptor",
|
"IfNodeDescriptor",
|
||||||
|
|
||||||
|
# Start node models
|
||||||
|
"StartNodeData",
|
||||||
|
"StartNodeLinks",
|
||||||
|
"StartNodeCoreSchema",
|
||||||
|
"StartNodeCoreSchemaData",
|
||||||
|
"StartNodeDescriptor",
|
||||||
|
|
||||||
# Node link models
|
# Node link models
|
||||||
"VorkNodeLinkData",
|
"VorkNodeLinkData",
|
||||||
"VorkNodeLinkSchema"
|
"VorkNodeLinkSchema"
|
||||||
|
@@ -10,7 +10,6 @@ packages = [
|
|||||||
{ include = "core" },
|
{ include = "core" },
|
||||||
{ include = "nodes" },
|
{ include = "nodes" },
|
||||||
{ include = "model_nodes" },
|
{ include = "model_nodes" },
|
||||||
{ include = "utils" },
|
|
||||||
{ include = "orm" }
|
{ include = "orm" }
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@@ -1,7 +0,0 @@
|
|||||||
# Utils package initialization
|
|
||||||
from .link_name_generator import edge_title_generator, edge_title_to_number
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
"edge_title_generator",
|
|
||||||
"edge_title_to_number"
|
|
||||||
]
|
|
Reference in New Issue
Block a user