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:
parent
70c061955c
commit
cdc821eb74
@ -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
|
||||||
|
15
mediagoblin/tests/testplugins/__init__.py
Normal file
15
mediagoblin/tests/testplugins/__init__.py
Normal 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/>.
|
41
mediagoblin/tests/testplugins/callables1/__init__.py
Normal file
41
mediagoblin/tests/testplugins/callables1/__init__.py
Normal 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,
|
||||||
|
}
|
38
mediagoblin/tests/testplugins/callables2/__init__.py
Normal file
38
mediagoblin/tests/testplugins/callables2/__init__.py
Normal 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,
|
||||||
|
}
|
38
mediagoblin/tests/testplugins/callables3/__init__.py
Normal file
38
mediagoblin/tests/testplugins/callables3/__init__.py
Normal 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,
|
||||||
|
}
|
@ -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)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user