WIP: feat: delete ports #4
@@ -1,16 +1,16 @@
|
||||
from abc import ABC, abstractmethod
|
||||
from typing import Any, Dict
|
||||
from typing import Any
|
||||
|
||||
|
||||
class VorkNode(ABC):
|
||||
|
||||
def __init__(self, data: Dict[str, Any], links: Dict[str, Any]):
|
||||
self.data: Dict[str, Any] = data
|
||||
self.links: Dict[str, Any] = links
|
||||
def __init__(self, data: dict[str, Any], links: dict[str, Any]):
|
||||
self.data: dict[str, Any] = data
|
||||
self.links: dict[str, Any] = links
|
||||
|
||||
@classmethod
|
||||
@abstractmethod
|
||||
def form(cls) -> Dict[str, Any]:
|
||||
def form(cls) -> dict[str, Any]:
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from typing import Dict, Any
|
||||
from typing import Any
|
||||
|
||||
from model_nodes import VorkNodeLinkData, VorkNodeLinkSchema
|
||||
|
||||
@@ -8,7 +8,7 @@ from .link_name_generator import edge_title_generator, edge_title_to_number
|
||||
|
||||
class VorkNodeLink:
|
||||
|
||||
def __init__(self, data: Dict[str, Any]):
|
||||
def __init__(self, data: dict[str, Any]):
|
||||
"""
|
||||
Инициализация связи между узлами
|
||||
"""
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
import importlib
|
||||
import inspect
|
||||
import pkgutil
|
||||
from typing import Dict, Type, Optional, List
|
||||
from typing import Type, Optional
|
||||
from .vork_node import VorkNode
|
||||
|
||||
|
||||
class VorkNodeRegistry:
|
||||
|
||||
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()
|
||||
|
||||
def get(self, node_type: str) -> Optional[Type[VorkNode]]:
|
||||
@@ -55,12 +55,12 @@ class VorkNodeRegistry:
|
||||
except Exception as e:
|
||||
print(f"Ошибка при сканировании пакета 'nodes': {e}")
|
||||
|
||||
def get_available_node_types(self) -> List[str]:
|
||||
def get_available_node_types(self) -> list[str]:
|
||||
"""
|
||||
Возвращает список всех доступных типов узлов
|
||||
|
||||
Returns:
|
||||
List[str]: Список типов узлов
|
||||
list[str]: Список типов узлов
|
||||
"""
|
||||
return list(self.registry.keys())
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from typing import Dict, Any
|
||||
from typing import Any
|
||||
from .vork_node import VorkNode
|
||||
from model_nodes.node_test_models import (
|
||||
TestNodeData,
|
||||
@@ -9,7 +9,7 @@ from model_nodes.node_test_models import (
|
||||
|
||||
class VorkNodeTest(VorkNode):
|
||||
|
||||
def __init__(self, data: Dict[str, Any], links: Dict[str, Any] = None):
|
||||
def __init__(self, data: dict[str, Any], links: dict[str, Any] = None):
|
||||
"""
|
||||
Инициализация узла test
|
||||
"""
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
from __future__ import annotations
|
||||
from typing import Optional, Annotated, Literal, List
|
||||
from typing import Optional, Annotated, Literal, Any
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
|
||||
class LinkPort(BaseModel):
|
||||
id: str
|
||||
id: int
|
||||
label: str
|
||||
is_addable: Optional[bool] = None
|
||||
|
||||
@@ -14,6 +14,7 @@ class LineElement(BaseModel):
|
||||
name: str
|
||||
label: str
|
||||
placeholder: Optional[str] = None
|
||||
value: str = None
|
||||
|
||||
|
||||
class AreaElement(BaseModel):
|
||||
@@ -21,15 +22,17 @@ class AreaElement(BaseModel):
|
||||
name: str
|
||||
label: str
|
||||
placeholder: Optional[str] = None
|
||||
value: str = None
|
||||
|
||||
|
||||
class SelectElement(BaseModel):
|
||||
type: Literal['select']
|
||||
name: str
|
||||
label: str
|
||||
data: List[str]
|
||||
data: list[str]
|
||||
default: Optional[str] = None
|
||||
placeholder: Optional[str] = None
|
||||
value: Optional[Any] = None
|
||||
|
||||
|
||||
class NumberElement(BaseModel):
|
||||
@@ -37,6 +40,7 @@ class NumberElement(BaseModel):
|
||||
name: str
|
||||
label: str
|
||||
placeholder: Optional[str] = None
|
||||
value: int | float
|
||||
|
||||
|
||||
class DateElement(BaseModel):
|
||||
@@ -44,6 +48,7 @@ class DateElement(BaseModel):
|
||||
name: str
|
||||
label: str
|
||||
placeholder: Optional[str] = None
|
||||
value: str = None
|
||||
|
||||
|
||||
FieldElement = Annotated[
|
||||
@@ -57,11 +62,11 @@ class RowElement(BaseModel):
|
||||
name: str
|
||||
label: str
|
||||
link_port: Optional[LinkPort] = None
|
||||
elements: Optional[List[FieldElement]] = None
|
||||
elements: Optional[list[FieldElement]] = None
|
||||
|
||||
|
||||
class FormDescriptor(BaseModel):
|
||||
elements: List[RowElement]
|
||||
elements: list[RowElement]
|
||||
|
||||
|
||||
# Descriptor-suffixed aliases for clarity (backward compatible)
|
||||
|
||||
@@ -36,14 +36,18 @@ class IfNodeCoreSchema(BaseModel):
|
||||
data: Optional[IfNodeCoreSchemaData] = Field(default=None, description="Данные узла")
|
||||
|
||||
|
||||
# Дескриптор формы узла IF
|
||||
IF_FORM_DESCRIPTOR = FormDescriptor(
|
||||
elements=[
|
||||
RowElement(
|
||||
name="condition_row_label",
|
||||
type="row",
|
||||
label="condition_name",
|
||||
),
|
||||
RowElement(
|
||||
name="condition_row",
|
||||
type="row",
|
||||
label="Condition",
|
||||
link_port=LinkPort(id="then_output", label="Then"),
|
||||
label="condition",
|
||||
link_port=LinkPort(id=0, label="Then"),
|
||||
elements=[
|
||||
AreaElement(
|
||||
name="condition",
|
||||
@@ -56,8 +60,8 @@ IF_FORM_DESCRIPTOR = FormDescriptor(
|
||||
RowElement(
|
||||
name="else_row",
|
||||
type="row",
|
||||
label="Alternative path",
|
||||
link_port=LinkPort(id="else_output", label="Else"),
|
||||
label="alternative_path",
|
||||
link_port=LinkPort(id=1, label="Else"),
|
||||
),
|
||||
]
|
||||
)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from typing import Optional, Dict, Any
|
||||
from typing import Optional
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
|
||||
|
||||
@@ -43,36 +43,36 @@ class ListenNodeCoreSchema(BaseModel):
|
||||
LISTEN_FORM_DESCRIPTOR = FormDescriptor(
|
||||
elements=[
|
||||
RowElement(
|
||||
name="event_row",
|
||||
name="listen_row_label",
|
||||
type="row",
|
||||
label="Event",
|
||||
label="listen_name",
|
||||
),
|
||||
RowElement(
|
||||
name="listen_row",
|
||||
type="row",
|
||||
label="event_input",
|
||||
elements=[
|
||||
LineElement(
|
||||
name="event_name",
|
||||
name="event_id",
|
||||
type="line",
|
||||
label="Event",
|
||||
label="event_id",
|
||||
placeholder="Event identifier",
|
||||
)
|
||||
],
|
||||
),
|
||||
RowElement(
|
||||
name="condition_row",
|
||||
name="listen_row",
|
||||
type="row",
|
||||
label="Condition",
|
||||
label="condition_input",
|
||||
link_port=LinkPort(id=0, label="Then"),
|
||||
elements=[
|
||||
AreaElement(
|
||||
name="condition",
|
||||
name="listen_condition",
|
||||
type="area",
|
||||
label="Condition",
|
||||
label="listen_condition",
|
||||
placeholder="If P([condition(i), [AND, OR]]) == true",
|
||||
)
|
||||
],
|
||||
),
|
||||
RowElement(
|
||||
name="then_row",
|
||||
type="row",
|
||||
label="Then",
|
||||
link_port=LinkPort(id="then_output", label="Then"),
|
||||
),
|
||||
]
|
||||
)
|
||||
|
||||
@@ -41,22 +41,14 @@ class SetNodeCoreSchema(BaseModel):
|
||||
SET_FORM_DESCRIPTOR = FormDescriptor(
|
||||
elements=[
|
||||
RowElement(
|
||||
name="variable_row",
|
||||
name="set_row_label",
|
||||
type="row",
|
||||
label="Parameter name",
|
||||
elements=[
|
||||
LineElement(
|
||||
name="variable",
|
||||
type="line",
|
||||
label="Parameter name",
|
||||
placeholder="Enter parameter name",
|
||||
)
|
||||
],
|
||||
label="set_row_name",
|
||||
),
|
||||
RowElement(
|
||||
name="value_row",
|
||||
type="row",
|
||||
label="Value",
|
||||
label="set_value",
|
||||
elements=[
|
||||
AreaElement(
|
||||
name="value",
|
||||
@@ -65,13 +57,7 @@ SET_FORM_DESCRIPTOR = FormDescriptor(
|
||||
placeholder="Enter value",
|
||||
)
|
||||
],
|
||||
),
|
||||
RowElement(
|
||||
name="link_row",
|
||||
type="row",
|
||||
label="Link",
|
||||
link_port=LinkPort(id="then_output", label="then"),
|
||||
elements=[],
|
||||
link_port=LinkPort(id=0, label="then"),
|
||||
),
|
||||
]
|
||||
)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from typing import Dict, Any
|
||||
from typing import Any
|
||||
from core import VorkNode
|
||||
from model_nodes.node_callback_models import (
|
||||
CallbackNodeData,
|
||||
@@ -11,7 +11,7 @@ from model_nodes.node_callback_models import (
|
||||
|
||||
class VorkNodeCallback(VorkNode):
|
||||
|
||||
def __init__(self, data: Dict[str, Any], links: Dict[str, Any] = None):
|
||||
def __init__(self, data: dict[str, Any], links: dict[str, Any] = None):
|
||||
"""
|
||||
Инициализация узла callback
|
||||
"""
|
||||
@@ -22,7 +22,7 @@ class VorkNodeCallback(VorkNode):
|
||||
return "CALLBACK"
|
||||
|
||||
@classmethod
|
||||
def form(cls) -> Dict[str, Any]:
|
||||
def form(cls) -> dict[str, Any]:
|
||||
"""
|
||||
Возвращает статический дескриптор формы для узла Callback
|
||||
"""
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from typing import Dict, Any
|
||||
from typing import Any
|
||||
from core import VorkNode
|
||||
from model_nodes.node_each_models import (
|
||||
EachNodeData,
|
||||
@@ -11,7 +11,7 @@ from model_nodes.node_each_models import (
|
||||
|
||||
class VorkNodeEach(VorkNode):
|
||||
|
||||
def __init__(self, data: Dict[str, Any], links: Dict[str, Any] = None):
|
||||
def __init__(self, data: dict[str, Any], links: dict[str, Any] = None):
|
||||
"""
|
||||
Инициализация узла each
|
||||
"""
|
||||
@@ -22,7 +22,7 @@ class VorkNodeEach(VorkNode):
|
||||
return "EACH"
|
||||
|
||||
@classmethod
|
||||
def form(cls) -> Dict[str, Any]:
|
||||
def form(cls) -> dict[str, Any]:
|
||||
"""
|
||||
Возвращает статический дескриптор формы для узла Each
|
||||
"""
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from typing import Any, Dict
|
||||
from typing import Any
|
||||
from core import VorkNode
|
||||
from model_nodes.node_if_models import (
|
||||
IfNodeData,
|
||||
@@ -16,7 +16,7 @@ class VorkNodeIf(VorkNode):
|
||||
return "IF"
|
||||
|
||||
@classmethod
|
||||
def form(cls) -> Dict[str, Any]:
|
||||
def form(cls) -> dict[str, Any]:
|
||||
"""
|
||||
Возвращает статический дескриптор формы для узла IF
|
||||
"""
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from typing import Dict, Any
|
||||
from typing import Any
|
||||
from core import VorkNode
|
||||
from model_nodes.node_listen_models import (
|
||||
ListenNodeData,
|
||||
@@ -11,7 +11,7 @@ from model_nodes.node_listen_models import (
|
||||
|
||||
class VorkNodeListen(VorkNode):
|
||||
|
||||
def __init__(self, data: Dict[str, Any], links: Dict[str, Any] = None):
|
||||
def __init__(self, data: dict[str, Any], links: dict[str, Any] = None):
|
||||
"""
|
||||
Инициализация узла listen
|
||||
"""
|
||||
@@ -22,7 +22,7 @@ class VorkNodeListen(VorkNode):
|
||||
return "LISTEN"
|
||||
|
||||
@classmethod
|
||||
def form(cls) -> Dict[str, Any]:
|
||||
def form(cls) -> dict[str, Any]:
|
||||
"""
|
||||
Возвращает статический дескриптор формы для узла Listen
|
||||
"""
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from typing import Dict, Any
|
||||
from typing import Any
|
||||
from core import VorkNode
|
||||
from model_nodes.node_run_models import (
|
||||
RunNodeData,
|
||||
@@ -11,7 +11,7 @@ from model_nodes.node_run_models import (
|
||||
|
||||
class VorkNodeRun(VorkNode):
|
||||
|
||||
def __init__(self, data: Dict[str, Any], links: Dict[str, Any] = None):
|
||||
def __init__(self, data: dict[str, Any], links: dict[str, Any] = None):
|
||||
"""
|
||||
Инициализация узла run
|
||||
"""
|
||||
@@ -22,7 +22,7 @@ class VorkNodeRun(VorkNode):
|
||||
return "RUN"
|
||||
|
||||
@classmethod
|
||||
def form(cls) -> Dict[str, Any]:
|
||||
def form(cls) -> dict[str, Any]:
|
||||
"""
|
||||
Возвращает статический дескриптор формы для узла Run
|
||||
"""
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from typing import Dict, Any
|
||||
from typing import Any
|
||||
from core import VorkNode
|
||||
from model_nodes.node_set_models import (
|
||||
SetNodeData,
|
||||
@@ -11,7 +11,7 @@ from model_nodes.node_set_models import (
|
||||
|
||||
class VorkNodeSet(VorkNode):
|
||||
|
||||
def __init__(self, data: Dict[str, Any], links: Dict[str, Any] = None):
|
||||
def __init__(self, data: dict[str, Any], links: dict[str, Any] = None):
|
||||
"""
|
||||
Инициализация узла set
|
||||
"""
|
||||
@@ -22,7 +22,7 @@ class VorkNodeSet(VorkNode):
|
||||
return "SET"
|
||||
|
||||
@classmethod
|
||||
def form(cls) -> Dict[str, Any]:
|
||||
def form(cls) -> dict[str, Any]:
|
||||
"""
|
||||
Возвращает статический дескриптор формы для узла Set
|
||||
"""
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from typing import Dict, Any
|
||||
from typing import Any
|
||||
from core import VorkNode
|
||||
from model_nodes.node_switch_models import (
|
||||
SwitchNodeData,
|
||||
@@ -11,7 +11,7 @@ from model_nodes.node_switch_models import (
|
||||
|
||||
class VorkNodeSwitch(VorkNode):
|
||||
|
||||
def __init__(self, data: Dict[str, Any], links: Dict[str, Any] = None):
|
||||
def __init__(self, data: dict[str, Any], links: dict[str, Any] = None):
|
||||
"""
|
||||
Инициализация узла switch
|
||||
"""
|
||||
@@ -22,7 +22,7 @@ class VorkNodeSwitch(VorkNode):
|
||||
return "SWITCH"
|
||||
|
||||
@classmethod
|
||||
def form(cls) -> Dict[str, Any]:
|
||||
def form(cls) -> dict[str, Any]:
|
||||
"""
|
||||
Возвращает статический дескриптор формы для узла Switch
|
||||
"""
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from typing import Dict, Any
|
||||
from typing import Any
|
||||
from core import VorkNode
|
||||
from model_nodes.node_trigger_models import (
|
||||
TriggerNodeData,
|
||||
@@ -11,7 +11,7 @@ from model_nodes.node_trigger_models import (
|
||||
|
||||
class VorkNodeTrigger(VorkNode):
|
||||
|
||||
def __init__(self, data: Dict[str, Any], links: Dict[str, Any] = None):
|
||||
def __init__(self, data: dict[str, Any], links: dict[str, Any] = None):
|
||||
"""
|
||||
Инициализация узла trigger
|
||||
"""
|
||||
@@ -22,7 +22,7 @@ class VorkNodeTrigger(VorkNode):
|
||||
return "TRIGGER"
|
||||
|
||||
@classmethod
|
||||
def form(cls) -> Dict[str, Any]:
|
||||
def form(cls) -> dict[str, Any]:
|
||||
"""
|
||||
Возвращает статический дескриптор формы для узла Trigger
|
||||
"""
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from typing import Dict, Any
|
||||
from typing import Any
|
||||
from core import VorkNode
|
||||
from model_nodes.node_wait_models import (
|
||||
WaitNodeData,
|
||||
@@ -11,7 +11,7 @@ from model_nodes.node_wait_models import (
|
||||
|
||||
class VorkNodeWait(VorkNode):
|
||||
|
||||
def __init__(self, data: Dict[str, Any], links: Dict[str, Any] = None):
|
||||
def __init__(self, data: dict[str, Any], links: dict[str, Any] = None):
|
||||
"""
|
||||
Инициализация узла wait
|
||||
"""
|
||||
@@ -22,7 +22,7 @@ class VorkNodeWait(VorkNode):
|
||||
return "WAIT"
|
||||
|
||||
@classmethod
|
||||
def form(cls) -> Dict[str, Any]:
|
||||
def form(cls) -> dict[str, Any]:
|
||||
"""
|
||||
Возвращает статический дескриптор формы для узла Wait
|
||||
"""
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from typing import Dict, Any
|
||||
from typing import Any
|
||||
from core import VorkNode
|
||||
from model_nodes.node_while_models import (
|
||||
WhileNodeData,
|
||||
@@ -11,7 +11,7 @@ from model_nodes.node_while_models import (
|
||||
|
||||
class VorkNodeWhile(VorkNode):
|
||||
|
||||
def __init__(self, data: Dict[str, Any], links: Dict[str, Any] = None):
|
||||
def __init__(self, data: dict[str, Any], links: dict[str, Any] = None):
|
||||
"""
|
||||
Инициализация узла while
|
||||
"""
|
||||
@@ -22,7 +22,7 @@ class VorkNodeWhile(VorkNode):
|
||||
return "WHILE"
|
||||
|
||||
@classmethod
|
||||
def form(cls) -> Dict[str, Any]:
|
||||
def form(cls) -> dict[str, Any]:
|
||||
"""
|
||||
Возвращает статический дескриптор формы для узла While
|
||||
"""
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
from pydantic import Field
|
||||
from typing import Dict, Any
|
||||
from typing import Any
|
||||
from datetime import datetime
|
||||
from enum import Enum
|
||||
|
||||
@@ -12,7 +12,7 @@ class NodeLink(Base):
|
||||
link_name: str = Field(..., max_length=20)
|
||||
node_id: int
|
||||
next_node_id: int
|
||||
settings: Dict[str, Any]
|
||||
settings: dict[str, Any]
|
||||
creator_id: int
|
||||
created_at: datetime
|
||||
status: NodeLinkStatus
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
from pydantic import Field
|
||||
from typing import Dict, Any
|
||||
from typing import Any
|
||||
from datetime import datetime
|
||||
from enum import Enum
|
||||
|
||||
@@ -15,5 +15,5 @@ class ProcessSchema(Base):
|
||||
owner_id: int
|
||||
creator_id: int
|
||||
created_at: datetime
|
||||
settings: Dict[str, Any]
|
||||
settings: dict[str, Any]
|
||||
status: ProcessStatus
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from typing import Dict, Any
|
||||
from typing import Any
|
||||
from datetime import datetime
|
||||
|
||||
from orm.schemas.base import Base
|
||||
@@ -7,7 +7,7 @@ from orm.schemas.base import Base
|
||||
class ProcessStatusSchema(Base):
|
||||
id: int
|
||||
version: int
|
||||
snapshot: Dict[str, Any]
|
||||
snapshot: dict[str, Any]
|
||||
owner_id: int
|
||||
created_at: datetime
|
||||
is_last: int
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
from datetime import datetime
|
||||
from typing import Dict, Any
|
||||
from typing import Any
|
||||
from enum import Enum
|
||||
|
||||
from orm.schemas.base import Base
|
||||
@@ -11,6 +11,6 @@ class Ps_Node(Base):
|
||||
ps_id: int
|
||||
node_type: NodeType
|
||||
settings: dict
|
||||
creator_id: Dict[str, Any]
|
||||
creator_id: dict[str, Any]
|
||||
created_at: datetime
|
||||
status: NodeStatus
|
||||
|
||||
Reference in New Issue
Block a user