Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 14 additions & 6 deletions src/robotlibcore.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
import inspect
import os
from dataclasses import dataclass
from typing import Any, Callable, List, Optional, get_type_hints
from typing import Any, Callable, List, Optional, Union, get_type_hints

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


class PluginParser:
def __init__(self, base_class: Optional[Any] = None, python_object: List[Any] = []):
def __init__(self, base_class: Optional[Any] = None, python_object=None):
self._base_class = base_class
self._python_object = python_object
self._python_object = python_object if python_object else []

def parse_plugins(self, plugins: str) -> List:
def parse_plugins(self, plugins: Union[str, List[str]]) -> List:
imported_plugins = []
importer = Importer("test library")
for parsed_plugin in self._string_to_modules(plugins):
Expand All @@ -327,11 +327,11 @@ def parse_plugins(self, plugins: str) -> List:
def get_plugin_keywords(self, plugins: List):
return DynamicCore(plugins).get_keyword_names()

def _string_to_modules(self, modules):
def _string_to_modules(self, modules: Union[str, List[str]]):
parsed_modules: list = []
if not modules:
return parsed_modules
for module in modules.split(","):
for module in self._modules_splitter(modules):
module = module.strip()
module_and_args = module.split(";")
module_name = module_and_args.pop(0)
Expand All @@ -346,3 +346,11 @@ def _string_to_modules(self, modules):
module = Module(module=module_name, args=args, kw_args=kw_args)
parsed_modules.append(module)
return parsed_modules

def _modules_splitter(self, modules: Union[str, List[str]]):
if isinstance(modules, str):
for module in modules.split(","):
yield module
else:
for module in modules:
yield module
12 changes: 12 additions & 0 deletions utest/test_plugin_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,18 @@ def test_parse_plugins(plugin_parser):
assert isinstance(plugins[1], my_plugin_test.TestClassWithBase)


def test_parse_plugins_as_list(plugin_parser):
plugins = plugin_parser.parse_plugins(["my_plugin_test.TestClass"])
assert len(plugins) == 1
assert isinstance(plugins[0], my_plugin_test.TestClass)
plugins = plugin_parser.parse_plugins(
["my_plugin_test.TestClass", "my_plugin_test.TestClassWithBase"]
)
assert len(plugins) == 2
assert isinstance(plugins[0], my_plugin_test.TestClass)
assert isinstance(plugins[1], my_plugin_test.TestClassWithBase)


def test_parse_plugins_with_base():
parser = PluginParser(my_plugin_test.LibraryBase)
plugins = parser.parse_plugins("my_plugin_test.TestClassWithBase")
Expand Down