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"}), )
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" }), )
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
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
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
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