Skip to content

Commit dad9e72

Browse files
committed
Adding dynamic API test libraries which are just wrapped instances of the StaticApiLibrary.
1 parent f34408e commit dad9e72

File tree

4 files changed

+68
-0
lines changed

4 files changed

+68
-0
lines changed

atest/libs/FullDynamicLibrary.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import sys
2+
from StaticApiLibrary import AcceptanceTestLibrary
3+
from util.dynamic import DynamicApi
4+
5+
6+
if __name__ == '__main__':
7+
from robotremoteserver import RobotRemoteServer
8+
9+
_library = DynamicApi(AcceptanceTestLibrary(), True, True)
10+
RobotRemoteServer(_library, *sys.argv[1:])
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import sys
2+
from StaticApiLibrary import AcceptanceTestLibrary
3+
from util.dynamic import DynamicApi
4+
5+
6+
if __name__ == '__main__':
7+
from robotremoteserver import RobotRemoteServer
8+
9+
_library = DynamicApi(AcceptanceTestLibrary(), False, False)
10+
RobotRemoteServer(_library, *sys.argv[1:])

atest/libs/util/__init__.py

Whitespace-only changes.

atest/libs/util/dynamic.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import inspect
2+
3+
4+
class DynamicApi:
5+
"""A wrapper to make static API libraries use the dynamic API."""
6+
def __init__(self, library, kwdoc=True, argsdoc=True):
7+
self._library = library
8+
if kwdoc:
9+
self.get_keyword_documentation = self._get_keyword_documentation
10+
if argsdoc:
11+
self.get_keyword_arguments = self._get_keyword_arguments
12+
13+
def get_keyword_names(self):
14+
return [attr for attr in dir(self._library) if attr[0] != '_'
15+
and inspect.isroutine(getattr(self._library, attr))]
16+
17+
def run_keyword(self, name, args):
18+
return self._get_keyword(name)(*args)
19+
20+
def _get_keyword_documentation(self, name):
21+
if name == '__intro__':
22+
return inspect.getdoc(self._library) or ''
23+
if name == '__init__' and inspect.ismodule(self._library):
24+
return ''
25+
return inspect.getdoc(self._get_keyword(name)) or ''
26+
27+
def _get_keyword_arguments(self, name):
28+
kw = self._get_keyword(name)
29+
if not kw:
30+
return []
31+
return self._arguments_from_kw(kw)
32+
33+
def _get_keyword(self, name):
34+
kw = getattr(self._library, name, None)
35+
if inspect.isroutine(kw):
36+
return kw
37+
return None
38+
39+
def _arguments_from_kw(self, kw):
40+
args, varargs, _, defaults = inspect.getargspec(kw)
41+
if inspect.ismethod(kw):
42+
args = args[1:] # drop 'self'
43+
if defaults:
44+
args, names = args[:-len(defaults)], args[-len(defaults):]
45+
args += ['%s=%s' % (n, d) for n, d in zip(names, defaults)]
46+
if varargs:
47+
args.append('*%s' % varargs)
48+
return args

0 commit comments

Comments
 (0)