lpcore.abc.process のソースコード
from abc import ABC
from typing import Any, ClassVar, Final
from lpcore.abc.task import Task
[ドキュメント]
class Process(Task, ABC):
"""プロセスを表す抽象クラス.
Args:
devices (dict[str, Any], optional): プロセスが使用するデバイス.
parameters (dict[str, Any], optional): プロセスのパラメータ.
child_tasks (dict[str, Task], optional): 子タスク.
name (str, optional): プロセスの名前.
デフォルト値は None.
See Also:
:class:`Task`
"""
devices_required: ClassVar[dict[str, Any]] = {}
"""プロセスが必要とするデバイスを指定する辞書型."""
devices_optional: ClassVar[dict[str, Any]] = {}
"""プロセスがオプションで必要とするデバイスを指定する辞書型."""
def __init__(self,
devices: dict[str, Any] | None = None,
parameters: dict[str, Any] | None = None,
child_tasks: dict[str, Task] | None = None,
name: str | None = None,
*args: Any,
**kwargs: Any) -> None:
devices = devices or {}
self.validate_parameters(devices, self.devices_required, "devices")
self._devices: Final[dict[str, Any]] = {
key: value for key, value in devices.items() if key in self.devices_required
}
devices_optional = {
key: value for key, value in devices.items() if key in self.devices_optional
}
self.validate_optional_parameters(devices_optional, self.devices_optional,
"devices_optional")
self._devices_optional: Final[dict[str, Any]] = devices_optional
super().__init__(parameters, child_tasks, name, *args, **kwargs)
@property
def devices(self) -> dict[str, Any]:
"""プロセスが使用するデバイス(イミュータブル)"""
return {**self._devices, **self._devices_optional}
[ドキュメント]
def execute(self, **kwargs: Any) -> dict[str, Any]:
"""プロセスを実行するメソッド.
Returns:
dict[str, Any]: プロセスの実行結果.
"""
result = super().execute(**kwargs)
return result