def sigtransform(*Models):
import django
from django.shortcuts import get_object_or_404
def _decorator(func):
def _closure(request, *args, **kwargs):
args = list(args)
for ii, Model_and_cleaner in enumerate(Models):
# None is passed to @sigtransform to indicate "leave
# this argument alone"
if Model_and_cleaner is None:
pass
else:
Model, cleaner = Model_and_cleaner
# pk arg needs correct datatype, hence cleaner func.
args[ii] = get_object_or_404(Model, pk=cleaner(args[ii]))
return func(request, *args, **kwargs)
_closure.__name__ = func.__name__
_closure.__doc___ = func.__doc__
_closure.__module___ = func.__module__
return _closure
return _decorator
Comments