You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wayang.apache.org by be...@apache.org on 2022/04/08 17:16:43 UTC
[incubator-wayang] 22/32: [WAYANG-#8] add context and platfom Test
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 <be...@databloom.ai>
AuthorDate: Thu Apr 7 17:54:37 2022 +0200
[WAYANG-#8] add context and platfom Test
Signed-off-by: bertty <be...@apache.org>
---
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