コード例 #1
0
ファイル: contentnode.py プロジェクト: pcenov/studio
    def delete_from_changes(self, changes):
        errors = []
        changes_to_return = []
        queryset = self.get_edit_queryset().order_by()
        for change in changes:
            try:
                instance = queryset.get(
                    **dict(self.values_from_key(change["key"])))

                task_args = {
                    "user_id": self.request.user.id,
                    "channel_id": instance.channel_id,
                    "node_id": instance.id,
                }

                task, task_info = create_async_task("delete-node",
                                                    self.request.user,
                                                    **task_args)
            except ContentNode.DoesNotExist:
                # If the object already doesn't exist, as far as the user is concerned
                # job done!
                pass
            except Exception as e:
                log_sync_exception(e)
                change["errors"] = [str(e)]
                errors.append(change)
        return errors, changes_to_return
コード例 #2
0
def handle_changes(request, viewset_class, change_type, changes):
    try:
        change_type = int(change_type)
        viewset = viewset_class(request=request)
        viewset.initial(request)
        if change_type in event_handlers:
            start = time.time()
            event_handler = getattr(viewset, event_handlers[change_type], None)
            if event_handler is None:
                raise ChangeNotAllowed(change_type, viewset_class)
            result = event_handler(changes)
            elapsed = time.time() - start

            if elapsed > SLOW_UPDATE_THRESHOLD:
                # This is really a warning rather than an actual error,
                # but using exceptions simplifies reporting it to Sentry,
                # so create and pass along the error but do not raise it.
                try:
                    # we need to raise it to get Python to fill out the stack trace.
                    raise SlowSyncError(change_type, elapsed, changes)
                except SlowSyncError as e:
                    report_exception(e)
            return result
    except Exception as e:
        log_sync_exception(e)
        for change in changes:
            change["errors"] = [str(e)]
        return changes, None
コード例 #3
0
ファイル: base.py プロジェクト: socketbox/studio
 def update_from_changes(self, changes):
     errors = []
     changes_to_return = []
     queryset = self.get_edit_queryset().order_by()
     for change in changes:
         try:
             instance = queryset.get(**dict(self.values_from_key(change["key"])))
             serializer = self.get_serializer(
                 instance, data=self._map_update_change(change), partial=True
             )
             if serializer.is_valid():
                 self.perform_update(serializer)
                 if serializer.changes:
                     changes_to_return.extend(serializer.changes)
             else:
                 change.update({"errors": serializer.errors})
                 errors.append(change)
         except ObjectDoesNotExist:
             # Should we also check object permissions here and return a different
             # error if the user can view the object but not edit it?
             change.update({"errors": ValidationError("Not found").detail})
             errors.append(change)
         except Exception as e:
             log_sync_exception(e)
             change["errors"] = [str(e)]
             errors.append(change)
     return errors, changes_to_return
コード例 #4
0
ファイル: base.py プロジェクト: socketbox/studio
    def delete_from_changes(self, changes):
        errors = []
        changes_to_return = []
        queryset = self.get_edit_queryset().order_by()
        for change in changes:
            try:
                instance = queryset.get(**dict(self.values_from_key(change["key"])))

                self.perform_destroy(instance)
            except ObjectDoesNotExist:
                # If the object already doesn't exist, as far as the user is concerned
                # job done!
                pass
            except Exception as e:
                log_sync_exception(e)
                change["errors"] = [str(e)]
                errors.append(change)
        return errors, changes_to_return
コード例 #5
0
ファイル: base.py プロジェクト: socketbox/studio
    def create_from_changes(self, changes):
        errors = []
        changes_to_return = []

        for change in changes:
            try:
                serializer = self.get_serializer(data=self._map_create_change(change))
                if serializer.is_valid():
                    self.perform_create(serializer)
                    if serializer.changes:
                        changes_to_return.extend(serializer.changes)
                else:
                    change.update({"errors": serializer.errors})
                    errors.append(change)
            except Exception as e:
                log_sync_exception(e)
                change["errors"] = [str(e)]
                errors.append(change)

        return errors, changes_to_return