def set_viewed(self, viewed_date=None): """Set this execution as being viewed.""" # Only set the viewed timestamp once if self.viewed_date: return None if not viewed_date: viewed_date = datetime.datetime.now() self.viewed_date = viewed_date if self.sent_date and not self.email_delay: self.email_delay = utils.compute_duration(self.viewed_date, self.sent_date) return self.put()
def set_completed(self, completed_date=None): """Set the request has being completed.""" if self.is_completed: return None # If we haven't already marked this request as being completed, set # the is_completed flag and compute the duration the request was in # progress, in seconds. self.is_completed = True if not completed_date: completed_date = datetime.datetime.now() self.completed_date = completed_date if self.submitted_date: self.duration = utils.compute_duration(self.completed_date, self.submitted_date) return self.put()
def set_completed(self, action, end_date=None): """Set this execution as being completed.""" # Only set the action once if self.action or self.end_date: return None if not isinstance(action, Action): raise exceptions.InternalException( '"%s" is not a valid Action model.' % action) action_ids = [step_action.id for step_action in \ self.get_available_actions()] if action.id not in action_ids: raise exceptions.InternalException( '"%s" is not a valid Action for Step "%s".' % (action, self.step)) self.action = action if not end_date: end_date = datetime.datetime.now() self.end_date = end_date if self.viewed_date and not self.action_delay: self.action_delay = utils.compute_duration(self.end_date, self.viewed_date) if self.start_date and not self.duration: self.duration = utils.compute_duration(self.end_date, self.start_date) if self.action.is_complete: # If the request has not yet been marked as completed, compute the # request duration self.request.set_completed() # Record the request in the Process statistics logging.info('Queuing statistics collection for Request "%s".', self.request.id) queue = taskqueue.Queue('request-statistics') task = taskqueue.Task(params={'request_key': self.request.id, 'process_key': self.process.id, 'timestamp': time.time()}) queue.add(task) # Send the completion email to the requestor logging.info( 'Queuing completed email to be sent to "%s" for Request "%s".', self.request.requestor, self.request.id) task = taskqueue.Task(params={'key': self.id}) queue = taskqueue.Queue('mail-request-complete') queue.add(task) # Send this request to any process callbacks tasks = [] for callback_url in self.process.callbacks: task = taskqueue.Task(params={'execution_key': self.id, 'callback_url': callback_url, 'timestamp': time.time()}) tasks.append(task) if tasks: queue = taskqueue.Queue('process-callback') queue.add(tasks) else: logging.info('Queuing step email to be sent to "%s".', self.request.requestor) task = taskqueue.Task(params={'key': self.id}) queue = taskqueue.Queue('mail-request-step') queue.add(task) for step_key in self.action.outgoing: step = Step.get(step_key) if step: step.queue_tasks(self.request) return self.put()