This is an automated email from the ASF dual-hosted git repository. bertty pushed a commit to branch python-platform in repository https://gitbox.apache.org/repos/asf/incubator-wayang.git
commit d3147607df2bf8f6efcdc2c918bbdaae4e9303fb Author: Bertty Contreras-Rojas <[email protected]> AuthorDate: Thu Apr 7 17:54:37 2022 +0200 [WAYANG-#8] add context and platfom Test Signed-off-by: bertty <[email protected]> --- python/src/pywy/dataquanta.py | 62 ++++++++-------- python/src/pywy/tests/unit/core/platform_test.py | 16 ++-- .../src/pywy/tests/unit/dataquanta/context_test.py | 86 ++++++++++++++++++++++ 3 files changed, 125 insertions(+), 39 deletions(-) diff --git a/python/src/pywy/dataquanta.py b/python/src/pywy/dataquanta.py index 3d465c29..9f10eba2 100644 --- a/python/src/pywy/dataquanta.py +++ b/python/src/pywy/dataquanta.py @@ -7,36 +7,38 @@ from pywy.core import PywyPlan from pywy.core import Plugin class WayangContext: - """ - This is the entry point for users to work with Wayang. - """ - plugins: Set[Plugin] - - def __init__(self): - self.plugins = set() - - """ - add a :class:`Plugin` to the :class:`Context` - """ - def register(self, p: Plugin): - self.plugins.add(p) - return self - - """ - remove a :class:`Plugin` from the :class:`Context` - """ - def unregister(self, p: Plugin): - self.plugins.remove(p) - return self - - def textFile(self, file_path: str) -> 'DataQuanta[str]': - return DataQuanta(self, TextFileSource(file_path)) - - def __str__(self): - return "Plugins: {}".format(str(self.plugins)) - - def __repr__(self): - return self.__str__() + """ + This is the entry point for users to work with Wayang. + """ + plugins: Set[Plugin] + + def __init__(self): + self.plugins = set() + + """ + add a :class:`Plugin` to the :class:`Context` + """ + def register(self, *plugins: Plugin): + for p in plugins: + self.plugins.add(p) + return self + + """ + remove a :class:`Plugin` from the :class:`Context` + """ + def unregister(self, *plugins: Plugin): + for p in plugins: + self.plugins.remove(p) + return self + + def textFile(self, file_path: str) -> 'DataQuanta[str]': + return DataQuanta(self, TextFileSource(file_path)) + + def __str__(self): + return "Plugins: {}".format(str(self.plugins)) + + def __repr__(self): + return self.__str__() class DataQuanta(GenericTco): """ diff --git a/python/src/pywy/tests/unit/core/platform_test.py b/python/src/pywy/tests/unit/core/platform_test.py index aff1030b..e9345a0c 100644 --- a/python/src/pywy/tests/unit/core/platform_test.py +++ b/python/src/pywy/tests/unit/core/platform_test.py @@ -1,16 +1,14 @@ import unittest +from pywy.core.platform import Platform + class TestUnitCorePlatform(unittest.TestCase): def setUp(self): pass - def test_TO_REMOVE(self): - """ - TODO REMOVE THIS TEST, IT JUST TO VALIDATE THAT EVERYTHING IS CORRECT IN TERMS OF ENVIRONMENT - Returns - ------- - - """ - self.assertEqual("a", "a") - + def test_create(self): + name = "platform" + p = Platform(name) + self.assertEqual(type(p), Platform) + self.assertEqual(p.name, name) diff --git a/python/src/pywy/tests/unit/dataquanta/context_test.py b/python/src/pywy/tests/unit/dataquanta/context_test.py new file mode 100644 index 00000000..a74c28ba --- /dev/null +++ b/python/src/pywy/tests/unit/dataquanta/context_test.py @@ -0,0 +1,86 @@ +import unittest +from unittest.mock import Mock + +from pywy.dataquanta import WayangContext +from pywy.dataquanta import DataQuanta +from pywy.operators.source import TextFileSource + + +class TestUnitDataquantaContext(unittest.TestCase): + + def test_create(self): + context = WayangContext() + self.assertIsInstance(context, WayangContext) + self.assertIsInstance(context.plugins, set) + self.assertEqual(len(context.plugins), 0) + + def test_set_pluggin(self): + pluggin = Mock() + context = WayangContext().register(pluggin) + self.assertIsInstance(context, WayangContext) + self.assertIsInstance(context.plugins, set) + self.assertEqual(len(context.plugins), 1) + + def test_register_bulk_pluggins(self): + pluggin = Mock() + pluggin2 = Mock() + context = WayangContext().register(pluggin, pluggin2) + self.assertIsInstance(context, WayangContext) + self.assertIsInstance(context.plugins, set) + self.assertEqual(len(context.plugins), 2) + + def test_register_one_by_one_pluggins(self): + pluggin = Mock() + pluggin2 = Mock() + context = WayangContext().register(pluggin).register(pluggin2) + self.assertIsInstance(context, WayangContext) + self.assertIsInstance(context.plugins, set) + self.assertEqual(len(context.plugins), 2) + + def test_register_one_two_times_pluggins(self): + pluggin = Mock() + context = WayangContext().register(pluggin).register(pluggin) + self.assertIsInstance(context, WayangContext) + self.assertIsInstance(context.plugins, set) + self.assertEqual(len(context.plugins), 1) + + def test_unregister_pluggins(self): + pluggin = Mock() + context = WayangContext().register(pluggin) + self.assertIsInstance(context, WayangContext) + self.assertIsInstance(context.plugins, set) + self.assertEqual(len(context.plugins), 1) + + context = context.unregister(pluggin) + + self.assertIsInstance(context, WayangContext) + self.assertIsInstance(context.plugins, set) + self.assertEqual(len(context.plugins), 0) + + def test_unregister_in_bulk_pluggins(self): + pluggin = Mock() + pluggin2 = Mock() + pluggin3 = Mock() + context = WayangContext().register(pluggin, pluggin2, pluggin3) + self.assertIsInstance(context, WayangContext) + self.assertIsInstance(context.plugins, set) + self.assertEqual(len(context.plugins), 3) + + context = context.unregister(pluggin,pluggin3) + + self.assertIsInstance(context, WayangContext) + self.assertIsInstance(context.plugins, set) + self.assertEqual(len(context.plugins), 1) + self.assertEqual(context.plugins.pop(), pluggin2) + + def test_textfile_withoutPlugin(self): + path = Mock() + context = WayangContext() + self.assertIsInstance(context, WayangContext) + self.assertEqual(len(context.plugins), 0) + + dataQuanta = context.textFile(path) + + self.assertIsInstance(dataQuanta, DataQuanta) + self.assertIsInstance(dataQuanta.operator, TextFileSource) + self.assertEqual(context, dataQuanta.context) \ No newline at end of file
