add get_descriptors with using "return" and "set"

This commit is contained in:
ilia 2023-10-24 10:13:31 +03:00
parent 9cf90c7f18
commit 08cbcec767

View File

@ -3,7 +3,7 @@ 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
import inspect
class TurtleDevice(SynchronyDevice): class TurtleDevice(SynchronyDevice):
def open(self): def open(self):
@ -35,3 +35,41 @@ class TurtleDevice(SynchronyDevice):
def invalidate(self, trait_name: str): def invalidate(self, trait_name: str):
pass pass
def get_descriptors(self):
descriptors = dict(actions=dict(), traits=dict())
for m_name, member in inspect.getmembers(Turtle):
if m_name.startswith("_"): continue
if m_name.lower() != m_name: continue
doc = inspect.getdoc(member)
if doc is None: continue
first_line_doc = inspect.getdoc(member).lower().split("\n")[0]
print(first_line_doc)
if not inspect.isfunction(member):
descriptors["traits"][m_name] = TraitDescriptor(m_name,
doc,
readable=True,
writable=False)
print(m_name)
continue
if inspect.ismethod(member):
print(m_name)
return_in_doc = ("return" in first_line_doc)
set_in_doc = ("set" in first_line_doc)
if return_in_doc or set_in_doc:
descriptors["traits"][m_name] = TraitDescriptor(m_name,
doc,
readable=return_in_doc,
writable=set_in_doc)
print("TRAIT")
else:
sig = inspect.signature(member)
params_dict = dict(sig.parameters)
descriptors["actions"][m_name] = ActionDescriptor(m_name,
arguments=params_dict,
info=doc)
print("ACTION")
print("------------------------------------------")
return descriptors