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 |     # Marks the carts that are currently in batches | ||||||
|  |     _FOR_USER = {} | ||||||
|     _BATCH_COUNT = collections.defaultdict(int) |     _BATCH_COUNT = collections.defaultdict(int) | ||||||
|     _MODIFIED_CARTS = set() |     _MODIFIED_CARTS = set() | ||||||
| 
 | 
 | ||||||
|  | @ -85,10 +86,11 @@ class CartController(object): | ||||||
|         revision is increased. |         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) |         ctrl, _id = cls._FOR_USER[user] | ||||||
|         _id = ctrl.cart.id |  | ||||||
| 
 | 
 | ||||||
|         cls._BATCH_COUNT[_id] += 1 |         cls._BATCH_COUNT[_id] += 1 | ||||||
|         try: |         try: | ||||||
|  | @ -108,10 +110,15 @@ class CartController(object): | ||||||
|             # Only end on the outermost batch marker, and only if |             # Only end on the outermost batch marker, and only if | ||||||
|             # it excited cleanly, and a modification occurred |             # it excited cleanly, and a modification occurred | ||||||
|             modified = _id in cls._MODIFIED_CARTS |             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() |                 ctrl._end_batch() | ||||||
|                 cls._MODIFIED_CARTS.remove(_id) |                 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): |     def _fail_if_cart_is_not_active(self): | ||||||
|         self.cart.refresh_from_db() |         self.cart.refresh_from_db() | ||||||
|         if self.cart.status != commerce.Cart.STATUS_ACTIVE: |         if self.cart.status != commerce.Cart.STATUS_ACTIVE: | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Christopher Neugebauer
						Christopher Neugebauer