Skip to content

Commit 98adc88

Browse files
committed
Add support for list in plugin import
Fixes robotframework#112
1 parent bbd45c6 commit 98adc88

File tree

2 files changed

+26
-6
lines changed

2 files changed

+26
-6
lines changed

src/robotlibcore.py

+14-6
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
import inspect
2222
import os
2323
from dataclasses import dataclass
24-
from typing import Any, Callable, List, Optional, get_type_hints
24+
from typing import Any, Callable, List, Optional, Union, get_type_hints
2525

2626
from robot.api.deco import keyword # noqa F401
2727
from robot.errors import DataError
@@ -304,11 +304,11 @@ def __init__(self, argument_specification=None, documentation=None, argument_typ
304304

305305

306306
class PluginParser:
307-
def __init__(self, base_class: Optional[Any] = None, python_object: List[Any] = []):
307+
def __init__(self, base_class: Optional[Any] = None, python_object=None):
308308
self._base_class = base_class
309-
self._python_object = python_object
309+
self._python_object = python_object if python_object else []
310310

311-
def parse_plugins(self, plugins: str) -> List:
311+
def parse_plugins(self, plugins: Union[str, List[str]]) -> List:
312312
imported_plugins = []
313313
importer = Importer("test library")
314314
for parsed_plugin in self._string_to_modules(plugins):
@@ -327,11 +327,11 @@ def parse_plugins(self, plugins: str) -> List:
327327
def get_plugin_keywords(self, plugins: List):
328328
return DynamicCore(plugins).get_keyword_names()
329329

330-
def _string_to_modules(self, modules):
330+
def _string_to_modules(self, modules: Union[str, List[str]]):
331331
parsed_modules: list = []
332332
if not modules:
333333
return parsed_modules
334-
for module in modules.split(","):
334+
for module in self._modules_splitter(modules):
335335
module = module.strip()
336336
module_and_args = module.split(";")
337337
module_name = module_and_args.pop(0)
@@ -346,3 +346,11 @@ def _string_to_modules(self, modules):
346346
module = Module(module=module_name, args=args, kw_args=kw_args)
347347
parsed_modules.append(module)
348348
return parsed_modules
349+
350+
def _modules_splitter(self, modules: Union[str, List[str]]):
351+
if isinstance(modules, str):
352+
for module in modules.split(","):
353+
yield module
354+
else:
355+
for module in modules:
356+
yield module

utest/test_plugin_api.py

+12
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,18 @@ def test_parse_plugins(plugin_parser):
4848
assert isinstance(plugins[1], my_plugin_test.TestClassWithBase)
4949

5050

51+
def test_parse_plugins_as_list(plugin_parser):
52+
plugins = plugin_parser.parse_plugins(["my_plugin_test.TestClass"])
53+
assert len(plugins) == 1
54+
assert isinstance(plugins[0], my_plugin_test.TestClass)
55+
plugins = plugin_parser.parse_plugins(
56+
["my_plugin_test.TestClass", "my_plugin_test.TestClassWithBase"]
57+
)
58+
assert len(plugins) == 2
59+
assert isinstance(plugins[0], my_plugin_test.TestClass)
60+
assert isinstance(plugins[1], my_plugin_test.TestClassWithBase)
61+
62+
5163
def test_parse_plugins_with_base():
5264
parser = PluginParser(my_plugin_test.LibraryBase)
5365
plugins = parser.parse_plugins("my_plugin_test.TestClassWithBase")

0 commit comments

Comments
 (0)