Makes sure that the cache is not disturbed by calling end_batch

This commit is contained in:
Christopher Neugebauer 2016-05-01 13:15:19 +10:00
parent 3ab5ac32ca
commit 9ca25e5986

View file

@ -49,13 +49,23 @@ class BatchController(object):
cache[cls._NESTING_KEY] -= 1 cache[cls._NESTING_KEY] -= 1
if cache[cls._NESTING_KEY] == 0: if cache[cls._NESTING_KEY] == 0:
cls._call_end_batch_methods(user)
del cls._user_caches[user]
for key in cache: @classmethod
def _call_end_batch_methods(cls, user):
cache = cls._user_caches[user]
ended = set()
while True:
keys = set(cache.keys())
if ended == keys:
break
keys_to_end = keys - ended
for key in keys_to_end:
item = cache[key] item = cache[key]
if hasattr(item, 'end_batch') and callable(item.end_batch): if hasattr(item, 'end_batch') and callable(item.end_batch):
item.end_batch() item.end_batch()
ended = ended | keys_to_end
del cls._user_caches[user]
@classmethod @classmethod
def memoise(cls, func): def memoise(cls, func):