Reduces CartController re-loading when batching operations
This commit is contained in:
		
							parent
							
								
									02fe88a4e4
								
							
						
					
					
						commit
						4eff8194f9
					
				
					 1 changed files with 11 additions and 4 deletions
				
			
		|  | @ -67,6 +67,7 @@ class CartController(object): | |||
| 
 | ||||
| 
 | ||||
|     # Marks the carts that are currently in batches | ||||
|     _FOR_USER = {} | ||||
|     _BATCH_COUNT = collections.defaultdict(int) | ||||
|     _MODIFIED_CARTS = set() | ||||
| 
 | ||||
|  | @ -85,10 +86,11 @@ class CartController(object): | |||
|         revision is increased. | ||||
|         ''' | ||||
| 
 | ||||
|         # TODO cache carts mid-batch? | ||||
|         if user not in cls._FOR_USER: | ||||
|             _ctrl = cls.for_user(user) | ||||
|             cls._FOR_USER[user] = (_ctrl, _ctrl.cart.id) | ||||
| 
 | ||||
|         ctrl = cls.for_user(user) | ||||
|         _id = ctrl.cart.id | ||||
|         ctrl, _id = cls._FOR_USER[user] | ||||
| 
 | ||||
|         cls._BATCH_COUNT[_id] += 1 | ||||
|         try: | ||||
|  | @ -108,10 +110,15 @@ class CartController(object): | |||
|             # Only end on the outermost batch marker, and only if | ||||
|             # it excited cleanly, and a modification occurred | ||||
|             modified = _id in cls._MODIFIED_CARTS | ||||
|             if modified and cls._BATCH_COUNT[_id] == 0 and success: | ||||
|             outermost = cls._BATCH_COUNT[_id] == 0 | ||||
|             if modified and outermost and success: | ||||
|                 ctrl._end_batch() | ||||
|                 cls._MODIFIED_CARTS.remove(_id) | ||||
| 
 | ||||
|             # Clear out the cache on the outermost operation | ||||
|             if outermost: | ||||
|                 del cls._FOR_USER[user] | ||||
| 
 | ||||
|     def _fail_if_cart_is_not_active(self): | ||||
|         self.cart.refresh_from_db() | ||||
|         if self.cart.status != commerce.Cart.STATUS_ACTIVE: | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Christopher Neugebauer
						Christopher Neugebauer