Don't try to preserve an instance between pre- and post- middleware processing and fail sanely if we lose the activity stream instance

This commit is contained in:
Matthew Jones
2013-11-20 14:01:36 -05:00
parent 39ad6b0ad1
commit 83950be7ea

View File

@@ -1,12 +1,16 @@
from django.conf import settings from django.conf import settings
from django.contrib.auth.models import User, AnonymousUser from django.contrib.auth.models import User, AnonymousUser
from django.db.models.signals import pre_save, post_save from django.db.models.signals import pre_save, post_save
from django.db import IntegrityError
from django.utils.functional import curry from django.utils.functional import curry
from awx.main.models import ActivityStream, AuthToken from awx.main.models import ActivityStream, AuthToken
import json import json
import uuid import uuid
import urllib2 import urllib2
import logging
logger = logging.getLogger('awx.main.middleware')
class ActivityStreamMiddleware(object): class ActivityStreamMiddleware(object):
def process_request(self, request): def process_request(self, request):
@@ -28,10 +32,20 @@ class ActivityStreamMiddleware(object):
post_save.disconnect(dispatch_uid=self.disp_uid) post_save.disconnect(dispatch_uid=self.disp_uid)
self.finished = True self.finished = True
if self.isActivityStreamEvent: if self.isActivityStreamEvent:
for instance in self.instances: for instance_id in self.instances:
instance = ActivityStream.objects.filter(id=instance_id)
if instance.exists():
instance = instance[0]
else:
logger.debug("Failed to look up Activity Stream instance for id : " + str(instance_id))
continue
if drf_user is not None and drf_user.__class__ != AnonymousUser: if drf_user is not None and drf_user.__class__ != AnonymousUser:
instance.user = drf_user instance.user = drf_user
instance.save() try:
instance.save()
except IntegrityError, e:
logger.debug("Integrity Error saving Activity Stream instance for id : " + str(instance_id))
else: else:
obj1_type_actual = instance.object1_type.split(".")[-1] obj1_type_actual = instance.object1_type.split(".")[-1]
if obj1_type_actual in ("InventoryUpdate", "ProjectUpdate", "JobEvent", "Job") and instance.id is not None: if obj1_type_actual in ("InventoryUpdate", "ProjectUpdate", "JobEvent", "Job") and instance.id is not None:
@@ -44,8 +58,8 @@ class ActivityStreamMiddleware(object):
if isinstance(user, User) and instance.user is None: if isinstance(user, User) and instance.user is None:
instance.user = user instance.user = user
else: else:
if instance not in self.instances: if instance.id not in self.instances:
self.isActivityStreamEvent = True self.isActivityStreamEvent = True
self.instances.append(instance) self.instances.append(instance.id)
else: else:
self.isActivityStreamEvent = False self.isActivityStreamEvent = False