Beispiel #1
0
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)
Beispiel #2
0
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)
Beispiel #3
0
    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)
Beispiel #4
0
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)
Beispiel #5
0
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
Beispiel #6
0
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)
Beispiel #7
0
def get_todo(target: t.Union[int, str], project: models.Project):
    return ToDoSchema().serialize(
        get_todo_for_project_and_identifier(SC.session, target, project))