@@ -93,22 +93,37 @@ def strip_reason(cls, value: str | None) -> str | None:
9393 return stripped or None
9494
9595
96- def _resolve_platform (service_id : str ) -> PlatformEnum | None :
97- if service_id in PLATFORM_MAPPING :
98- return PLATFORM_MAPPING [service_id ]["enum" ]
99- for data in PLATFORM_MAPPING .values ():
100- if data ["enum" ].value == service_id :
101- return data ["enum" ]
102- return None
96+ def _get_platform_or_404 (* , platform_id : str , db_session : Session ) -> Platform :
97+ try :
98+ platform_enum = PlatformEnum (platform_id )
99+ except ValueError as exc :
100+ raise HTTPException (
101+ status_code = 404 ,
102+ detail = f"Platform '{ platform_id } ' is not recognised" ,
103+ ) from exc
103104
105+ platform = db_session .get (Platform , platform_enum )
106+ if platform is None :
107+ raise HTTPException (
108+ status_code = 404 ,
109+ detail = f"Platform '{ platform_id } ' is not configured" ,
110+ )
111+ return platform
104112
105- def _resolve_group (service_id : str ) -> GroupEnum | None :
106- if service_id in GROUP_MAPPING :
107- return GROUP_MAPPING [service_id ]["enum" ]
108- for data in GROUP_MAPPING .values ():
109- if data ["enum" ].value == service_id :
110- return data ["enum" ]
111- return None
113+
114+ def _get_group_or_404 (* , group_identifier : str , db_session : Session ) -> BiocommonsGroup :
115+ if group_identifier in GROUP_MAPPING :
116+ group_id = GROUP_MAPPING [group_identifier ]["enum" ].value
117+ else :
118+ group_id = group_identifier
119+
120+ group = db_session .get (BiocommonsGroup , group_id )
121+ if group is None :
122+ raise HTTPException (
123+ status_code = 404 ,
124+ detail = f"Group '{ group_identifier } ' is not configured" ,
125+ )
126+ return group
112127
113128
114129def _get_admin_db_user (* , user_id : str , db_session : Session ) -> BiocommonsUser :
@@ -159,19 +174,12 @@ def _membership_response() -> dict[str, object]:
159174
160175
161176def _assert_platform_admin_permissions (
162- * , admin_user : SessionUser , platform : PlatformEnum , db_session : Session
177+ * , admin_user : SessionUser , platform : Platform
163178) -> None :
164- platform_record = db_session .get (Platform , platform )
165- if platform_record is None :
166- raise HTTPException (
167- status_code = 404 ,
168- detail = f"Platform '{ platform .value } ' is not configured" ,
169- )
170-
171- allowed_roles = {role .name for role in platform_record .admin_roles }
179+ allowed_roles = {role .name for role in platform .admin_roles }
172180 if not allowed_roles :
173181 logger .warning (
174- "Platform %s has no admin roles configured" , platform_record .id .value
182+ "Platform %s has no admin roles configured" , platform .id .value
175183 )
176184
177185 user_roles = set (admin_user .access_token .biocommons_roles or [])
@@ -183,19 +191,12 @@ def _assert_platform_admin_permissions(
183191
184192
185193def _assert_group_admin_permissions (
186- * , admin_user : SessionUser , group_id : str , db_session : Session
194+ * , admin_user : SessionUser , group : BiocommonsGroup
187195) -> None :
188- group_record = db_session .get (BiocommonsGroup , group_id )
189- if group_record is None :
190- raise HTTPException (
191- status_code = 404 ,
192- detail = f"Group '{ group_id } ' is not configured" ,
193- )
196+ if not group .admin_roles :
197+ logger .warning ("Group %s has no admin roles configured" , group .group_id )
194198
195- if not group_record .admin_roles :
196- logger .warning ("Group %s has no admin roles configured" , group_id )
197-
198- if not group_record .user_is_admin (admin_user ):
199+ if not group .user_is_admin (admin_user ):
199200 raise HTTPException (
200201 status_code = 403 ,
201202 detail = "You do not have permission to manage this group." ,
@@ -252,14 +253,14 @@ def _revoke_platform_membership(
252253def _approve_group_membership (
253254 * ,
254255 user_id : str ,
255- group_id : str ,
256+ group : BiocommonsGroup ,
256257 admin_record : BiocommonsUser ,
257258 client : Auth0Client ,
258259 db_session : Session ,
259260) -> None :
260261 membership = _get_group_membership_or_404 (
261262 user_id = user_id ,
262- group_id = group_id ,
263+ group_id = group . group_id ,
263264 db_session = db_session ,
264265 )
265266 membership .approval_status = ApprovalStatusEnum .APPROVED
@@ -269,20 +270,20 @@ def _approve_group_membership(
269270 membership .grant_auth0_role (auth0_client = client )
270271 membership .save (session = db_session , commit = True )
271272 db_session .refresh (membership )
272- logger .info ("Approved group %s for user %s" , group_id , user_id )
273+ logger .info ("Approved group %s for user %s" , group . group_id , user_id )
273274
274275
275276def _revoke_group_membership (
276277 * ,
277278 user_id : str ,
278- group_id : str ,
279+ group : BiocommonsGroup ,
279280 reason : str | None ,
280281 admin_record : BiocommonsUser ,
281282 db_session : Session ,
282283) -> None :
283284 membership = _get_group_membership_or_404 (
284285 user_id = user_id ,
285- group_id = group_id ,
286+ group_id = group . group_id ,
286287 db_session = db_session ,
287288 )
288289 membership .approval_status = ApprovalStatusEnum .REVOKED
@@ -291,21 +292,21 @@ def _revoke_group_membership(
291292 membership .updated_by = admin_record
292293 membership .save (session = db_session , commit = True )
293294 db_session .refresh (membership )
294- logger .info ("Revoked group %s for user %s" , group_id , user_id )
295+ logger .info ("Revoked group %s for user %s" , group . group_id , user_id )
295296
296297
297- def _parse_platform_or_404 (platform_id : str ) -> PlatformEnum :
298- platform = _resolve_platform ( platform_id )
299- if platform is None :
300- raise HTTPException ( status_code = 404 , detail = f" Platform ' { platform_id } ' not recognised" )
301- return platform
298+ def _parse_platform_or_404 (
299+ platform_id : str ,
300+ db_session : Session ,
301+ ) -> Platform :
302+ return _get_platform_or_404 ( platform_id = platform_id , db_session = db_session )
302303
303304
304- def _parse_group_or_404 (group_id : str ) -> GroupEnum :
305- group = _resolve_group ( group_id )
306- if group is None :
307- raise HTTPException ( status_code = 404 , detail = f"Group ' { group_id } ' not recognised" )
308- return group
305+ def _parse_group_or_404 (
306+ group_id : str ,
307+ db_session : Session ,
308+ ) -> BiocommonsGroup :
309+ return _get_group_or_404 ( group_identifier = group_id , db_session = db_session )
309310
310311
311312@router .get ("/filters" )
@@ -513,19 +514,18 @@ def approve_platform_membership(user_id: Annotated[str, UserIdParam],
513514 client : Annotated [Auth0Client , Depends (get_auth0_client )],
514515 approving_user : Annotated [SessionUser , Depends (get_current_user )],
515516 db_session : Annotated [Session , Depends (get_db_session )]):
516- platform = _parse_platform_or_404 (platform_id )
517+ platform_record = _parse_platform_or_404 (platform_id , db_session = db_session )
517518 _assert_platform_admin_permissions (
518519 admin_user = approving_user ,
519- platform = platform ,
520- db_session = db_session ,
520+ platform = platform_record ,
521521 )
522522 admin_record = _get_admin_db_user (
523523 user_id = approving_user .access_token .sub ,
524524 db_session = db_session ,
525525 )
526526 _approve_platform_membership (
527527 user_id = user_id ,
528- platform = platform ,
528+ platform = platform_record . id ,
529529 admin_record = admin_record ,
530530 db_session = db_session ,
531531 )
@@ -539,19 +539,18 @@ def revoke_platform_membership(user_id: Annotated[str, UserIdParam],
539539 client : Annotated [Auth0Client , Depends (get_auth0_client )],
540540 revoking_user : Annotated [SessionUser , Depends (get_current_user )],
541541 db_session : Annotated [Session , Depends (get_db_session )]):
542- platform = _parse_platform_or_404 (platform_id )
542+ platform_record = _parse_platform_or_404 (platform_id , db_session = db_session )
543543 _assert_platform_admin_permissions (
544544 admin_user = revoking_user ,
545- platform = platform ,
546- db_session = db_session ,
545+ platform = platform_record ,
547546 )
548547 admin_record = _get_admin_db_user (
549548 user_id = revoking_user .access_token .sub ,
550549 db_session = db_session ,
551550 )
552551 _revoke_platform_membership (
553552 user_id = user_id ,
554- platform = platform ,
553+ platform = platform_record . id ,
555554 reason = payload .reason ,
556555 admin_record = admin_record ,
557556 db_session = db_session ,
@@ -565,19 +564,18 @@ def approve_group_membership(user_id: Annotated[str, UserIdParam],
565564 client : Annotated [Auth0Client , Depends (get_auth0_client )],
566565 approving_user : Annotated [SessionUser , Depends (get_current_user )],
567566 db_session : Annotated [Session , Depends (get_db_session )]):
568- group = _parse_group_or_404 (group_id )
567+ group_record = _parse_group_or_404 (group_id , db_session = db_session )
569568 _assert_group_admin_permissions (
570569 admin_user = approving_user ,
571- group_id = group .value ,
572- db_session = db_session ,
570+ group = group_record ,
573571 )
574572 admin_record = _get_admin_db_user (
575573 user_id = approving_user .access_token .sub ,
576574 db_session = db_session ,
577575 )
578576 _approve_group_membership (
579577 user_id = user_id ,
580- group_id = group . value ,
578+ group = group_record ,
581579 admin_record = admin_record ,
582580 client = client ,
583581 db_session = db_session ,
@@ -592,19 +590,18 @@ def revoke_group_membership(user_id: Annotated[str, UserIdParam],
592590 client : Annotated [Auth0Client , Depends (get_auth0_client )],
593591 revoking_user : Annotated [SessionUser , Depends (get_current_user )],
594592 db_session : Annotated [Session , Depends (get_db_session )]):
595- group = _parse_group_or_404 (group_id )
593+ group_record = _parse_group_or_404 (group_id , db_session = db_session )
596594 _assert_group_admin_permissions (
597595 admin_user = revoking_user ,
598- group_id = group .value ,
599- db_session = db_session ,
596+ group = group_record ,
600597 )
601598 admin_record = _get_admin_db_user (
602599 user_id = revoking_user .access_token .sub ,
603600 db_session = db_session ,
604601 )
605602 _revoke_group_membership (
606603 user_id = user_id ,
607- group_id = group . value ,
604+ group = group_record ,
608605 reason = payload .reason ,
609606 admin_record = admin_record ,
610607 db_session = db_session ,
0 commit comments