From e9a0b2832e708c938eec8391efa113c4a3b53d40 Mon Sep 17 00:00:00 2001 From: Dmitriy Bazanov Date: Thu, 26 Oct 2023 22:57:53 +0300 Subject: [PATCH] Add all methods realized --- src/equipment/turtle_device.py | 40 ++++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/src/equipment/turtle_device.py b/src/equipment/turtle_device.py index f433dd8..6dc3001 100644 --- a/src/equipment/turtle_device.py +++ b/src/equipment/turtle_device.py @@ -15,21 +15,31 @@ class TurtleDevice(SynchronyDevice): super().__init__() self.open() - def open(self): + def open(self) -> None: self.turtle = Turtle() - def close(self): + def close(self)-> None: del self.turtle + self.close() - def execute(self, action_name: str, *args, **kwargs): - pass + def execute(self, action_name: str, *args, **kwargs) -> None: + actions = self.action_descriptors + for action in actions: + if action.name == action_name: + # NOTE: судя по заданию, должен быть такой чекер, но почему-то у меня inspect плохо спарсил типы + # везде empty_time, хотя судя по доке в модуле typos проставлены + # for argument in kwargs: + # action_tmp_argument_type = action.arguments[argument] + # given_method_tmp_argument = type(kwargs[argument]) + # assert ( + # action_tmp_argument_type == given_method_tmp_argument + # ), f"Переданный аргумент должен быть типа {action_tmp_argument_type}, вы передали {given_method_tmp_argument}" + getattr(self.turtle, action_name)(*args, **kwargs) + return + raise NoSuchAction def read(self, trait_name: str) -> Any: - traits = self.trait_descriptors - for trait in traits: - if trait.name == trait_name: - return self.turtle.__getattribute__(trait_name) - raise NoSuchTrait + return Turtle().__getattribute__(trait_name) def write(self, trait_name: str, value: Any) -> bool: traits = self.trait_descriptors @@ -43,11 +53,17 @@ class TurtleDevice(SynchronyDevice): return True raise NoSuchTrait - def invalidate(self, trait_name: str): - pass + def invalidate(self, trait_name: str) -> None: + # NOTE: если я правильно понял, что должен делать метод + self.write(trait_name=trait_name, value=Turtle().__getattribute__(trait_name)) + return def __getitem__(self, trait_name: str) -> Optional[Any]: - pass + traits = self.trait_descriptors + for trait in traits: + if trait.name == trait_name: + return self.turtle.__getattribute__(trait_name) + raise NoSuchTrait @property def trait_descriptors(self) -> Collection[TraitDescriptor]: