Skip to content

onconova.research.controllers.project

ProjectController

Bases: ControllerBase

check_project_data_manager_grant(projectId, memberId, grantId)

Source code in onconova/research/controllers/project.py
@route.get(
    path="/{projectId}/members/{memberId}/data-management/grants/{grantId}",
    response={200: scm.ProjectDataManagerGrant, 404: None, **COMMON_HTTP_ERRORS},
    permissions=[perms.CanViewProjects],
    operation_id="getProjectDataManagerGrantById",
)
def check_project_data_manager_grant(
    self, projectId: str, memberId: str, grantId: str
):
    return 200, get_object_or_404(
        orm.ProjectDataManagerGrant,
        id=grantId,
        project_id=projectId,
        member_id=memberId,
    )

create_project(payload)

Source code in onconova/research/controllers/project.py
@route.post(
    path="",
    response={201: ModifiedResourceSchema, **COMMON_HTTP_ERRORS},
    permissions=[perms.CanManageProjects],
    operation_id="createProject",
)
def create_project(self, payload: scm.ProjectCreate):  # type: ignore
    return 201, payload.model_dump_django()

create_project_data_manager_grant(projectId, memberId, payload)

Source code in onconova/research/controllers/project.py
@route.post(
    path="/{projectId}/members/{memberId}/data-management/grants",
    response={201: ModifiedResourceSchema, **COMMON_HTTP_ERRORS},
    permissions=[perms.CanManageProjects],
    operation_id="createProjectDataManagerGrant",
)
def create_project_data_manager_grant(self, projectId: str, memberId: str, payload: scm.ProjectDataManagerGrantCreate):  # type: ignore
    project = self.get_object_or_exception(orm.Project, id=projectId)
    member = get_object_or_404(User, id=memberId)
    instance = orm.ProjectDataManagerGrant(project=project, member=member)
    return 201, payload.model_dump_django(instance=instance)

delete_project(projectId)

Source code in onconova/research/controllers/project.py
@route.delete(
    path="/{projectId}",
    response={204: None, 404: None, **COMMON_HTTP_ERRORS},
    permissions=[perms.CanDeleteProjects],
    operation_id="deleteProjectById",
)
def delete_project(self, projectId: str):
    get_object_or_404(orm.Project, id=projectId).delete()
    return 204, None

get_all_project_data_management_grant_history_events(projectId, memberId, grantId)

Source code in onconova/research/controllers/project.py
@route.get(
    path="/{projectId}/members/{memberId}/data-management/grants/{grantId}/history/events",
    response={
        200: Paginated[HistoryEvent.bind_schema(scm.ProjectCreate)],
        404: None,
        **COMMON_HTTP_ERRORS,
    },
    permissions=[perms.CanViewProjects],
    operation_id="getAllProjectDataManagementGrantHistoryEvents",
)
@paginate()
@ordering()
def get_all_project_data_management_grant_history_events(
    self, projectId: str, memberId: str, grantId: str
):
    instance = get_object_or_404(
        orm.ProjectDataManagerGrant,
        id=grantId,
        project_id=projectId,
        member_id=memberId,
    )
    return pghistory.models.Events.objects.tracks(instance).all()  # type: ignore

get_all_project_data_manager_grant(projectId, memberId)

Source code in onconova/research/controllers/project.py
@route.get(
    path="/{projectId}/members/{memberId}/data-management/grants",
    response={
        200: Paginated[scm.ProjectDataManagerGrant],
        **COMMON_HTTP_ERRORS,
    },
    permissions=[perms.CanViewProjects],
    operation_id="getProjectDataManagerGrant",
)
@paginate()
@ordering()
def get_all_project_data_manager_grant(self, projectId: str, memberId: str):  # type: ignore
    return orm.ProjectDataManagerGrant.objects.filter(
        project=get_object_or_404(orm.Project, id=projectId),
        member=get_object_or_404(User, id=memberId),
    ).order_by("-created_at")

get_all_project_history_events(projectId)

Source code in onconova/research/controllers/project.py
@route.get(
    path="/{projectId}/history/events",
    response={
        200: Paginated[HistoryEvent.bind_schema(scm.ProjectCreate)],
        404: None,
        **COMMON_HTTP_ERRORS,
    },
    permissions=[perms.CanViewProjects],
    operation_id="getAllProjectHistoryEvents",
)
@paginate()
@ordering()
def get_all_project_history_events(self, projectId: str):
    instance = get_object_or_404(orm.Project, id=projectId)
    return pghistory.models.Events.objects.tracks(instance).all()  # type: ignore

get_all_projects_matching_the_query(query)

Source code in onconova/research/controllers/project.py
@route.get(
    path="",
    response={
        200: Paginated[scm.Project],
        **COMMON_HTTP_ERRORS,
    },
    permissions=[perms.CanViewProjects],
    operation_id="getProjects",
)
@paginate()
@ordering()
def get_all_projects_matching_the_query(self, query: Query[scm.ProjectFilters]):  # type: ignore
    queryset = orm.Project.objects.all().order_by("-created_at")
    return query.filter(queryset)

get_project_by_id(projectId)

Source code in onconova/research/controllers/project.py
@route.get(
    path="/{projectId}",
    response={200: scm.Project, 404: None, **COMMON_HTTP_ERRORS},
    permissions=[perms.CanViewProjects],
    operation_id="getProjectById",
)
def get_project_by_id(self, projectId: str):
    return get_object_or_404(orm.Project, id=projectId)

get_project_data_management_grant_history_event_by_id(projectId, memberId, grantId, eventId)

Source code in onconova/research/controllers/project.py
@route.get(
    path="/{projectId}/members/{memberId}/data-management/grants/{grantId}/history/events/{eventId}",
    response={
        200: HistoryEvent.bind_schema(scm.ProjectCreate),
        404: None,
        **COMMON_HTTP_ERRORS,
    },
    permissions=[perms.CanViewProjects],
    operation_id="getProjectDataManagementGrantHistoryEventById",
)
def get_project_data_management_grant_history_event_by_id(
    self, projectId: str, memberId: str, grantId: str, eventId: str
):
    instance = get_object_or_404(
        orm.ProjectDataManagerGrant,
        id=grantId,
        project_id=projectId,
        member_id=memberId,
    )
    return get_object_or_404(
        pghistory.models.Events.objects.tracks(instance), pgh_id=eventId  # type: ignore
    )

get_project_history_event_by_id(projectId, eventId)

Source code in onconova/research/controllers/project.py
@route.get(
    path="/{projectId}/history/events/{eventId}",
    response={
        200: HistoryEvent.bind_schema(scm.ProjectCreate),
        404: None,
        **COMMON_HTTP_ERRORS,
    },
    permissions=[perms.CanViewProjects],
    operation_id="getProjectHistoryEventById",
)
def get_project_history_event_by_id(self, projectId: str, eventId: str):
    instance = get_object_or_404(orm.Project, id=projectId)
    return get_object_or_404(
        pghistory.models.Events.objects.tracks(instance), pgh_id=eventId  # type: ignore
    )

revert_project_data_management_grant_to_history_event(projectId, memberId, grantId, eventId)

Source code in onconova/research/controllers/project.py
@route.put(
    path="/{projectId}/members/{memberId}/data-management/grants/{grantId}/history/events/{eventId}/reversion",
    response={201: ModifiedResourceSchema, 404: None, **COMMON_HTTP_ERRORS},
    permissions=[perms.CanManageProjects],
    operation_id="revertProjectDataManagementGrantToHistoryEvent",
)
def revert_project_data_management_grant_to_history_event(
    self, projectId: str, memberId: str, grantId: str, eventId: str
):
    # Get project and check whether user can manage it
    project = self.get_object_or_exception(orm.Project, id=projectId)
    instance = get_object_or_404(
        orm.ProjectDataManagerGrant,
        id=grantId,
        project_id=project.id,
        member_id=memberId,
    )
    return 201, get_object_or_404(instance.events, pgh_id=eventId).revert()

revert_project_to_history_event(projectId, eventId)

Source code in onconova/research/controllers/project.py
@route.put(
    path="/{projectId}/history/events/{eventId}/reversion",
    response={201: ModifiedResourceSchema, 404: None, **COMMON_HTTP_ERRORS},
    permissions=[perms.CanManageProjects],
    operation_id="revertProjectToHistoryEvent",
)
def revert_project_to_history_event(self, projectId: str, eventId: str):
    instance = self.get_object_or_exception(orm.Project, id=projectId)
    return 201, get_object_or_404(instance.events, pgh_id=eventId).revert()

revoke_project_data_manager_grant(projectId, memberId, grantId)

Source code in onconova/research/controllers/project.py
@route.delete(
    path="/{projectId}/members/{memberId}/data-management/grants/{grantId}",
    response={201: ModifiedResourceSchema, 404: None, **COMMON_HTTP_ERRORS},
    permissions=[perms.CanManageProjects],
    operation_id="revokeProjectDataManagerGrant",
)
def revoke_project_data_manager_grant(
    self, projectId: str, memberId: str, grantId: str
):
    # Get project and check whether user can manage it
    project = self.get_object_or_exception(orm.Project, id=projectId)
    # Get management grant instance
    instance = get_object_or_404(
        orm.ProjectDataManagerGrant,
        id=grantId,
        project_id=project.id,
        member_id=memberId,
    )
    instance.revoked = True
    instance.save()
    return 201, instance

update_project(projectId, payload)

Source code in onconova/research/controllers/project.py
@route.put(
    path="/{projectId}",
    response={200: ModifiedResourceSchema, 404: None, **COMMON_HTTP_ERRORS},
    permissions=[perms.CanManageProjects],
    operation_id="updateProjectById",
)
def update_project(self, projectId: str, payload: scm.ProjectCreate):  # type: ignore
    instance = self.get_object_or_exception(orm.Project, id=projectId)
    return payload.model_dump_django(instance=instance)
runner