And... pyblosxom code removed again :)
We agreed on a new direction on IRC last night...
This commit is contained in:
parent
0ea7b48055
commit
dd7eac8223
@ -13,33 +13,6 @@
|
|||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Affero General Public License
|
# 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/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#
|
|
||||||
#
|
|
||||||
# This file incorporates work covered by the following copyright and
|
|
||||||
# permission notice:
|
|
||||||
#
|
|
||||||
# The MIT License (http://www.opensource.org/licenses/mit-license.php)
|
|
||||||
#
|
|
||||||
# Copyright (c) 2003-2011 by the Pyblosxom team (see AUTHORS file).
|
|
||||||
#
|
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
|
||||||
# a copy of this software and associated documentation files (the
|
|
||||||
# "Software"), to deal in the Software without restriction, including
|
|
||||||
# without limitation the rights to use, copy, modify, merge, publish,
|
|
||||||
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
||||||
# permit persons to whom the Software is furnished to do so, subject to
|
|
||||||
# the following conditions:
|
|
||||||
#
|
|
||||||
# The above copyright notice and this permission notice shall be
|
|
||||||
# included in all copies or substantial portions of the Software.
|
|
||||||
#
|
|
||||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
||||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
||||||
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
||||||
# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
||||||
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
||||||
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
This module implements the plugin api bits.
|
This module implements the plugin api bits.
|
||||||
@ -174,93 +147,6 @@ class PluginManager(object):
|
|||||||
return self.template_hooks.get(hook_name, [])
|
return self.template_hooks.get(hook_name, [])
|
||||||
|
|
||||||
|
|
||||||
###########################
|
|
||||||
## Borrowed from pyblosxom!
|
|
||||||
###########################
|
|
||||||
|
|
||||||
def run_callback(chain, input,
|
|
||||||
mappingfunc=lambda x, y: x,
|
|
||||||
donefunc=lambda x: 0,
|
|
||||||
defaultfunc=None):
|
|
||||||
"""
|
|
||||||
Executes a callback chain on a given piece of data. passed in is
|
|
||||||
a dict of name/value pairs. Consult the documentation for the
|
|
||||||
specific callback chain you're executing.
|
|
||||||
|
|
||||||
Callback chains should conform to their documented behavior. This
|
|
||||||
function allows us to do transforms on data, handling data, and
|
|
||||||
also callbacks.
|
|
||||||
|
|
||||||
The difference in behavior is affected by the mappingfunc passed
|
|
||||||
in which converts the output of a given function in the chain to
|
|
||||||
the input for the next function.
|
|
||||||
|
|
||||||
If this is confusing, read through the code for this function.
|
|
||||||
|
|
||||||
Returns the transformed input dict.
|
|
||||||
|
|
||||||
:param chain: the name of the callback chain to run
|
|
||||||
|
|
||||||
:param input: dict with name/value pairs that gets passed as the
|
|
||||||
args dict to all callback functions
|
|
||||||
|
|
||||||
:param mappingfunc: the function that maps output arguments to
|
|
||||||
input arguments for the next iteration. It
|
|
||||||
must take two arguments: the original dict and
|
|
||||||
the return from the previous function. It
|
|
||||||
defaults to returning the original dict.
|
|
||||||
|
|
||||||
:param donefunc: this function tests whether we're done doing what
|
|
||||||
we're doing. This function takes as input the
|
|
||||||
output of the most recent iteration. If this
|
|
||||||
function returns True then we'll drop out of the
|
|
||||||
loop. For example, if you wanted a callback to
|
|
||||||
stop running when one of the registered functions
|
|
||||||
returned a 1, then you would pass in:
|
|
||||||
``donefunc=lambda x: x`` .
|
|
||||||
|
|
||||||
:param defaultfunc: if this is set and we finish going through all
|
|
||||||
the functions in the chain and none of them
|
|
||||||
have returned something that satisfies the
|
|
||||||
donefunc, then we'll execute the defaultfunc
|
|
||||||
with the latest version of the input dict.
|
|
||||||
|
|
||||||
:returns: varies
|
|
||||||
"""
|
|
||||||
chain = PluginManager.get_hook_callables(chain)
|
|
||||||
|
|
||||||
output = None
|
|
||||||
|
|
||||||
for func in chain:
|
|
||||||
# we call the function with the input dict it returns an
|
|
||||||
# output.
|
|
||||||
output = func(input)
|
|
||||||
|
|
||||||
# we fun the output through our donefunc to see if we should
|
|
||||||
# stop iterating through the loop. if the donefunc returns
|
|
||||||
# something true, then we're all done; otherwise we continue.
|
|
||||||
if donefunc(output):
|
|
||||||
break
|
|
||||||
|
|
||||||
# we pass the input we just used and the output we just got
|
|
||||||
# into the mappingfunc which will give us the input for the
|
|
||||||
# next iteration. in most cases, this consists of either
|
|
||||||
# returning the old input or the old output--depending on
|
|
||||||
# whether we're transforming the data through the chain or
|
|
||||||
# not.
|
|
||||||
input = mappingfunc(input, output)
|
|
||||||
|
|
||||||
# if we have a defaultfunc and we haven't satisfied the donefunc
|
|
||||||
# conditions, then we return whatever the defaultfunc returns when
|
|
||||||
# given the current version of the input.
|
|
||||||
if callable(defaultfunc) and not donefunc(output):
|
|
||||||
return defaultfunc(input)
|
|
||||||
|
|
||||||
# we didn't call the defaultfunc--so we return the most recent
|
|
||||||
# output.
|
|
||||||
return output
|
|
||||||
|
|
||||||
|
|
||||||
def register_routes(routes):
|
def register_routes(routes):
|
||||||
"""Registers one or more routes
|
"""Registers one or more routes
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user