"""
PLynx API for generation user Nodes.
"""
# pylint: disable=consider-using-from-import
from dataclasses import dataclass, field
from typing import Any, List, Optional
import plynx.node.typing as typings
import plynx.node.utils as utils # noqa
@dataclass
}
@dataclass
[docs]class OutputItem:
"""Output item abstraction"""
[docs] def to_dict(self):
"""Dict representation"""
return {
"name": self.name,
"file_type": self.file_type,
"is_array": self.is_array,
"min_count": self.min_count,
}
@dataclass
[docs]class ParamItem:
"""Parameter item abstraction"""
[docs] def to_dict(self):
"""Dict representation"""
return {
"name": self.name,
"parameter_type": self.parameter_type,
"value": self.value,
"widget": self.widget,
}
@dataclass
[docs]class PlynxParams:
"""Internal PLynx Node params"""
# pylint: disable=too-many-instance-attributes
[docs] auto_run_enabled: bool = True
[docs] params: List[ParamItem] = field(default_factory=list)
[docs] outputs: List[OutputItem] = field(default_factory=list)
# pylint: disable=redefined-builtin
[docs]def output(
name=None,
var_type=None,
is_array=False,
min_count=1,
):
"""PLynx Operation Output"""
def decorator(func_or_class):
func_or_class.plynx_params.outputs.insert(0, OutputItem(
name=name,
file_type=typings.type_to_str(var_type),
is_array=is_array,
min_count=min_count,
))
return func_or_class
return decorator
[docs]def param(
name=None,
var_type=None,
default=None,
widget="",
):
"""PLynx Operation Parameter"""
def decorator(func_or_class):
func_or_class.plynx_params.params.insert(0, ParamItem(
name=name,
parameter_type=typings.type_to_str(var_type),
value=default,
widget=None if widget is None else widget or name,
))
return func_or_class
return decorator
[docs]def operation(node_type=None, title=None, description="", kind=None, auto_run_enabled: bool = True):
"""PLynx user-defined Operation"""
def decorator(func_or_class):
func_or_class.plynx_params = PlynxParams(
title=title or func_or_class.__name__,
description=description,
kind=kind or "python-code-operation",
node_type=node_type or "python-code-operation",
auto_run_enabled=auto_run_enabled,
inputs=[],
params=[],
outputs=[],
)
return func_or_class
return decorator
[docs]parameter = param # Alias