callable hook convenience functions.. now work, and with tests!
authorChristopher Allan Webber <cwebber@dustycloud.org>
Wed, 10 Apr 2013 22:36:21 +0000 (17:36 -0500)
committerChristopher Allan Webber <cwebber@dustycloud.org>
Wed, 10 Apr 2013 22:36:21 +0000 (17:36 -0500)
 - Added three "callables" test plugins.
 - updated callable_runone to check for unhandled_okay in the kwargs
   dict.

All passing!

mediagoblin/tests/test_pluginapi.py
mediagoblin/tests/testplugins/__init__.py [new file with mode: 0644]
mediagoblin/tests/testplugins/callables1/__init__.py [new file with mode: 0644]
mediagoblin/tests/testplugins/callables2/__init__.py [new file with mode: 0644]
mediagoblin/tests/testplugins/callables3/__init__.py [new file with mode: 0644]
mediagoblin/tools/pluginapi.py

index 4381859d7f73946453a19f8debd701e4175e87da..d40a5081729c3231e50c586f46b40dfe23864669 100644 (file)
@@ -218,14 +218,14 @@ def test_callable_runone():
     # Multiple provided, go with the first!
     call_log = []
     assert pluginapi.callable_runone(
-        "multi_handle", call_log) is "the first returns"
+        "multi_handle", call_log) == "the first returns"
     assert call_log == ["Hi, I'm the first"]
 
     # Multiple provided, one has CantHandleIt
     call_log = []
     assert pluginapi.callable_runone(
         "multi_handle_with_canthandle",
-        call_log) is "the second returns"
+        call_log) == "the second returns"
     assert call_log == ["Hi, I'm the second"]
 
 
@@ -251,7 +251,7 @@ def test_callable_runall():
     # Just one hook, check results
     call_log = []
     assert pluginapi.callable_runall(
-        "just_one", call_log) == ["Called just once"]
+        "just_one", call_log) == ["Called just once", None, None]
     assert call_log == ["expect this one call"]
 
     # None provided, check results
diff --git a/mediagoblin/tests/testplugins/__init__.py b/mediagoblin/tests/testplugins/__init__.py
new file mode 100644 (file)
index 0000000..621845b
--- /dev/null
@@ -0,0 +1,15 @@
+# GNU MediaGoblin -- federated, autonomous media hosting
+# Copyright (C) 2011, 2012 MediaGoblin contributors.  See AUTHORS.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/mediagoblin/tests/testplugins/callables1/__init__.py b/mediagoblin/tests/testplugins/callables1/__init__.py
new file mode 100644 (file)
index 0000000..9c278b4
--- /dev/null
@@ -0,0 +1,41 @@
+# GNU MediaGoblin -- federated, autonomous media hosting
+# Copyright (C) 2011, 2012 MediaGoblin contributors.  See AUTHORS.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+from mediagoblin.tools.pluginapi import CantHandleIt
+
+def setup_plugin():
+    pass
+
+
+def just_one(call_log):
+    call_log.append("expect this one call")
+    return "Called just once"
+
+
+def multi_handle(call_log):
+    call_log.append("Hi, I'm the first")
+    return "the first returns"
+
+def multi_handle_with_canthandle(call_log):
+    raise CantHandleIt("I just can't accept this stupid method")
+
+
+hooks = {
+    'setup': setup_plugin,
+    'just_one': just_one,
+    'multi_handle': multi_handle,
+    'multi_handle_with_canthandle': multi_handle_with_canthandle,
+    }
diff --git a/mediagoblin/tests/testplugins/callables2/__init__.py b/mediagoblin/tests/testplugins/callables2/__init__.py
new file mode 100644 (file)
index 0000000..aaab5b2
--- /dev/null
@@ -0,0 +1,38 @@
+# GNU MediaGoblin -- federated, autonomous media hosting
+# Copyright (C) 2011, 2012 MediaGoblin contributors.  See AUTHORS.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+def setup_plugin():
+    pass
+
+
+def just_one(call_log):
+    assert "SHOULD NOT HAPPEN"
+
+def multi_handle(call_log):
+    call_log.append("Hi, I'm the second")
+    return "the second returns"
+
+def multi_handle_with_canthandle(call_log):
+    call_log.append("Hi, I'm the second")
+    return "the second returns"
+
+
+hooks = {
+    'setup': setup_plugin,
+    'just_one': just_one,
+    'multi_handle': multi_handle,
+    'multi_handle_with_canthandle': multi_handle_with_canthandle,
+    }
diff --git a/mediagoblin/tests/testplugins/callables3/__init__.py b/mediagoblin/tests/testplugins/callables3/__init__.py
new file mode 100644 (file)
index 0000000..8d0c9c2
--- /dev/null
@@ -0,0 +1,38 @@
+# GNU MediaGoblin -- federated, autonomous media hosting
+# Copyright (C) 2011, 2012 MediaGoblin contributors.  See AUTHORS.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+def setup_plugin():
+    pass
+
+
+def just_one(call_log):
+    assert "SHOULD NOT HAPPEN"
+
+def multi_handle(call_log):
+    call_log.append("Hi, I'm the third")
+    return "the third returns"
+
+def multi_handle_with_canthandle(call_log):
+    call_log.append("Hi, I'm the third")
+    return "the third returns"
+
+
+hooks = {
+    'setup': setup_plugin,
+    'just_one': just_one,
+    'multi_handle': multi_handle,
+    'multi_handle_with_canthandle': multi_handle_with_canthandle,
+    }
index f233fe51f860399b1bbecd90dafb0c6a1c1469e7..2c0394aaa6ecaa68e4c9c2357740cfa855e8ea51 100644 (file)
@@ -294,7 +294,7 @@ class UnhandledCallable(Exception):
     pass
 
 
-def callable_runone(hookname, unhandled_okay=False, *args, **kwargs):
+def callable_runone(hookname, *args, **kwargs):
     """
     Run the callable hook HOOKNAME... run until the first response,
     then return.
@@ -313,7 +313,7 @@ def callable_runone(hookname, unhandled_okay=False, *args, **kwargs):
         except CantHandleIt:
             continue
 
-    if unhandled_okay is False:
+    if kwargs.get("unhandled_okay", False) is False:
         raise UnhandledCallable(
             "No hooks registered capable of handling '%s'" % hookname)