fill methods

This commit is contained in:
ilia 2023-10-26 17:28:48 +03:00
parent b0e095e2e7
commit e6a2f6eac7

View File

@ -3,11 +3,14 @@ from typing import Optional, Collection, Any
from controls.device import SynchronyDevice from controls.device import SynchronyDevice
from controls.device import TraitDescriptor from controls.device import TraitDescriptor
from controls.device import ActionDescriptor from controls.device import ActionDescriptor
from controls.device import DeviceError
import inspect import inspect
class TurtleDevice(SynchronyDevice): class TurtleDevice(SynchronyDevice):
def open(self): def open(self):
self.turtle = Turtle() self.turtle = Turtle()
self.descriptors = dict(traits=dict(), actions=dict())
super().open() super().open()
def close(self): def close(self):
@ -22,20 +25,36 @@ class TurtleDevice(SynchronyDevice):
def __getitem__(self, trait_name: str) -> Optional[Any]: def __getitem__(self, trait_name: str) -> Optional[Any]:
"""Return logical state of trait `trait_name`.""" """Return logical state of trait `trait_name`."""
pass return self.descriptors[trait_name]
def read_descriptors(self, arg):
self.descriptors = self.get_descriptors()
return self.descriptors
def read(self, trait_name: str) -> Any: def read(self, trait_name: str) -> Any:
pass """Read physical state of trait `trait_name` from device."""
self.read_descriptors()
return self.descriptors[trait_name]
def write(self, trait_name: str, value: Any) -> bool: def write(self, trait_name: str, value: Any) -> bool:
self.turtle.write() """Turtle traits are not writable"""
# trait_desc = self.trait_descriptors.get(trait_name)
# if trait_desc.writable:
# return getattr(self.turtle, trait_name)(value)
super().write()
def execute(self, action_name: str, *args, **kwargs): def execute(self, action_name: str, *args, **kwargs):
"""Execute action `action_name`, using `args` and `kwargs` as action argument.""" """Execute action `action_name`, using `args` and `kwargs` as action argument."""
pass action = self.get_descriptors()["actions"].get(action_name)
if action:
return getattr(self.turtle, action_name)(*args, **kwargs)
super().execute()
def invalidate(self, trait_name: str): def invalidate(self, trait_name: str):
pass """Invalidate logical state of trait `trait_name`"""
if self.trait_descriptors.get(trait_name):
self.trait_descriptors[trait_name] = None
raise DeviceError()
def get_descriptors(self): def get_descriptors(self):
descriptors = dict(actions=dict(), traits=dict()) descriptors = dict(actions=dict(), traits=dict())