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 | ||||
| 
 | ||||
| 
 | ||||
| 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 | ||||
| 
 | ||||
|     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, | ||||
|         [], | ||||
|         products, | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Christopher Neugebauer
						Christopher Neugebauer