Exemple #1
0
    def test_create_new_order_task(self):
        order = models.Order({
            'type':
            'certificate',
            'meta': {
                'email': '*****@*****.**'
            },
            'sub_status':
            'Pending',
            'sub_status_message':
            'Waiting for instructions...'
        })
        at = datetime.datetime.utcnow()
        order_retry_task = models.OrderRetryTask(
            order_id=order.id,
            retry_task="foobar",
            retry_at=at,
            retry_args=json.dumps(["one", "two"]),
            retry_kwargs=json.dumps({"three": "four"}),
        )

        self.assertEqual(order_retry_task.order_id, order.id)
        self.assertEqual(order_retry_task.retry_task, "foobar")
        self.assertEqual(order_retry_task.retry_at, at)
        self.assertEqual(
            order_retry_task.retry_args,
            json.dumps(["one", "two"]),
        )
        self.assertEqual(
            order_retry_task.retry_kwargs,
            json.dumps({"three": "four"}),
        )
Exemple #2
0
    def test_get_retry_params(self):
        order_retry_task = models.OrderRetryTask(
            retry_args=json.dumps(["one", "two"]),
            retry_kwargs=json.dumps({"three": "four"}),
        )

        self.assertEqual(
            order_retry_task.get_retry_params(),
            (["one", "two"], {
                "three": "four"
            }),
        )
Exemple #3
0
def schedule_order_retry_tasks(invoked_task, retry_result, context, *args,
                               **kwargs):
    """Schedules an Order-related task for retry.

    :param invoked_task: The RPC method that was just invoked.
    :param retry_result: A :class:`FollowOnProcessingStatusDTO` if follow-on
                         processing (such as retrying this or another task) is
                         required, otherwise None indicates no such follow-on
                         processing is required.
    :param context: Queue context, not used.
    :param order_id: ID of the Order entity the task to retry is for.
    :param args: List of arguments passed in to the just-invoked task.
    :param kwargs: Dict of arguments passed in to the just-invoked task.
    :return: Returns the RPC task method scheduled for a retry, None if no RPC
             task was scheduled.
    """

    retry_rpc_method = None
    order_id = kwargs.get('order_id')

    if not retry_result or not order_id:
        pass

    elif common.RetryTasks.INVOKE_SAME_TASK == retry_result.retry_task:
        if invoked_task:
            retry_rpc_method = find_function_name(invoked_task)

    else:
        retry_rpc_method = MAP_RETRY_TASKS.get(retry_result.retry_task)

    if retry_rpc_method:
        LOG.debug(
            'Scheduling RPC method for retry: {0}'.format(retry_rpc_method))

        date_to_retry_at = datetime.datetime.utcnow() + datetime.timedelta(
            milliseconds=retry_result.retry_msec)

        retry_model = models.OrderRetryTask()
        retry_model.order_id = order_id
        retry_model.retry_task = retry_rpc_method
        retry_model.retry_at = date_to_retry_at
        retry_model.retry_args = args
        retry_model.retry_kwargs = kwargs
        retry_model.retry_count = 0

        retry_repo = repositories.get_order_retry_tasks_repository()
        retry_repo.create_from(retry_model)

    return retry_rpc_method
Exemple #4
0
    def _create_retry_task(self, session, retry_at=None):
        project = database_utils.create_project(session=session)
        order = database_utils.create_order(project, session=session)

        order_retry_task = models.OrderRetryTask()
        order_retry_task.order_id = order.id
        order_retry_task.retry_task = u'retry-task'
        order_retry_task.retry_at = retry_at or self.date_time_now
        order_retry_task.retry_args = self.test_args
        order_retry_task.retry_kwargs = self.test_kwargs
        self.repo.create_from(order_retry_task, session=session)

        session.commit()

        return order_retry_task
Exemple #5
0
def create_order_retry(order=None,
                       retry_task="",
                       retry_args=[],
                       retry_kwargs={},
                       retry_at=None,
                       session=None):
    order_retry = models.OrderRetryTask()
    order_retry.retry_task = retry_task
    order_retry.retry_args = retry_args
    order_retry.retry_kwargs = retry_kwargs
    if not retry_at:
        order_retry.retry_at = datetime.datetime.utcnow()
    order_retry.order_id = order.id
    order_retry_task_repo = repositories.get_order_retry_tasks_repository()
    order_retry_task_repo.create_from(order_retry, session)
    return order_retry
Exemple #6
0
    def _create_retry_task(self):
        # Add one retry task:
        task = 'test_task'
        args = ('foo', 'bar')
        kwargs = {'k_foo': 1, 'k_bar': 2}

        order = database_utils.create_order()

        retry = models.OrderRetryTask()
        retry.order_id = order.id
        retry.retry_at = datetime.datetime.utcnow()
        retry.retry_task = task
        retry.retry_args = args
        retry.retry_kwargs = kwargs

        retry_repo = repositories.get_order_retry_tasks_repository()
        retry_repo.create_from(retry)

        database_utils.get_session().commit()

        return args, kwargs, retry_repo