26 from robot.api.deco
import keyword
32 func.robot_name = name
33 func.robot_tags = tags
38 PY2 = sys.version_info < (3,)
40 __version__ =
'1.0.1.dev1'
52 for component
in library_components:
53 for name, func
in self.
_get_members_get_members(component):
54 if callable(func)
and hasattr(func,
'robot_name'):
55 kw = getattr(component, name)
56 kw_name = func.robot_name
or name
63 if inspect.ismodule(component):
64 return inspect.getmembers(component)
65 if inspect.isclass(component):
66 raise TypeError(
'Libraries must be modules or instances, got '
67 'class {!r} instead.'.format(component.__name__))
68 if type(component) != component.__class__:
69 raise TypeError(
'Libraries must be modules or new-style class '
70 'instances, got old-style class {!r} instead.'
71 .format(component.__class__.__name__))
77 for name
in dir(instance):
78 owner = cls
if hasattr(cls, name)
else instance
79 yield name, getattr(owner, name)
84 raise AttributeError(
'{!r} object has no attribute {!r}'
85 .format(type(self).__name__, name))
89 my_attrs = dir(type(self)) + list(self.__dict__)
92 return sorted(set(my_attrs) | set(self.
attributesattributes))
102 _get_keyword_tags_supported =
False
105 return self.
keywordskeywords[name](*args, **kwargs)
108 kw = self.
keywordskeywords[name]
if name !=
'__init__' else self.
__init____init__
109 args, defaults, varargs, kwargs = self.
_get_arg_spec_get_arg_spec(kw)
110 args += [
'{}={}'.format(name, value)
for name, value
in defaults]
112 args.append(
'*{}'.format(varargs))
114 args.append(
'**{}'.format(kwargs))
119 spec = inspect.getargspec(kw)
120 keywords = spec.keywords
122 spec = inspect.getfullargspec(kw)
123 keywords = spec.varkw
124 args = spec.args[1:]
if inspect.ismethod(kw)
else spec.args
125 defaults = spec.defaults
or ()
126 nargs = len(args) - len(defaults)
127 mandatory = args[:nargs]
128 defaults = zip(args[nargs:], defaults)
129 return mandatory, defaults, spec.varargs, keywords
133 return self.
keywordskeywords[name].robot_tags
136 if name ==
'__intro__':
137 return inspect.getdoc(self)
or ''
138 if name ==
'__init__':
139 return inspect.getdoc(self.
__init____init__)
or ''
141 doc = inspect.getdoc(kw)
or ''
143 tags =
'Tags: {}'.format(
', '.join(kw.robot_tags))
144 doc =
'{}\n\n{}'.format(doc, tags)
if doc
else tags
151 HybridCore.__init__(self, [])
def get_keyword_tags(self, name)
def run_keyword(self, name, args, kwargs)
def get_keyword_documentation(self, name)
def get_keyword_arguments(self, name)
bool _get_keyword_tags_supported
def _get_arg_spec(self, kw)
def add_library_components(self, library_components)
def _get_members(self, component)
def __getattr__(self, name)
def _get_members_from_instance(self, instance)
def get_keyword_names(self)
def __init__(self, library_components)
def keyword(name=None, tags=())