Exemplo n.º 1
0
def task_succeeded(sender=None, **kwargs):  # pylint: disable=unused-argument
    """
    Update the status record accordingly when a :py:class:`UserTaskMixin` finishes successfully.
    """
    if isinstance(sender, UserTaskMixin):
        sender.status.succeed()
        user_task_stopped.send_robust(sender=UserTaskStatus,
                                      status=sender.status)
Exemplo n.º 2
0
 def test_duplicate_stopped_signal(self):
     """The test signal receiver should be able to detect and flag duplicate signals"""
     sample_task.delay(self.user.id, 'Argument')
     status = UserTaskStatus.objects.all()[0]
     user_task_stopped.send_robust(sender=UserTaskStatus, status=status)
     status.cancel()
     user_task_stopped.send_robust(sender=UserTaskStatus, status=status)
     assert SIGNAL_DATA['received_status'].state == UserTaskStatus.CANCELED + ' again'
Exemplo n.º 3
0
 def test_duplicate_stopped_signal(self):
     """The test signal receiver should be able to detect and flag duplicate signals"""
     sample_task.delay(self.user.id, 'Argument')
     status = UserTaskStatus.objects.all()[0]
     user_task_stopped.send_robust(sender=UserTaskStatus, status=status)
     status.cancel()
     user_task_stopped.send_robust(sender=UserTaskStatus, status=status)
     assert SIGNAL_DATA['received_status'].state == UserTaskStatus.CANCELED + ' again'
Exemplo n.º 4
0
def task_succeeded(sender=None, **kwargs):  # pylint: disable=unused-argument
    """
    Update the status record accordingly when a :py:class:`UserTaskMixin` finishes successfully.
    """
    if isinstance(sender, UserTaskMixin):
        status = sender.status
        # Failed tasks with good exception handling did not succeed just because they ended cleanly
        if status.state not in (UserTaskStatus.CANCELED, UserTaskStatus.FAILED, UserTaskStatus.RETRYING):
            status.succeed()
        user_task_stopped.send_robust(sender=UserTaskStatus, status=sender.status)
Exemplo n.º 5
0
def task_failed(sender=None, **kwargs):
    """
    Update the status record accordingly when a :py:class:`UserTaskMixin` fails.
    """
    if isinstance(sender, UserTaskMixin):
        exception = kwargs['exception']
        if not isinstance(exception, TaskCanceledException):
            # Don't include traceback, since this is intended for end users
            sender.status.fail(str(exception))
        user_task_stopped.send_robust(sender=UserTaskStatus, status=sender.status)
Exemplo n.º 6
0
def task_succeeded(sender=None, **kwargs):  # pylint: disable=unused-argument
    """
    Update the status record accordingly when a :py:class:`UserTaskMixin` finishes successfully.
    """
    if isinstance(sender, UserTaskMixin):
        status = sender.status
        # Failed tasks with good exception handling did not succeed just because they ended cleanly
        if status.state not in (UserTaskStatus.CANCELED, UserTaskStatus.FAILED, UserTaskStatus.RETRYING):
            status.succeed()
        user_task_stopped.send_robust(sender=UserTaskStatus, status=sender.status)
Exemplo n.º 7
0
def task_failed(sender=None, **kwargs):
    """
    Update the status record accordingly when a :py:class:`UserTaskMixin` fails.
    """
    if isinstance(sender, UserTaskMixin):
        exception = kwargs['exception']
        if not isinstance(exception, TaskCanceledException):
            # Don't include traceback, since this is intended for end users
            sender.status.fail(str(exception))
        user_task_stopped.send_robust(sender=UserTaskStatus, status=sender.status)
Exemplo n.º 8
0
 def cancel(self):
     """
     Cancel the associated task if it hasn't already finished running.
     """
     if self.is_container:
         children = UserTaskStatus.objects.filter(parent=self)
         for child in children:
             child.cancel()
     elif self.state in (UserTaskStatus.PENDING, UserTaskStatus.RETRYING):
         current_app.control.revoke(self.task_id)
         user_task_stopped.send_robust(UserTaskStatus, status=self)
     with transaction.atomic():
         status = UserTaskStatus.objects.select_for_update().get(pk=self.id)
         if status.state in (UserTaskStatus.CANCELED, UserTaskStatus.FAILED, UserTaskStatus.SUCCEEDED):
             return
         status.state = UserTaskStatus.CANCELED
         status.save(update_fields={'state', 'modified'})
         self.state = status.state
         self.modified = status.modified
Exemplo n.º 9
0
 def cancel(self):
     """
     Cancel the associated task if it hasn't already finished running.
     """
     if self.is_container:
         children = UserTaskStatus.objects.filter(parent=self)
         for child in children:
             child.cancel()
     elif self.state in (UserTaskStatus.PENDING, UserTaskStatus.RETRYING):
         current_app.control.revoke(self.task_id)
         user_task_stopped.send_robust(UserTaskStatus, status=self)
     with transaction.atomic():
         status = UserTaskStatus.objects.select_for_update().get(pk=self.id)
         if status.state in (UserTaskStatus.CANCELED, UserTaskStatus.FAILED, UserTaskStatus.SUCCEEDED):
             return
         status.state = UserTaskStatus.CANCELED
         status.save(update_fields={'state', 'modified'})
         self.state = status.state
         self.modified = status.modified