diff --git a/emmental.py b/emmental.py index 7374798..2714f57 100755 --- a/emmental.py +++ b/emmental.py @@ -1,5 +1,6 @@ #!/usr/bin/python # Copyright 2019 (c) Anna Schumaker. +import lib import curds import rind import sys diff --git a/lib/__init__.py b/lib/__init__.py new file mode 100644 index 0000000..205e226 --- /dev/null +++ b/lib/__init__.py @@ -0,0 +1,2 @@ +# Copyright 2020 (c) Anna Schumaker. +from . import publisher diff --git a/lib/publisher.py b/lib/publisher.py new file mode 100644 index 0000000..6f425e7 --- /dev/null +++ b/lib/publisher.py @@ -0,0 +1,18 @@ +# Copyright 2020 (c) Anna Schumaker. + +class Publisher: + def __init__(self): + self.subscribers = set() + + def publish(self, *args): + for func in self.subscribers: + func(*args) + + def register(self, func): + self.subscribers.add(func) + + def reset(self): + self.subscribers.clear() + + def unregister(self, func): + self.subscribers.discard(func) diff --git a/lib/test_publisher.py b/lib/test_publisher.py new file mode 100644 index 0000000..9b14983 --- /dev/null +++ b/lib/test_publisher.py @@ -0,0 +1,30 @@ +# Copyright 2020 (c) Anna Schumaker. +from . import publisher +import unittest + +class TestPublisher(unittest.TestCase): + def on_test(self, text): + self.test_arg = text + + def test_publisher_init(self): + pub = publisher.Publisher() + self.assertIsInstance(pub.subscribers, set) + self.assertEqual(pub.subscribers, set()) + + def test_publisher_register(self): + pub = publisher.Publisher() + pub.register(self.on_test) + self.assertEqual(pub.subscribers, { self.on_test }) + + pub.unregister(self.on_test) + self.assertEqual(pub.subscribers, set()) + + pub.subscribers = set([ 1, 2, 3 ]) + pub.reset() + self.assertEqual(pub.subscribers, set()) + + def test_publisher_publish(self): + pub = publisher.Publisher() + pub.register(self.on_test) + pub.publish("Test Arg") + self.assertEqual(self.test_arg, "Test Arg")