Merge pull request #1384 from TehomCD/deleted_subscriber_fix

Add check to subscription handler for deleted objects. Fixes #1378
This commit is contained in:
Griatch 2017-08-08 20:40:35 +02:00 committed by GitHub
commit 6e6c54bcd4

View file

@ -453,8 +453,10 @@ class SubscriptionHandler(object):
self._cache = None self._cache = None
def _recache(self): def _recache(self):
self._cache = {player : True for player in self.obj.db_subscriptions.all()} self._cache = {player: True for player in self.obj.db_subscriptions.all()
self._cache.update({obj : True for obj in self.obj.db_object_subscriptions.all()}) if hasattr(player, 'pk') and player.pk}
self._cache.update({obj: True for obj in self.obj.db_object_subscriptions.all()
if hasattr(obj, 'pk') and obj.pk})
def has(self, entity): def has(self, entity):
""" """
@ -546,14 +548,23 @@ class SubscriptionHandler(object):
are puppeted by an online player. are puppeted by an online player.
""" """
subs = [] subs = []
recache_needed = False
for obj in self.all(): for obj in self.all():
from django.core.exceptions import ObjectDoesNotExist
try:
if hasattr(obj, 'player'): if hasattr(obj, 'player'):
if not obj.player: if not obj.player:
continue continue
obj = obj.player obj = obj.player
if not obj.is_connected: if not obj.is_connected:
continue continue
except ObjectDoesNotExist:
# a subscribed object has already been deleted. Mark that we need a recache and ignore it
recache_needed = True
continue
subs.append(obj) subs.append(obj)
if recache_needed:
self._recache()
return subs return subs
def clear(self): def clear(self):