Skip to content

Commit 5588185

Browse files
committed
Cleanup handling __init__/__intro__ docs/args
1 parent e7a575f commit 5588185

File tree

1 file changed

+22
-9
lines changed

1 file changed

+22
-9
lines changed

src/robotremoteserver.py

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -214,16 +214,12 @@ def run_keyword(self, name, args, kwargs=None):
214214
def _get_keyword(self, name):
215215
if name in self._robot_name_index:
216216
name = self._robot_name_index[name]
217-
kw = getattr(self._library, name, None)
218-
return kw if is_function_or_method(kw) else None
217+
return getattr(self._library, name)
219218

220219
def get_keyword_arguments(self, name):
221-
kw = self._get_keyword(name)
222-
if not kw:
220+
if __name__ == '__init__':
223221
return []
224-
return self._arguments_from_kw(kw)
225-
226-
def _arguments_from_kw(self, kw):
222+
kw = self._get_keyword(name)
227223
args, varargs, kwargs, defaults = inspect.getargspec(kw)
228224
if inspect.ismethod(kw):
229225
args = args[1:] # drop 'self'
@@ -239,15 +235,32 @@ def _arguments_from_kw(self, kw):
239235
def get_keyword_documentation(self, name):
240236
if name == '__intro__':
241237
return inspect.getdoc(self._library) or ''
242-
if name == '__init__' and inspect.ismodule(self._library):
243-
return ''
238+
if name == '__init__':
239+
init = self._get_init(self._library)
240+
return inspect.getdoc(init) or ''
244241
keyword = self._get_keyword(name)
245242
doc = (inspect.getdoc(keyword) or '').lstrip()
246243
if getattr(keyword, 'robot_tags', []):
247244
tags = 'Tags: %s' % ', '.join(keyword.robot_tags)
248245
doc = '%s\n\n%s' % (doc, tags) if doc else tags
249246
return doc
250247

248+
def _get_init(self, library):
249+
if inspect.ismodule(library):
250+
return None
251+
init = getattr(library, '__init__', None)
252+
return init if self._is_valid_init(init) else None
253+
254+
def _is_valid_init(self, init):
255+
if not init:
256+
return False
257+
# https://bitbucket.org/pypy/pypy/issues/2462/
258+
if 'PyPy' in sys.version:
259+
if PY2:
260+
return init.__func__ is not object.__init__.__func__
261+
return init is not object.__init__
262+
return is_function_or_method(init)
263+
251264

252265
class HybridRemoteLibrary(StaticRemoteLibrary):
253266

0 commit comments

Comments
 (0)