Odds and ends today...
PBP & SF hackage
SourceForge announce lists full of spam? Try this PBP script, with the rematch.py extension:
pyload rematch.py'twil flush out all messages in your queue...go http://lists.sourceforge.net/lists/admindb/listname fv 1 adminpw pass submit 1
do set_match --form 1 "\\\\d+$" 3 submit 1
Decorators in Quixote
Kevin Dangoor queried about decorators in Quixote, and here are implementations of his two suggested decorators. They seem to make sense syntactically.
First, one to restrict access to the decorated function to logged-in users:
from quixote.errors import AccessErrordef require_login(func): """ decorator: require login to run decorated function. """ def wrapper(request): if not request.session.user: raise AccessError("you must be logged in!") return func(request)
return wrapper
Use like so:
@require_login def func(request): ...
A slightly more complex case follows: here are two functions to export names for publication by Quixote.
def export(func):
"""
decorator; export decorated function under its __name__.
"""
_q_exports = func.func_globals['_q_exports']
_q_exports.append(func.__name__)
return func
def export_names(*names):
"""
decorator; export decorated function under all given names.
"""
# build a new function to return; this is what will be called on
# the following function.
def export_func(func, names=names):
_q_exports = func.func_globals['_q_exports']
for name in names:
_q_exports.append((name, func.__name__,))
return func
return export_func
Use these like so:
@export def func(request): ...@export_names("name1", "name2") def func2(request): ...
It's a little bit irritating that you have to grab _q_exports from func_globals but *shrug* that's scoping for ya! (If you don't do this, then you can't import the decorators from another module.)
--titus
