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 )
2025-10-17 2025-10-17 runner