diff --git a/core/form_descriptors.py b/core/form_descriptors.py new file mode 100644 index 0000000..40fe5bc --- /dev/null +++ b/core/form_descriptors.py @@ -0,0 +1,460 @@ +from typing import Dict, Any + +# Дескриптор формы для узла IF +IF_FORM_DESCRIPTOR = { + "elements": [ + { + "name": "condition_row", + "type": "row", + "label": "Условие проверки", + "link_port": { + "id": "then_output", + "label": "Then" + }, + "elements": [ + { + "name": "condition", + "type": "area", + "label": "Условие", + "placeholder": "Введите условие" + } + ] + }, + { + "name": "else_row", + "type": "row", + "label": "Альтернативный путь", + "link_port": { + "id": "else_output", + "label": "Else" + } + } + ] +} + +# Дескриптор формы для узла Listen +LISTEN_FORM_DESCRIPTOR = { + "elements": [ + { + "name": "event_row", + "type": "row", + "label": "Событие", + "elements": [ + { + "name": "event_name", + "type": "line", + "label": "Событие", + "placeholder": "Идентификатор события" + } + ] + }, + { + "name": "condition_row", + "type": "row", + "label": "Условие", + "elements": [ + { + "name": "condition", + "type": "area", + "label": "Условие", + "placeholder": "Если P([condition(i), [AND, OR]]) == true" + } + ] + }, + { + "name": "then_row", + "type": "row", + "label": "Then", + "link_port": { + "id": "then_output", + "label": "Then" + } + } + ] +} + +# Дескриптор формы для узла Trigger +TRIGGER_FORM_DESCRIPTOR = { + "elements": [ + { + "name": "event_row", + "type": "row", + "label": "Событие", + "elements": [ + { + "name": "event_name", + "type": "line", + "label": "Событие", + "placeholder": "Идентификатор события" + } + ] + }, + { + "name": "context_row", + "type": "row", + "label": "Контекст", + "elements": [ + { + "name": "context", + "type": "area", + "label": "Данные", + "placeholder": "Подготовка указанных переменных окружения в формат запроса JSON" + } + ] + }, + { + "name": "then_row", + "type": "row", + "label": "Then", + "link_port": { + "id": "then_output", + "label": "Then" + } + } + ] +} + +# Дескриптор формы для узла Run +RUN_FORM_DESCRIPTOR = { + "elements": [ + { + "name": "task_row", + "type": "row", + "label": "Задача", + "elements": [ + { + "name": "task", + "type": "select", + "label": "Задача", + "data": ["send_email", "process_data", "generate_report", "validate_input", "transform_data"], + "default": "send_email" + } + ] + }, + { + "name": "context_row", + "type": "row", + "label": "Аргументы", + "elements": [ + { + "name": "context", + "type": "area", + "label": "Аргументы", + "placeholder": "Подготовка указанных переменных окружения в формат запроса JSON" + } + ] + }, + { + "name": "then_row", + "type": "row", + "label": "Then", + "link_port": { + "id": "then_output", + "label": "Then" + } + } + ] +} + +# Дескриптор формы для узла Callback +CALLBACK_FORM_DESCRIPTOR = { + "elements": [ + { + "name": "uri_row", + "type": "row", + "label": "URI", + "elements": [ + { + "name": "uri", + "type": "line", + "label": "Событие", + "placeholder": "URI хука" + } + ] + }, + { + "name": "method_row", + "type": "row", + "label": "Метод", + "elements": [ + { + "name": "method", + "type": "select", + "label": "Метод", + "data": ["POST", "GET", "PUT", "PATCH", "DELETE"], + "default": "POST" + } + ] + }, + { + "name": "headers_row", + "type": "row", + "label": "Заголовки", + "elements": [ + { + "name": "headers", + "type": "area", + "label": "Заголовки", + "placeholder": "Приведение и валидация заголовков" + } + ] + }, + { + "name": "body_row", + "type": "row", + "label": "Данные", + "elements": [ + { + "name": "body", + "type": "area", + "label": "Данные", + "placeholder": "Приведение значений и валидация JSON" + } + ] + }, + { + "name": "sync_row", + "type": "row", + "label": "Ожидать выполнение запроса", + "elements": [ + { + "name": "sync", + "type": "select", + "label": "Ожидать выполнение запроса", + "data": ["Да", "Нет"], + "default": "Да" + } + ] + }, + { + "name": "then_row", + "type": "row", + "label": "Then", + "link_port": { + "id": "then_output", + "label": "Then" + } + } + ] +} + +# Дескриптор формы для узла Switch +SWITCH_FORM_DESCRIPTOR = { + "elements": [ + { + "name": "switch_row", + "type": "row", + "label": "Условие проверки", + "link_port": { + "id": "case_1_output", + "label": "case_1", + "is_addable": True + }, + + "elements": [ + { + "name": "switch_value", + "type": "area", + "label": "Условие проверки", + "placeholder": "Введите условие" + } + ] + }, + { + "name": "default_row", + "type": "row", + "label": "По умолчанию", + "link_port": { + "id": "default_output", + "label": "default" + } + } + ] +} + +# Дескриптор формы для узла Set +SET_FORM_DESCRIPTOR = { + "elements": [ + { + "name": "variable_row", + "type": "row", + "label": "Имя параметра", + "elements": [ + { + "name": "variable", + "type": "line", + "label": "Имя параметра", + "placeholder": "Введите имя параметра" + } + ] + }, + { + "name": "value_row", + "type": "row", + "label": "Параметр", + "elements": [ + { + "name": "value", + "type": "area", + "label": "Параметр", + "placeholder": "Введите значение" + } + ] + }, + { + "name": "link_row", + "type": "row", + "label": "Связь", + "link_port": { + "id": "then_output", + "label": "then" + }, + "elements": [] + } + ] +} + +# Дескриптор формы для узла Wait +WAIT_FORM_DESCRIPTOR = { + "elements": [ + { + "name": "type_row", + "type": "row", + "label": "Параметр", + "elements": [ + { + "name": "type", + "type": "select", + "label": "Параметр", + "data": ["seconds", "datetime"], + "placeholder": "Выбранный вариант" + } + ] + }, + { + "name": "wait_for_row", + "type": "row", + "label": "Время", + "elements": [ + { + "name": "wait_for", + "type": "number", + "label": "Время", + "placeholder": "Вычислить значение ожидания в секундах" + } + ] + }, + { + "name": "wait_datetime_row", + "type": "row", + "label": "Подождать", + "elements": [ + { + "name": "wait_datetime", + "type": "date", + "label": "Подождать", + "placeholder": "Вычислить значение до определённого времени" + } + ] + }, + { + "name": "then_row", + "type": "row", + "label": "Переход", + "link_port": { + "id": "then_output", + "label": "then" + } + } + ] +} + +# Дескриптор формы для узла While +WHILE_FORM_DESCRIPTOR = { + "elements": [ + { + "name": "condition_row", + "type": "row", + "label": "Параметр", + "link_port": { + "id": "then_output", + "label": "Then" + }, + "elements": [ + { + "name": "condition", + "type": "area", + "label": "Параметр", + "placeholder": "P(condition) == true" + } + ] + }, + { + "name": "else_row", + "type": "row", + "label": "Альтернативный путь", + "link_port": { + "id": "else_output", + "label": "Else" + } + } + ] +} + +# Дескриптор формы для узла Each +EACH_FORM_DESCRIPTOR = { + "elements": [ + { + "name": "list_row", + "type": "row", + "label": "Список", + "link_port": { + "id": "then_output", + "label": "Then" + }, + "elements": [ + { + "name": "list", + "type": "line", + "label": "Список", + "placeholder": "Валидация списка и получение очередного value из списка" + } + ] + }, + { + "name": "else_row", + "type": "row", + "label": "Альтернативный путь", + "link_port": { + "id": "else_output", + "label": "Else" + } + } + ] +} + +# Маппинг типов узлов на дескрипторы форм +FORM_DESCRIPTORS = { + "IF": IF_FORM_DESCRIPTOR, + "LISTEN": LISTEN_FORM_DESCRIPTOR, + "TRIGGER": TRIGGER_FORM_DESCRIPTOR, + "RUN": RUN_FORM_DESCRIPTOR, + "CALLBACK": CALLBACK_FORM_DESCRIPTOR, + "SWITCH": SWITCH_FORM_DESCRIPTOR, + "SET": SET_FORM_DESCRIPTOR, + "WAIT": WAIT_FORM_DESCRIPTOR, + "WHILE": WHILE_FORM_DESCRIPTOR, + "EACH": EACH_FORM_DESCRIPTOR, +} + +def get_form_descriptor(node_type: str) -> Dict[str, Any]: + """ + Получить дескриптор формы для указанного типа узла + + Args: + node_type: Тип узла (например, "node_if") + + Returns: + Dict с дескриптором формы или пустой dict если тип не найден + """ + return FORM_DESCRIPTORS.get(node_type, {}) diff --git a/core/vork_node_link.py b/core/vork_node_link.py index c023cfa..74bc757 100644 --- a/core/vork_node_link.py +++ b/core/vork_node_link.py @@ -57,9 +57,10 @@ class VorkNodeLink: # Перевалидируем данные validated_data = self.validate_data() else: - # Если имя уже указано, оставляем его как есть - # (не пытаемся преобразовать произвольные имена в номера) - pass + old_link_name = edge_title_to_number(validated_data.last_link_name) + new_link_name = self.generate_link_name(old_link_name + 1) + self.data['last_link_name'] = new_link_name + validated_data = self.validate_data() # Создаем схему с валидированными данными return VorkNodeLinkSchema( diff --git a/core/vork_node_start.py b/core/vork_node_start.py index 6928d3e..970ba22 100644 --- a/core/vork_node_start.py +++ b/core/vork_node_start.py @@ -1,10 +1,8 @@ -from typing import Dict, Any, Optional +from typing import Dict, Any from .vork_node import VorkNode from model_nodes.node_start_models import ( StartNodeData, - StartNodeLinks, StartNodeCoreSchema, - StartNodeDescriptor, StartNodeCoreSchemaData ) diff --git a/model_nodes/__init__.py b/model_nodes/__init__.py index 92f4ea6..fce364a 100644 --- a/model_nodes/__init__.py +++ b/model_nodes/__init__.py @@ -1,18 +1,41 @@ # Экспорты для моделей узла listen -# from .node_listen_models import ( -# ListenNodeData, -# ListenNodeLinks, -# ListenNodePSNodeCore, -# ListenNodeSettingsDataCore -# ) +from .node_listen_models import ( + ListenNodeData, + ListenNodeLinks, + ListenNodeCoreSchema, + ListenNodeCoreSchemaData +) + +# Экспорты для моделей узла trigger +from .node_trigger_models import ( + TriggerNodeData, + TriggerNodeLinks, + TriggerNodeCoreSchema, + TriggerNodeCoreSchemaData +) + +# Экспорты для моделей узла run +from .node_run_models import ( + RunNodeData, + RunNodeLinks, + RunNodeCoreSchema, + RunNodeCoreSchemaData +) + +# Экспорты для моделей узла callback +from .node_callback_models import ( + CallbackNodeData, + CallbackNodeLinks, + CallbackNodeCoreSchema, + CallbackNodeCoreSchemaData +) # Экспорты для моделей узла if from .node_if_models import ( IfNodeData, IfNodeLinks, IfNodeCoreSchema, - IfNodeCoreSchemaData, - IfNodeDescriptor + IfNodeCoreSchemaData ) # Экспорты для моделей узла start @@ -20,8 +43,47 @@ from .node_start_models import ( StartNodeData, StartNodeLinks, StartNodeCoreSchema, - StartNodeCoreSchemaData, - StartNodeDescriptor + StartNodeCoreSchemaData +) + +# Экспорты для моделей узла switch +from .node_switch_models import ( + SwitchNodeData, + SwitchNodeLinks, + SwitchNodeCoreSchema, + SwitchNodeCoreSchemaData +) + +# Экспорты для моделей узла set +from .node_set_models import ( + SetNodeData, + SetNodeLinks, + SetNodeCoreSchema, + SetNodeCoreSchemaData +) + +# Экспорты для моделей узла wait +from .node_wait_models import ( + WaitNodeData, + WaitNodeLinks, + WaitNodeCoreSchema, + WaitNodeCoreSchemaData +) + +# Экспорты для моделей узла while +from .node_while_models import ( + WhileNodeData, + WhileNodeLinks, + WhileNodeCoreSchema, + WhileNodeCoreSchemaData +) + +# Экспорты для моделей узла each +from .node_each_models import ( + EachNodeData, + EachNodeLinks, + EachNodeCoreSchema, + EachNodeCoreSchemaData ) # Экспорты для моделей связей между узлами @@ -32,24 +94,70 @@ from .node_link_models import ( __all__ = [ # Listen node models - # "ListenNodeData", - # "ListenNodeLinks", - # "ListenNodePSNodeCore", - # "ListenNodeSettingsDataCore", + "ListenNodeData", + "ListenNodeLinks", + "ListenNodeCoreSchema", + "ListenNodeCoreSchemaData", + + # Trigger node models + "TriggerNodeData", + "TriggerNodeLinks", + "TriggerNodeCoreSchema", + "TriggerNodeCoreSchemaData", + + # Run node models + "RunNodeData", + "RunNodeLinks", + "RunNodeCoreSchema", + "RunNodeCoreSchemaData", + + # Callback node models + "CallbackNodeData", + "CallbackNodeLinks", + "CallbackNodeCoreSchema", + "CallbackNodeCoreSchemaData", # If node models "IfNodeData", "IfNodeLinks", "IfNodeCoreSchema", "IfNodeCoreSchemaData", - "IfNodeDescriptor", # Start node models "StartNodeData", "StartNodeLinks", "StartNodeCoreSchema", "StartNodeCoreSchemaData", - "StartNodeDescriptor", + + # Switch node models + "SwitchNodeData", + "SwitchNodeLinks", + "SwitchNodeCoreSchema", + "SwitchNodeCoreSchemaData", + + # Set node models + "SetNodeData", + "SetNodeLinks", + "SetNodeCoreSchema", + "SetNodeCoreSchemaData", + + # Wait node models + "WaitNodeData", + "WaitNodeLinks", + "WaitNodeCoreSchema", + "WaitNodeCoreSchemaData", + + # While node models + "WhileNodeData", + "WhileNodeLinks", + "WhileNodeCoreSchema", + "WhileNodeCoreSchemaData", + + # Each node models + "EachNodeData", + "EachNodeLinks", + "EachNodeCoreSchema", + "EachNodeCoreSchemaData", # Node link models "VorkNodeLinkData", diff --git a/model_nodes/node_callback_models.py b/model_nodes/node_callback_models.py new file mode 100644 index 0000000..b31b630 --- /dev/null +++ b/model_nodes/node_callback_models.py @@ -0,0 +1,36 @@ +from typing import Optional +from pydantic import BaseModel, Field + + +class CallbackNodeData(BaseModel): + """ + Pydantic модель для валидации данных узла callback + """ + ps_id: Optional[int] = Field(default=None, description="ID процесса") + node_type: Optional[str] = Field(default=None, description="Тип узла") + + +class CallbackNodeLinks(BaseModel): + """ + Pydantic модель для валидации связей узла callback + """ + parent_id: Optional[int] = Field(default=None, description="ID родительского узла") + parent_port_number: Optional[int] = Field(default=None, description="Номер порта родительского узла") + + +class CallbackNodeCoreSchemaData(BaseModel): + """ + Pydantic модель для данных портов узла callback + """ + then_port_number: Optional[int] = Field(default=0, description="Номер порта для перехода по Связи Then (LINK)") + + +class CallbackNodeCoreSchema(BaseModel): + """ + Pydantic модель для схемы узла callback + """ + ps_id: Optional[int] = Field(default=None, description="ID процесса") + node_type: Optional[str] = Field(default=None, description="Тип узла") + parent_id: Optional[int] = Field(default=None, description="ID родительского узла") + parent_port_number: Optional[int] = Field(default=None, description="Номер порта родительского узла") + data: Optional[CallbackNodeCoreSchemaData] = Field(default=None, description="Данные узла") diff --git a/model_nodes/node_each_models.py b/model_nodes/node_each_models.py new file mode 100644 index 0000000..54ec70a --- /dev/null +++ b/model_nodes/node_each_models.py @@ -0,0 +1,37 @@ +from typing import Optional +from pydantic import BaseModel, Field + + +class EachNodeData(BaseModel): + """ + Pydantic модель для валидации данных узла each + """ + ps_id: Optional[int] = Field(default=None, description="ID процесса") + node_type: Optional[str] = Field(default=None, description="Тип узла") + + +class EachNodeLinks(BaseModel): + """ + Pydantic модель для валидации связей узла each + """ + parent_id: Optional[int] = Field(default=None, description="ID родительского узла") + parent_port_number: Optional[int] = Field(default=None, description="Номер порта родительского узла") + + +class EachNodeCoreSchemaData(BaseModel): + """ + Pydantic модель для данных портов узла each + """ + then_port_number: Optional[int] = Field(default=0, description="Номер порта для перехода по Связи Then (LINK)") + else_port_number: Optional[int] = Field(default=1, description="Номер порта для перехода по Связи Else (LINK)") + + +class EachNodeCoreSchema(BaseModel): + """ + Pydantic модель для схемы узла each + """ + ps_id: Optional[int] = Field(default=None, description="ID процесса") + node_type: Optional[str] = Field(default=None, description="Тип узла") + parent_id: Optional[int] = Field(default=None, description="ID родительского узла") + parent_port_number: Optional[int] = Field(default=None, description="Номер порта родительского узла") + data: Optional[EachNodeCoreSchemaData] = Field(default=None, description="Данные узла") diff --git a/model_nodes/node_if_models.py b/model_nodes/node_if_models.py index 1c3b959..25c861c 100644 --- a/model_nodes/node_if_models.py +++ b/model_nodes/node_if_models.py @@ -1,4 +1,4 @@ -from typing import Optional, Dict, Any +from typing import Optional from pydantic import BaseModel, Field @@ -35,10 +35,3 @@ class IfNodeCoreSchema(BaseModel): parent_id: Optional[int] = Field(default=None, description="ID родительского узла") parent_port_number: Optional[int] = Field(default=None, description="Номер порта родительского узла") data: Optional[IfNodeCoreSchemaData] = Field(default=None, description="Данные узла") - - -class IfNodeDescriptor(BaseModel): - """ - Pydantic модель для дескриптора узла if - """ - condition: Optional[str] = Field(default=None, description="Условие для проверки (PREDICATE)") diff --git a/model_nodes/node_listen_models.py b/model_nodes/node_listen_models.py index 205d9d6..8b46d59 100644 --- a/model_nodes/node_listen_models.py +++ b/model_nodes/node_listen_models.py @@ -1,33 +1,38 @@ -# from multiprocessing import process -# from typing import Optional, Dict, Any -# from pydantic import BaseModel, Field -# from orm.schemas.base import Base +from typing import Optional +from pydantic import BaseModel, Field -# class ListenNodeData(Base): -# """ -# Поле Data для Core -# """ -# process_schema_id: Optional[int] = Field(default=None, description="ID процесса") -# node_type: str = Field(description="Тип узла") +class ListenNodeData(BaseModel): + """ + Pydantic модель для валидации данных узла listen + """ + ps_id: Optional[int] = Field(default=None, description="ID процесса") + node_type: Optional[str] = Field(default=None, description="Тип узла") + is_start: bool = Field(default=False, description="Является ли узел стартовым") -# class ListenNodeLinks(Base): -# """ -# Поле Links для Core -# """ -# node_port_number: Optional[int] = Field(default=0, description="Источник данных") +class ListenNodeLinks(BaseModel): + """ + Pydantic модель для валидации связей узла listen + """ + parent_id: Optional[int] = Field(default=None, description="ID родительского узла") + parent_port_number: Optional[int] = Field(default=None, description="Номер порта родительского узла") -# class ListenNodePSNodeCore(Base): -# """ -# Данные для PS_Node которые уходят из Core -# """ -# process_schema_id: Optional[int] = Field(default=None, description="ID процесса") -# node_type: str = Field(description="Тип узла") +class ListenNodeCoreSchemaData(BaseModel): + """ + Pydantic модель для данных портов узла listen + """ + then_port_number: Optional[int] = Field(default=0, description="Номер порта для перехода по Связи Then (LINK)") + is_start: bool = Field(default=False, description="Является ли узел стартовым") -# class ListenNodeSettingsDataCore(Base): -# """ -# Данные для process_schema Settings которые уходят из Core -# """ -# node_port_number: Optional[int] = Field(default=0, description="Источник данных") + +class ListenNodeCoreSchema(BaseModel): + """ + Pydantic модель для схемы узла listen + """ + ps_id: Optional[int] = Field(default=None, description="ID процесса") + node_type: Optional[str] = Field(default=None, description="Тип узла") + parent_id: Optional[int] = Field(default=None, description="ID родительского узла") + parent_port_number: Optional[int] = Field(default=None, description="Номер порта родительского узла") + data: Optional[ListenNodeCoreSchemaData] = Field(default=None, description="Данные узла") diff --git a/model_nodes/node_run_models.py b/model_nodes/node_run_models.py new file mode 100644 index 0000000..63eaf3f --- /dev/null +++ b/model_nodes/node_run_models.py @@ -0,0 +1,36 @@ +from typing import Optional +from pydantic import BaseModel, Field + + +class RunNodeData(BaseModel): + """ + Pydantic модель для валидации данных узла run + """ + ps_id: Optional[int] = Field(default=None, description="ID процесса") + node_type: Optional[str] = Field(default=None, description="Тип узла") + + +class RunNodeLinks(BaseModel): + """ + Pydantic модель для валидации связей узла run + """ + parent_id: Optional[int] = Field(default=None, description="ID родительского узла") + parent_port_number: Optional[int] = Field(default=None, description="Номер порта родительского узла") + + +class RunNodeCoreSchemaData(BaseModel): + """ + Pydantic модель для данных портов узла run + """ + then_port_number: Optional[int] = Field(default=0, description="Номер порта для перехода по Связи Then (LINK)") + + +class RunNodeCoreSchema(BaseModel): + """ + Pydantic модель для схемы узла run + """ + ps_id: Optional[int] = Field(default=None, description="ID процесса") + node_type: Optional[str] = Field(default=None, description="Тип узла") + parent_id: Optional[int] = Field(default=None, description="ID родительского узла") + parent_port_number: Optional[int] = Field(default=None, description="Номер порта родительского узла") + data: Optional[RunNodeCoreSchemaData] = Field(default=None, description="Данные узла") diff --git a/model_nodes/node_set_models.py b/model_nodes/node_set_models.py new file mode 100644 index 0000000..61fc015 --- /dev/null +++ b/model_nodes/node_set_models.py @@ -0,0 +1,36 @@ +from typing import Optional +from pydantic import BaseModel, Field + + +class SetNodeData(BaseModel): + """ + Pydantic модель для валидации данных узла set + """ + ps_id: Optional[int] = Field(default=None, description="ID процесса") + node_type: Optional[str] = Field(default=None, description="Тип узла") + + +class SetNodeLinks(BaseModel): + """ + Pydantic модель для валидации связей узла set + """ + parent_id: Optional[int] = Field(default=None, description="ID родительского узла") + parent_port_number: Optional[int] = Field(default=None, description="Номер порта родительского узла") + + +class SetNodeCoreSchemaData(BaseModel): + """ + Pydantic модель для данных портов узла set + """ + then_port_number: Optional[int] = Field(default=0, description="Номер порта для перехода по Связи then (LINK)") + + +class SetNodeCoreSchema(BaseModel): + """ + Pydantic модель для схемы узла set + """ + ps_id: Optional[int] = Field(default=None, description="ID процесса") + node_type: Optional[str] = Field(default=None, description="Тип узла") + parent_id: Optional[int] = Field(default=None, description="ID родительского узла") + parent_port_number: Optional[int] = Field(default=None, description="Номер порта родительского узла") + data: Optional[SetNodeCoreSchemaData] = Field(default=None, description="Данные узла") diff --git a/model_nodes/node_start_models.py b/model_nodes/node_start_models.py index a79f858..4a3d4b8 100644 --- a/model_nodes/node_start_models.py +++ b/model_nodes/node_start_models.py @@ -31,10 +31,3 @@ class StartNodeCoreSchema(BaseModel): ps_id: Optional[int] = Field(default=None, description="ID процесса") node_type: Optional[str] = Field(default=None, description="Тип узла") data: Optional[StartNodeCoreSchemaData] = Field(default=None, description="Данные узла") - - -class StartNodeDescriptor(BaseModel): - """ - Pydantic модель для дескриптора узла start - """ - # Start узел не имеет дополнительных параметров, это точка входа в процесс diff --git a/model_nodes/node_switch_models.py b/model_nodes/node_switch_models.py new file mode 100644 index 0000000..7c4cd2b --- /dev/null +++ b/model_nodes/node_switch_models.py @@ -0,0 +1,37 @@ +from typing import Optional +from pydantic import BaseModel, Field + + +class SwitchNodeData(BaseModel): + """ + Pydantic модель для валидации данных узла switch + """ + ps_id: Optional[int] = Field(default=None, description="ID процесса") + node_type: Optional[str] = Field(default=None, description="Тип узла") + + +class SwitchNodeLinks(BaseModel): + """ + Pydantic модель для валидации связей узла switch + """ + parent_id: Optional[int] = Field(default=None, description="ID родительского узла") + parent_port_number: Optional[int] = Field(default=None, description="Номер порта родительского узла") + + +class SwitchNodeCoreSchemaData(BaseModel): + """ + Pydantic модель для данных портов узла switch + """ + default_port_number: Optional[int] = Field(default=0, description="Номер порта для перехода по Связи default (LINK)") + case_1_port_number: Optional[int] = Field(default=1, description="Номер порта для перехода по Связи case_1 (LINK)") + + +class SwitchNodeCoreSchema(BaseModel): + """ + Pydantic модель для схемы узла switch + """ + ps_id: Optional[int] = Field(default=None, description="ID процесса") + node_type: Optional[str] = Field(default=None, description="Тип узла") + parent_id: Optional[int] = Field(default=None, description="ID родительского узла") + parent_port_number: Optional[int] = Field(default=None, description="Номер порта родительского узла") + data: Optional[SwitchNodeCoreSchemaData] = Field(default=None, description="Данные узла") diff --git a/model_nodes/node_trigger_models.py b/model_nodes/node_trigger_models.py new file mode 100644 index 0000000..f0774e2 --- /dev/null +++ b/model_nodes/node_trigger_models.py @@ -0,0 +1,36 @@ +from typing import Optional +from pydantic import BaseModel, Field + + +class TriggerNodeData(BaseModel): + """ + Pydantic модель для валидации данных узла trigger + """ + ps_id: Optional[int] = Field(default=None, description="ID процесса") + node_type: Optional[str] = Field(default=None, description="Тип узла") + + +class TriggerNodeLinks(BaseModel): + """ + Pydantic модель для валидации связей узла trigger + """ + parent_id: Optional[int] = Field(default=None, description="ID родительского узла") + parent_port_number: Optional[int] = Field(default=None, description="Номер порта родительского узла") + + +class TriggerNodeCoreSchemaData(BaseModel): + """ + Pydantic модель для данных портов узла trigger + """ + then_port_number: Optional[int] = Field(default=0, description="Номер порта для перехода по Связи Then (LINK)") + + +class TriggerNodeCoreSchema(BaseModel): + """ + Pydantic модель для схемы узла trigger + """ + ps_id: Optional[int] = Field(default=None, description="ID процесса") + node_type: Optional[str] = Field(default=None, description="Тип узла") + parent_id: Optional[int] = Field(default=None, description="ID родительского узла") + parent_port_number: Optional[int] = Field(default=None, description="Номер порта родительского узла") + data: Optional[TriggerNodeCoreSchemaData] = Field(default=None, description="Данные узла") diff --git a/model_nodes/node_wait_models.py b/model_nodes/node_wait_models.py new file mode 100644 index 0000000..af9278d --- /dev/null +++ b/model_nodes/node_wait_models.py @@ -0,0 +1,36 @@ +from typing import Optional +from pydantic import BaseModel, Field + + +class WaitNodeData(BaseModel): + """ + Pydantic модель для валидации данных узла wait + """ + ps_id: Optional[int] = Field(default=None, description="ID процесса") + node_type: Optional[str] = Field(default=None, description="Тип узла") + + +class WaitNodeLinks(BaseModel): + """ + Pydantic модель для валидации связей узла wait + """ + parent_id: Optional[int] = Field(default=None, description="ID родительского узла") + parent_port_number: Optional[int] = Field(default=None, description="Номер порта родительского узла") + + +class WaitNodeCoreSchemaData(BaseModel): + """ + Pydantic модель для данных портов узла wait + """ + then_port_number: Optional[int] = Field(default=0, description="Номер порта для перехода по Связи then (LINK)") + + +class WaitNodeCoreSchema(BaseModel): + """ + Pydantic модель для схемы узла wait + """ + ps_id: Optional[int] = Field(default=None, description="ID процесса") + node_type: Optional[str] = Field(default=None, description="Тип узла") + parent_id: Optional[int] = Field(default=None, description="ID родительского узла") + parent_port_number: Optional[int] = Field(default=None, description="Номер порта родительского узла") + data: Optional[WaitNodeCoreSchemaData] = Field(default=None, description="Данные узла") diff --git a/model_nodes/node_while_models.py b/model_nodes/node_while_models.py new file mode 100644 index 0000000..96354a2 --- /dev/null +++ b/model_nodes/node_while_models.py @@ -0,0 +1,37 @@ +from typing import Optional +from pydantic import BaseModel, Field + + +class WhileNodeData(BaseModel): + """ + Pydantic модель для валидации данных узла while + """ + ps_id: Optional[int] = Field(default=None, description="ID процесса") + node_type: Optional[str] = Field(default=None, description="Тип узла") + + +class WhileNodeLinks(BaseModel): + """ + Pydantic модель для валидации связей узла while + """ + parent_id: Optional[int] = Field(default=None, description="ID родительского узла") + parent_port_number: Optional[int] = Field(default=None, description="Номер порта родительского узла") + + +class WhileNodeCoreSchemaData(BaseModel): + """ + Pydantic модель для данных портов узла while + """ + then_port_number: Optional[int] = Field(default=0, description="Номер порта для перехода по Связи Then (LINK)") + else_port_number: Optional[int] = Field(default=1, description="Номер порта для перехода по Связи Else (LINK)") + + +class WhileNodeCoreSchema(BaseModel): + """ + Pydantic модель для схемы узла while + """ + ps_id: Optional[int] = Field(default=None, description="ID процесса") + node_type: Optional[str] = Field(default=None, description="Тип узла") + parent_id: Optional[int] = Field(default=None, description="ID родительского узла") + parent_port_number: Optional[int] = Field(default=None, description="Номер порта родительского узла") + data: Optional[WhileNodeCoreSchemaData] = Field(default=None, description="Данные узла") diff --git a/nodes/vork_node_callback.py b/nodes/vork_node_callback.py index 7174a12..8aa569f 100644 --- a/nodes/vork_node_callback.py +++ b/nodes/vork_node_callback.py @@ -1,18 +1,73 @@ +from typing import Dict, Any +import requests +import json from core import VorkNode +from core.form_descriptors import get_form_descriptor +from model_nodes.node_callback_models import ( + CallbackNodeData, + CallbackNodeLinks, + CallbackNodeCoreSchema, + CallbackNodeCoreSchemaData +) class VorkNodeCallback(VorkNode): + def __init__(self, data: Dict[str, Any], links: Dict[str, Any] = None): + """ + Инициализация узла callback + """ + super().__init__(data, links or {}) + @property def id(self) -> str: - return "node_callback" + return "CALLBACK" @classmethod - def form(cls): - pass + def form(cls) -> Dict[str, Any]: + """ + Возвращает статический дескриптор формы для узла Callback + """ + return get_form_descriptor("CALLBACK") - def validate(self) -> bool: - return True + def validate(self) -> CallbackNodeCoreSchema: + """ + Валидирует данные узла callback и возвращает схему + """ + try: + # Валидируем данные узла + validated_data = self.validate_data() + + # Валидируем связи узла + validated_links = self.validate_links() + + node_data = CallbackNodeCoreSchemaData( + then_port_number=0 + ) + + # Создаем схему с валидированными данными + return CallbackNodeCoreSchema( + ps_id=validated_data.ps_id, + node_type=validated_data.node_type, + parent_id=validated_links.parent_id, + parent_port_number=validated_links.parent_port_number, + data=node_data + ) + except Exception as e: + print(f"Callback node validation error: {e}") + raise + + def validate_data(self) -> CallbackNodeData: + """ + Валидирует данные узла callback + """ + return CallbackNodeData(**self.data) + + def validate_links(self) -> CallbackNodeLinks: + """ + Валидирует связи узла callback + """ + return CallbackNodeLinks(**self.links) def process(self, context): pass diff --git a/nodes/vork_node_each.py b/nodes/vork_node_each.py index d1d6e12..fccc33d 100644 --- a/nodes/vork_node_each.py +++ b/nodes/vork_node_each.py @@ -1,18 +1,73 @@ +from typing import Dict, Any from core import VorkNode +from core.form_descriptors import get_form_descriptor +from model_nodes.node_each_models import ( + EachNodeData, + EachNodeLinks, + EachNodeCoreSchema, + EachNodeCoreSchemaData +) class VorkNodeEach(VorkNode): + def __init__(self, data: Dict[str, Any], links: Dict[str, Any] = None): + """ + Инициализация узла each + """ + super().__init__(data, links or {}) + @property def id(self) -> str: - return "node_each" + return "EACH" @classmethod - def form(cls): - pass + def form(cls) -> Dict[str, Any]: + """ + Возвращает статический дескриптор формы для узла Each + """ + return get_form_descriptor("EACH") - def validate(self) -> bool: - return True + def validate(self) -> EachNodeCoreSchema: + """ + Валидирует данные узла each и возвращает схему + """ + try: + # Валидируем данные узла + validated_data = self.validate_data() + + # Валидируем связи узла + validated_links = self.validate_links() + + # Создаем данные портов (аналогично if) + node_data = EachNodeCoreSchemaData( + then_port_number=0, + else_port_number=1, + ) + + # Создаем схему с валидированными данными + return EachNodeCoreSchema( + ps_id=validated_data.ps_id, + node_type=validated_data.node_type, + parent_id=validated_links.parent_id, + parent_port_number=validated_links.parent_port_number, + data=node_data + ) + except Exception as e: + print(f"Each node validation error: {e}") + raise + + def validate_data(self) -> EachNodeData: + """ + Валидирует данные узла each + """ + return EachNodeData(**self.data) + + def validate_links(self) -> EachNodeLinks: + """ + Валидирует связи узла each + """ + return EachNodeLinks(**self.links) def process(self, context): pass diff --git a/nodes/vork_node_if.py b/nodes/vork_node_if.py index 0b33fcf..673e511 100644 --- a/nodes/vork_node_if.py +++ b/nodes/vork_node_if.py @@ -1,11 +1,11 @@ -from typing import Dict, Any +from typing import Any, Dict from core import VorkNode +from core.form_descriptors import get_form_descriptor from model_nodes.node_if_models import ( IfNodeData, IfNodeLinks, IfNodeCoreSchema, - IfNodeCoreSchemaData, - IfNodeDescriptor + IfNodeCoreSchemaData ) @@ -16,8 +16,11 @@ class VorkNodeIf(VorkNode): return "IF" @classmethod - def form(cls) -> IfNodeDescriptor: - return IfNodeDescriptor() + def form(cls) -> Dict[str, Any]: + """ + Возвращает статический дескриптор формы для узла IF + """ + return get_form_descriptor("IF") def validate(self) -> IfNodeCoreSchema: """ @@ -58,5 +61,5 @@ class VorkNodeIf(VorkNode): return IfNodeLinks(**self.links) - def process(self, context: Any) -> bool: - return True + def process(self, context): + pass diff --git a/nodes/vork_node_listen.py b/nodes/vork_node_listen.py index 3af0966..277bd94 100644 --- a/nodes/vork_node_listen.py +++ b/nodes/vork_node_listen.py @@ -1,25 +1,72 @@ from typing import Dict, Any from core import VorkNode -# from model_nodes.node_listen_models import ( -# ListenNodeData, -# ListenNodeLinks, -# ListenNodePSNodeCore, -# ListenNodeSettingsDataCore -# ) +from core.form_descriptors import get_form_descriptor +from model_nodes.node_listen_models import ( + ListenNodeData, + ListenNodeLinks, + ListenNodeCoreSchema, + ListenNodeCoreSchemaData +) class VorkNodeListen(VorkNode): + def __init__(self, data: Dict[str, Any], links: Dict[str, Any] = None): + """ + Инициализация узла listen + """ + super().__init__(data, links or {}) + @property def id(self) -> str: return "LISTEN" @classmethod def form(cls) -> Dict[str, Any]: - return cls.get_schema() + """ + Возвращает статический дескриптор формы для узла Listen + """ + return get_form_descriptor("LISTEN") - def validate(self) -> bool: - return True + def validate(self) -> ListenNodeCoreSchema: + """ + Валидирует данные узла listen и возвращает схему + """ + try: + # Валидируем данные узла + validated_data = self.validate_data() + + # Валидируем связи узла + validated_links = self.validate_links() + + node_data = ListenNodeCoreSchemaData( + then_port_number=0, + is_start=validated_data.is_start + ) + + # Создаем схему с валидированными данными + return ListenNodeCoreSchema( + ps_id=validated_data.ps_id, + node_type=validated_data.node_type, + parent_id=validated_links.parent_id, + parent_port_number=validated_links.parent_port_number, + data=node_data + ) + except Exception as e: + print(f"Listen node validation error: {e}") + raise + + def validate_data(self) -> ListenNodeData: + """ + Валидирует данные узла listen + """ + return ListenNodeData(**self.data) + + def validate_links(self) -> ListenNodeLinks: + """ + Валидирует связи узла listen + """ + return ListenNodeLinks(**self.links) def process(self, context): pass diff --git a/nodes/vork_node_run.py b/nodes/vork_node_run.py index 234e723..ab96b95 100644 --- a/nodes/vork_node_run.py +++ b/nodes/vork_node_run.py @@ -1,18 +1,75 @@ +from typing import Dict, Any +import json from core import VorkNode +from core.form_descriptors import get_form_descriptor +from model_nodes.node_run_models import ( + RunNodeData, + RunNodeLinks, + RunNodeCoreSchema, + RunNodeCoreSchemaData +) class VorkNodeRun(VorkNode): + def __init__(self, data: Dict[str, Any], links: Dict[str, Any] = None): + """ + Инициализация узла run + """ + super().__init__(data, links or {}) + @property def id(self) -> str: - return "node_run" + return "RUN" @classmethod - def form(cls): - pass + def form(cls) -> Dict[str, Any]: + """ + Возвращает статический дескриптор формы для узла Run + """ + return get_form_descriptor("RUN") - def validate(self) -> bool: - return True + def validate(self) -> RunNodeCoreSchema: + """ + Валидирует данные узла run и возвращает схему + """ + try: + # Валидируем данные узла + validated_data = self.validate_data() + + # Валидируем связи узла + validated_links = self.validate_links() + + node_data = RunNodeCoreSchemaData( + then_port_number=0 + ) + + # Создаем схему с валидированными данными + return RunNodeCoreSchema( + ps_id=validated_data.ps_id, + node_type=validated_data.node_type, + parent_id=validated_links.parent_id, + parent_port_number=validated_links.parent_port_number, + data=node_data + ) + except Exception as e: + print(f"Run node validation error: {e}") + raise + + def validate_data(self) -> RunNodeData: + """ + Валидирует данные узла run + """ + return RunNodeData(**self.data) + + def validate_links(self) -> RunNodeLinks: + """ + Валидирует связи узла run + """ + return RunNodeLinks(**self.links) def process(self, context): + """ + Обрабатывает логику узла run - выполнение встроенной задачи + """ pass diff --git a/nodes/vork_node_set.py b/nodes/vork_node_set.py index 8b840b4..dbebd58 100644 --- a/nodes/vork_node_set.py +++ b/nodes/vork_node_set.py @@ -1,18 +1,72 @@ +from typing import Dict, Any from core import VorkNode +from core.form_descriptors import get_form_descriptor +from model_nodes.node_set_models import ( + SetNodeData, + SetNodeLinks, + SetNodeCoreSchema, + SetNodeCoreSchemaData +) class VorkNodeSet(VorkNode): + def __init__(self, data: Dict[str, Any], links: Dict[str, Any] = None): + """ + Инициализация узла set + """ + super().__init__(data, links or {}) + @property def id(self) -> str: - return "node_set" + return "SET" @classmethod - def form(cls): - pass + def form(cls) -> Dict[str, Any]: + """ + Возвращает статический дескриптор формы для узла Set + """ + return get_form_descriptor("SET") - def validate(self) -> bool: - return True + def validate(self) -> SetNodeCoreSchema: + """ + Валидирует данные узла set и возвращает схему + """ + try: + # Валидируем данные узла + validated_data = self.validate_data() + + # Валидируем связи узла + validated_links = self.validate_links() + + # Создаем данные портов + node_data = SetNodeCoreSchemaData( + then_port_number=0, + ) + + # Создаем схему с валидированными данными + return SetNodeCoreSchema( + ps_id=validated_data.ps_id, + node_type=validated_data.node_type, + parent_id=validated_links.parent_id, + parent_port_number=validated_links.parent_port_number, + data=node_data + ) + except Exception as e: + print(f"Set node validation error: {e}") + raise + + def validate_data(self) -> SetNodeData: + """ + Валидирует данные узла set + """ + return SetNodeData(**self.data) + + def validate_links(self) -> SetNodeLinks: + """ + Валидирует связи узла set + """ + return SetNodeLinks(**self.links) def process(self, context): pass diff --git a/nodes/vork_node_switch.py b/nodes/vork_node_switch.py index 8d19e20..601d483 100644 --- a/nodes/vork_node_switch.py +++ b/nodes/vork_node_switch.py @@ -1,18 +1,73 @@ +from typing import Dict, Any from core import VorkNode +from core.form_descriptors import get_form_descriptor +from model_nodes.node_switch_models import ( + SwitchNodeData, + SwitchNodeLinks, + SwitchNodeCoreSchema, + SwitchNodeCoreSchemaData +) class VorkNodeSwitch(VorkNode): + def __init__(self, data: Dict[str, Any], links: Dict[str, Any] = None): + """ + Инициализация узла switch + """ + super().__init__(data, links or {}) + @property def id(self) -> str: - return "node_switch" + return "SWITCH" @classmethod - def form(cls): - pass + def form(cls) -> Dict[str, Any]: + """ + Возвращает статический дескриптор формы для узла Switch + """ + return get_form_descriptor("SWITCH") - def validate(self) -> bool: - return True + def validate(self) -> SwitchNodeCoreSchema: + """ + Валидирует данные узла switch и возвращает схему + """ + try: + # Валидируем данные узла + validated_data = self.validate_data() + + # Валидируем связи узла + validated_links = self.validate_links() + + # Создаем данные портов (default=0, case_1=1) + node_data = SwitchNodeCoreSchemaData( + default_port_number=0, + case_1_port_number=1, + ) + + # Создаем схему с валидированными данными + return SwitchNodeCoreSchema( + ps_id=validated_data.ps_id, + node_type=validated_data.node_type, + parent_id=validated_links.parent_id, + parent_port_number=validated_links.parent_port_number, + data=node_data + ) + except Exception as e: + print(f"Switch node validation error: {e}") + raise + + def validate_data(self) -> SwitchNodeData: + """ + Валидирует данные узла switch + """ + return SwitchNodeData(**self.data) + + def validate_links(self) -> SwitchNodeLinks: + """ + Валидирует связи узла switch + """ + return SwitchNodeLinks(**self.links) def process(self, context): pass diff --git a/nodes/vork_node_trigger.py b/nodes/vork_node_trigger.py index ac1e7d1..c94debf 100644 --- a/nodes/vork_node_trigger.py +++ b/nodes/vork_node_trigger.py @@ -1,18 +1,71 @@ +from typing import Dict, Any from core import VorkNode +from core.form_descriptors import get_form_descriptor +from model_nodes.node_trigger_models import ( + TriggerNodeData, + TriggerNodeLinks, + TriggerNodeCoreSchema, + TriggerNodeCoreSchemaData +) class VorkNodeTrigger(VorkNode): + def __init__(self, data: Dict[str, Any], links: Dict[str, Any] = None): + """ + Инициализация узла trigger + """ + super().__init__(data, links or {}) + @property def id(self) -> str: - return "node_trigger" + return "TRIGGER" @classmethod - def form(cls): - pass + def form(cls) -> Dict[str, Any]: + """ + Возвращает статический дескриптор формы для узла Trigger + """ + return get_form_descriptor("TRIGGER") - def validate(self) -> bool: - return True + def validate(self) -> TriggerNodeCoreSchema: + """ + Валидирует данные узла trigger и возвращает схему + """ + try: + # Валидируем данные узла + validated_data = self.validate_data() + + # Валидируем связи узла + validated_links = self.validate_links() + + node_data = TriggerNodeCoreSchemaData( + then_port_number=0 + ) + + # Создаем схему с валидированными данными + return TriggerNodeCoreSchema( + ps_id=validated_data.ps_id, + node_type=validated_data.node_type, + parent_id=validated_links.parent_id, + parent_port_number=validated_links.parent_port_number, + data=node_data + ) + except Exception as e: + print(f"Trigger node validation error: {e}") + raise + + def validate_data(self) -> TriggerNodeData: + """ + Валидирует данные узла trigger + """ + return TriggerNodeData(**self.data) + + def validate_links(self) -> TriggerNodeLinks: + """ + Валидирует связи узла trigger + """ + return TriggerNodeLinks(**self.links) def process(self, context): pass diff --git a/nodes/vork_node_wait.py b/nodes/vork_node_wait.py index dc4ad3a..e533947 100644 --- a/nodes/vork_node_wait.py +++ b/nodes/vork_node_wait.py @@ -1,18 +1,72 @@ +from typing import Dict, Any from core import VorkNode +from core.form_descriptors import get_form_descriptor +from model_nodes.node_wait_models import ( + WaitNodeData, + WaitNodeLinks, + WaitNodeCoreSchema, + WaitNodeCoreSchemaData +) class VorkNodeWait(VorkNode): + def __init__(self, data: Dict[str, Any], links: Dict[str, Any] = None): + """ + Инициализация узла wait + """ + super().__init__(data, links or {}) + @property def id(self) -> str: - return "node_wait" + return "WAIT" @classmethod - def form(cls): - pass + def form(cls) -> Dict[str, Any]: + """ + Возвращает статический дескриптор формы для узла Wait + """ + return get_form_descriptor("WAIT") - def validate(self) -> bool: - return True + def validate(self) -> WaitNodeCoreSchema: + """ + Валидирует данные узла wait и возвращает схему + """ + try: + # Валидируем данные узла + validated_data = self.validate_data() + + # Валидируем связи узла + validated_links = self.validate_links() + + # Создаем данные портов + node_data = WaitNodeCoreSchemaData( + then_port_number=0, + ) + + # Создаем схему с валидированными данными + return WaitNodeCoreSchema( + ps_id=validated_data.ps_id, + node_type=validated_data.node_type, + parent_id=validated_links.parent_id, + parent_port_number=validated_links.parent_port_number, + data=node_data + ) + except Exception as e: + print(f"Wait node validation error: {e}") + raise + + def validate_data(self) -> WaitNodeData: + """ + Валидирует данные узла wait + """ + return WaitNodeData(**self.data) + + def validate_links(self) -> WaitNodeLinks: + """ + Валидирует связи узла wait + """ + return WaitNodeLinks(**self.links) def process(self, context): pass diff --git a/nodes/vork_node_while.py b/nodes/vork_node_while.py index a56578d..cecf6c6 100644 --- a/nodes/vork_node_while.py +++ b/nodes/vork_node_while.py @@ -1,18 +1,73 @@ +from typing import Dict, Any from core import VorkNode +from core.form_descriptors import get_form_descriptor +from model_nodes.node_while_models import ( + WhileNodeData, + WhileNodeLinks, + WhileNodeCoreSchema, + WhileNodeCoreSchemaData +) class VorkNodeWhile(VorkNode): + def __init__(self, data: Dict[str, Any], links: Dict[str, Any] = None): + """ + Инициализация узла while + """ + super().__init__(data, links or {}) + @property def id(self) -> str: - return "node_while" + return "WHILE" @classmethod - def form(cls): - pass + def form(cls) -> Dict[str, Any]: + """ + Возвращает статический дескриптор формы для узла While + """ + return get_form_descriptor("WHILE") - def validate(self) -> bool: - return True + def validate(self) -> WhileNodeCoreSchema: + """ + Валидирует данные узла while и возвращает схему + """ + try: + # Валидируем данные узла + validated_data = self.validate_data() + + # Валидируем связи узла + validated_links = self.validate_links() + + # Создаем данные портов (аналогично if) + node_data = WhileNodeCoreSchemaData( + then_port_number=0, + else_port_number=1, + ) + + # Создаем схему с валидированными данными + return WhileNodeCoreSchema( + ps_id=validated_data.ps_id, + node_type=validated_data.node_type, + parent_id=validated_links.parent_id, + parent_port_number=validated_links.parent_port_number, + data=node_data + ) + except Exception as e: + print(f"While node validation error: {e}") + raise + + def validate_data(self) -> WhileNodeData: + """ + Валидирует данные узла while + """ + return WhileNodeData(**self.data) + + def validate_links(self) -> WhileNodeLinks: + """ + Валидирует связи узла while + """ + return WhileNodeLinks(**self.links) def process(self, context): pass diff --git a/orm/tables/process.py b/orm/tables/process.py index 158336e..8b67e32 100644 --- a/orm/tables/process.py +++ b/orm/tables/process.py @@ -69,6 +69,14 @@ class NodeType(Enum): LISTEN = "LISTEN" IF = "IF" START = "START" + CALLBACK = "CALLBACK" + EACH = "EACH" + RUN = "RUN" + SET = "SET" + SWITCH = "SWITCH" + TRIGGER = "TRIGGER" + WAIT = "WAIT" + WHILE = "WHILE" ps_node_table = Table(