Makes the discounts section from _handle_products evaluate lazily, just in case it’s never displayed in a template (those are some very very expensive queries there).
This commit is contained in:
parent
76e6206d09
commit
3b5b958b78
2 changed files with 35 additions and 1 deletions
|
@ -25,3 +25,33 @@ def all_arguments_optional(ntcls):
|
||||||
)
|
)
|
||||||
|
|
||||||
return ntcls
|
return ntcls
|
||||||
|
|
||||||
|
|
||||||
|
def lazy(function, *args, **kwargs):
|
||||||
|
''' Produces a callable so that functions can be lazily evaluated in
|
||||||
|
templates.
|
||||||
|
|
||||||
|
Arguments:
|
||||||
|
|
||||||
|
function (callable): The function to call at evaluation time.
|
||||||
|
|
||||||
|
args: Positional arguments, passed directly to ``function``.
|
||||||
|
|
||||||
|
kwargs: Keyword arguments, passed directly to ``function``.
|
||||||
|
|
||||||
|
Return:
|
||||||
|
|
||||||
|
callable: A callable that will evaluate a call to ``function`` with
|
||||||
|
the specified arguments.
|
||||||
|
|
||||||
|
'''
|
||||||
|
|
||||||
|
NOT_EVALUATED = object()
|
||||||
|
retval = [NOT_EVALUATED]
|
||||||
|
|
||||||
|
def evaluate():
|
||||||
|
if retval[0] is NOT_EVALUATED:
|
||||||
|
retval[0] = function(*args, **kwargs)
|
||||||
|
return retval[0]
|
||||||
|
|
||||||
|
return evaluate
|
||||||
|
|
|
@ -429,7 +429,11 @@ def _handle_products(request, category, products, prefix):
|
||||||
)
|
)
|
||||||
handled = False if products_form.errors else True
|
handled = False if products_form.errors else True
|
||||||
|
|
||||||
discounts = DiscountController.available_discounts(
|
# Making this a function to lazily evaluate when it's displayed
|
||||||
|
# in templates.
|
||||||
|
|
||||||
|
discounts = util.lazy(
|
||||||
|
DiscountController.available_discounts,
|
||||||
request.user,
|
request.user,
|
||||||
[],
|
[],
|
||||||
products,
|
products,
|
||||||
|
|
Loading…
Reference in a new issue