def updateTaskStatus(task): """Method used to transit a task from a state to another state depending on the context. Whenever the deadline has passed. To be called by the automated system running on Appengine tasks or whenever the public page for the task is loaded in case the Appengine task framework is running late. Args: task: The GCITask entity Returns: Boolean indicating whether the task has been updated. """ from soc.modules.gci.tasks import task_update if not task.deadline or datetime.datetime.now() < task.deadline: # do nothing if there is no deadline or it hasn't passed yet return False # the transition depends on the current state of the task transit_func = STATE_TRANSITIONS[task.status] if not transit_func: logging.warning('Invalid state to transfer from %s' %task.status) return False # update the task and create a comment task, comment = transit_func(task) _storeTaskAndComment(task, comment) if task.deadline: # only if there is a deadline set we should schedule another task task_update.spawnUpdateTask(task) return True
def updateTaskStatus(self, entity): """Method used to transit a task from a state to another state depending on the context. Whenever the deadline has passed. Args: entity: The GCITask entity Returns: Task entity and a Comment entity if the occurring transit created one. """ from soc.modules.gci.tasks import task_update if entity.deadline and datetime.datetime.now() >= entity.deadline: # calls a specific method to make a transition depending on the # task's current state transit_func = getattr(self, STATE_TRANSITIONS[entity.status]) update_dict = transit_func(entity) comment_properties = { 'parent': entity, 'scope_path': entity.key().id_or_name(), 'created_by': None, 'content': update_dict['content'], 'changes': update_dict['changes'], } entity, comment_entity, _ = self.updateEntityPropertiesWithCWS( entity, update_dict['properties'], comment_properties) if entity.deadline: # only if there is a deadline set we should schedule another task task_update.spawnUpdateTask(entity) else: comment_entity = None return entity, comment_entity
def assignTaskTxn(): task.put() comment_txn() task_update.spawnUpdateTask(task, transactional=True)