artiq_rpctool: list-methods also prints class docstring

This commit is contained in:
Yann Sionneau 2015-06-23 18:35:32 +02:00
parent f0dddd9f39
commit 71721a152e
2 changed files with 11 additions and 6 deletions

View File

@ -36,8 +36,10 @@ def list_targets(target_names, id_parameters):
def list_methods(remote):
methods = remote.get_rpc_method_list()
for name, (argspec, docstring) in sorted(methods.items()):
doc = remote.get_rpc_method_list()
if doc["docstring"] is not None:
print(doc["docstring"])
for name, (argspec, docstring) in sorted(doc["methods"].items()):
args = ""
for arg in argspec["args"]:
args += arg

View File

@ -442,15 +442,18 @@ class Server(_AsyncioServer):
try:
if obj["action"] == "get_rpc_method_list":
members = inspect.getmembers(target, inspect.ismethod)
methods = {}
doc = {
"docstring": target.__doc__,
"methods": {}
}
for name, method in members:
if name.startswith("_"):
continue
method = getattr(target, name)
argspec = inspect.getfullargspec(method)
methods[name] = (dict(argspec.__dict__),
doc["methods"][name] = (dict(argspec.__dict__),
inspect.getdoc(method))
obj = {"status": "ok", "ret": methods}
obj = {"status": "ok", "ret": doc}
elif obj["action"] == "call":
logger.debug("calling %s", _PrettyPrintCall(obj))
method = getattr(target, obj["name"])