Source code for plynx.node

"""
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
[docs]class InputItem: """Input item abstraction"""
[docs] name: str
[docs] file_type: str
[docs] is_array: bool
[docs] min_count: int
[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 OutputItem: """Output item abstraction"""
[docs] name: str
[docs] file_type: str
[docs] is_array: bool
[docs] min_count: int
[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] name: str
[docs] parameter_type: str
[docs] value: Any
[docs] widget: Optional[str]
[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] title: str
[docs] description: str
[docs] kind: str
[docs] node_type: str
[docs] auto_run_enabled: bool = True
[docs] inputs: List[InputItem] = field(default_factory=list)
[docs] params: List[ParamItem] = field(default_factory=list)
[docs] outputs: List[OutputItem] = field(default_factory=list)
# pylint: disable=redefined-builtin
[docs]def input( name=None, var_type=None, is_array=False, min_count=1, ): """PLynx Operation Input""" def decorator(func_or_class): func_or_class.plynx_params.inputs.insert(0, InputItem( 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 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