def modify_priority_level( todo: t.Union[str, int], priority: t.Union[str, int], project: models.Project, recursive: bool, ): todo = get_todo_for_project_and_identifier(SC.session, todo, project) priority_id = models.Priority.get_for_identifier_and_project( session = SC.session, project_id = todo.project_id, identifier = priority, target = models.Priority.id, ) if priority_id is None: return 'invalid priority', status.HTTP_400_BAD_REQUEST todo.priority_id = priority_id if recursive: for child in todo.traverse_children(): child.priority_id = priority_id SC.session.commit() return schemas.ToDoSchema().serialize(todo)
def comment_todo(target: t.Union[str, int], project: models.Project, comment: str): todo = get_todo_for_project_and_identifier(SC.session, target, project) comment = models.Comment(todo=todo, text=comment) SC.session.add(comment) SC.session.commit() return schemas.ToDoSchema().serialize(todo)
def dispatch_request(self, target: t.Union[int, str], project: models.Project): todo = get_todo_for_project_and_identifier(SC.session, target, project) self._modify_todo(todo) if self._RECURSIVE: for child in todo.traverse_children(active_only=False): self._modify_todo(child) SC.session.commit() return ToDoSchema().serialize(todo)
def create_todo(): schema = ToDoSchema() try: todo_data = schema.deserialize_raw(request.data) create_data = schemas.CreateTodoSchema().deserialize_raw(request.data) except DeserializationError as e: return e.serialized, status.HTTP_400_BAD_REQUEST project = models.Project.get_for_identifier_or_raise( SC.session, create_data.get('project'), schemas.ProjectSchema(), ) todo_data['project_id'] = project.id priority = models.Priority.get_for_identifier_or_raise( session=SC.session, identifier=create_data.get('priority'), schema=schemas.PrioritySchema(), base_query=SC.session.query( models.Priority).filter(models.Priority.project_id == project.id)) todo_data['priority_id'] = priority.id todo = models.ToDo(**todo_data) for tag in create_data['tags']: todo.tags.append( models.Tag.get_for_identifier_or_raise( SC.session, tag, schemas.TagSchema(), )) for parent in create_data['parents']: parent = get_todo_for_project_and_identifier(SC.session, parent, project) todo.parents.append(parent) SC.session.add(todo) SC.session.commit() return schema.serialize(todo)
def tag_todo(todo_target: t.Union[str, int], tag_target: models.Tag, project: models.Project, recursive: bool): todo = get_todo_for_project_and_identifier( SC.session, todo_target, project, ) todo.tags.append(tag_target) if recursive: for child in todo.traverse_children(): child.tags.append(tag_target) try: SC.session.commit() except (IntegrityError, OperationalError): SC.session.rollback() return 'Invalid args', status.HTTP_400_BAD_REQUEST return schemas.ToDoSchema().serialize(todo), status.HTTP_201_CREATED
def modify_todo_description(target: t.Union[int, str], project: models.Project, description: str): todo = get_todo_for_project_and_identifier(SC.session, target, project) todo.text = description SC.session.commit() return schemas.ToDoSchema().serialize(todo)
def get_todo(target: t.Union[int, str], project: models.Project): return ToDoSchema().serialize( get_todo_for_project_and_identifier(SC.session, target, project))