callable hook convenience functions.. now work, and with tests!

- Added three "callables" test plugins.
 - updated callable_runone to check for unhandled_okay in the kwargs
   dict.

All passing!
This commit is contained in:
Christopher Allan Webber 2013-04-10 17:36:21 -05:00
parent 70c061955c
commit cdc821eb74
6 changed files with 137 additions and 5 deletions

View File

@ -218,14 +218,14 @@ def test_callable_runone():
# Multiple provided, go with the first! # Multiple provided, go with the first!
call_log = [] call_log = []
assert pluginapi.callable_runone( 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"] assert call_log == ["Hi, I'm the first"]
# Multiple provided, one has CantHandleIt # Multiple provided, one has CantHandleIt
call_log = [] call_log = []
assert pluginapi.callable_runone( assert pluginapi.callable_runone(
"multi_handle_with_canthandle", "multi_handle_with_canthandle",
call_log) is "the second returns" call_log) == "the second returns"
assert call_log == ["Hi, I'm the second"] assert call_log == ["Hi, I'm the second"]
@ -251,7 +251,7 @@ def test_callable_runall():
# Just one hook, check results # Just one hook, check results
call_log = [] call_log = []
assert pluginapi.callable_runall( 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"] assert call_log == ["expect this one call"]
# None provided, check results # None provided, check results

View File

@ -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/>.

View File

@ -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,
}

View File

@ -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,
}

View File

@ -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,
}

View File

@ -294,7 +294,7 @@ class UnhandledCallable(Exception):
pass 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, Run the callable hook HOOKNAME... run until the first response,
then return. then return.
@ -313,7 +313,7 @@ def callable_runone(hookname, unhandled_okay=False, *args, **kwargs):
except CantHandleIt: except CantHandleIt:
continue continue
if unhandled_okay is False: if kwargs.get("unhandled_okay", False) is False:
raise UnhandledCallable( raise UnhandledCallable(
"No hooks registered capable of handling '%s'" % hookname) "No hooks registered capable of handling '%s'" % hookname)