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…
Reference in a new issue