From 83950be7eaa7de9543ad0940274cc942d5f2c13f Mon Sep 17 00:00:00 2001 From: Matthew Jones Date: Wed, 20 Nov 2013 14:01:36 -0500 Subject: [PATCH] Don't try to preserve an instance between pre- and post- middleware processing and fail sanely if we lose the activity stream instance --- awx/main/middleware.py | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/awx/main/middleware.py b/awx/main/middleware.py index fd61123a99..fc7d93877a 100644 --- a/awx/main/middleware.py +++ b/awx/main/middleware.py @@ -1,12 +1,16 @@ from django.conf import settings from django.contrib.auth.models import User, AnonymousUser from django.db.models.signals import pre_save, post_save +from django.db import IntegrityError from django.utils.functional import curry from awx.main.models import ActivityStream, AuthToken import json import uuid import urllib2 +import logging +logger = logging.getLogger('awx.main.middleware') + class ActivityStreamMiddleware(object): def process_request(self, request): @@ -28,10 +32,20 @@ class ActivityStreamMiddleware(object): post_save.disconnect(dispatch_uid=self.disp_uid) self.finished = True 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: 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: obj1_type_actual = instance.object1_type.split(".")[-1] 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: instance.user = user else: - if instance not in self.instances: + if instance.id not in self.instances: self.isActivityStreamEvent = True - self.instances.append(instance) + self.instances.append(instance.id) else: self.isActivityStreamEvent = False