Source code for fastcs.controller_api
from collections.abc import Iterator
from dataclasses import dataclass, field
from fastcs.attributes import Attribute
from fastcs.cs_methods import Command, Put, Scan
[docs]
@dataclass
class ControllerAPI:
"""Attributes, bound methods and sub APIs of a `Controller` / `SubController`"""
path: list[str] = field(default_factory=list)
"""Path within controller tree (empty if this is the root)"""
attributes: dict[str, Attribute] = field(default_factory=dict)
command_methods: dict[str, Command] = field(default_factory=dict)
put_methods: dict[str, Put] = field(default_factory=dict)
scan_methods: dict[str, Scan] = field(default_factory=dict)
sub_apis: dict[str, "ControllerAPI"] = field(default_factory=dict)
"""APIs of the sub controllers of the `Controller` this API was built from"""
description: str | None = None
[docs]
def walk_api(self) -> Iterator["ControllerAPI"]:
"""Walk through all the nested `ControllerAPI` s of this `ControllerAPI`.
Yields the `ControllerAPI` s from a depth-first traversal of the tree,
including self.
"""
yield self
for api in self.sub_apis.values():
yield from api.walk_api()