|
4 | 4 |
|
5 | 5 | import logging |
6 | 6 | import bugsnag |
7 | | -from typing import Annotated, List, Optional, Union, Dict |
| 7 | +from typing import Annotated, List, Optional, Union, Dict, Any |
8 | 8 |
|
9 | 9 | from fastapi import APIRouter, Depends, Path, Body, Query, HTTPException, Request |
10 | 10 | from psycopg import AsyncCursor |
|
23 | 23 |
|
24 | 24 | router = APIRouter(prefix="/user-groups", tags=["user groups"]) |
25 | 25 |
|
| 26 | +user_group_defaults: dict[str, Any] = { |
| 27 | + # "dependencies": [Depends(require_admin)], |
| 28 | +} |
26 | 29 |
|
27 | 30 | # Add models to support user emails in requests |
28 | 31 | class UserGroupCreate(BaseModel): |
@@ -80,7 +83,7 @@ async def get_user_id(cursor: AsyncCursor, user_identifier: Union[str, int]) -> |
80 | 83 | return None |
81 | 84 |
|
82 | 85 |
|
83 | | -@router.get("", response_model=List[UserGroup], dependencies=[Depends(require_admin)]) |
| 86 | +@router.get("", response_model=List[UserGroup], **user_group_defaults) |
84 | 87 | async def list_user_groups( |
85 | 88 | request: Request, |
86 | 89 | cursor: AsyncCursor = Depends(db.yield_cursor), |
@@ -108,7 +111,7 @@ async def list_user_groups( |
108 | 111 | raise |
109 | 112 |
|
110 | 113 |
|
111 | | -@router.get("/me", response_model=List[UserGroup]) |
| 114 | +@router.get("/me", response_model=List[UserGroup], **user_group_defaults) |
112 | 115 | async def get_my_user_groups( |
113 | 116 | request: Request, |
114 | 117 | user: User = Depends(authenticate_user), |
@@ -179,7 +182,7 @@ async def get_my_user_groups( |
179 | 182 | raise |
180 | 183 |
|
181 | 184 |
|
182 | | -@router.get("/me/with-signals", response_model=List[Union[UserGroupWithSignals, UserGroupComplete]]) |
| 185 | +@router.get("/me/with-signals", response_model=List[Union[UserGroupWithSignals, UserGroupComplete]], **user_group_defaults) |
183 | 186 | async def get_my_user_groups_with_signals( |
184 | 187 | request: Request, |
185 | 188 | user: User = Depends(authenticate_user), |
@@ -284,7 +287,7 @@ async def get_my_user_groups_with_signals( |
284 | 287 | raise |
285 | 288 |
|
286 | 289 |
|
287 | | -@router.post("", response_model=Union[UserGroup, UserGroupWithUsers], dependencies=[Depends(require_admin)]) |
| 290 | +@router.post("", response_model=Union[UserGroup, UserGroupWithUsers], **user_group_defaults) |
288 | 291 | async def create_user_group( |
289 | 292 | request: Request, |
290 | 293 | group_data: UserGroupCreate, |
@@ -409,7 +412,7 @@ async def create_user_group( |
409 | 412 | raise |
410 | 413 |
|
411 | 414 |
|
412 | | -@router.get("/{group_id}", response_model=Union[UserGroup, UserGroupWithUsers, UserGroupComplete], dependencies=[Depends(require_admin)]) |
| 415 | +@router.get("/{group_id}", response_model=Union[UserGroup, UserGroupWithUsers, UserGroupComplete], **user_group_defaults) |
413 | 416 | async def read_user_group( |
414 | 417 | request: Request, |
415 | 418 | group_id: Annotated[int, Path(description="The ID of the user group to retrieve")], |
@@ -501,7 +504,7 @@ async def read_user_group( |
501 | 504 | raise |
502 | 505 |
|
503 | 506 |
|
504 | | -@router.put("/{group_id}", response_model=Union[UserGroup, UserGroupWithUsers, UserGroupComplete], dependencies=[Depends(require_admin)]) |
| 507 | +@router.put("/{group_id}", response_model=Union[UserGroup, UserGroupWithUsers, UserGroupComplete], **user_group_defaults) |
505 | 508 | async def update_user_group( |
506 | 509 | request: Request, |
507 | 510 | group_id: Annotated[int, Path(description="The ID of the user group to update")], |
@@ -628,7 +631,7 @@ async def update_user_group( |
628 | 631 | raise |
629 | 632 |
|
630 | 633 |
|
631 | | -@router.delete("/{group_id}", response_model=bool, dependencies=[Depends(require_admin)]) |
| 634 | +@router.delete("/{group_id}", response_model=bool, **user_group_defaults) |
632 | 635 | async def delete_user_group( |
633 | 636 | request: Request, |
634 | 637 | group_id: Annotated[int, Path(description="The ID of the user group to delete")], |
@@ -671,7 +674,7 @@ async def delete_user_group( |
671 | 674 | raise |
672 | 675 |
|
673 | 676 |
|
674 | | -@router.post("/{group_id}/users", response_model=bool, dependencies=[Depends(require_admin)]) |
| 677 | +@router.post("/{group_id}/users", response_model=bool, **user_group_defaults) |
675 | 678 | async def add_user_to_group_by_email( |
676 | 679 | request: Request, |
677 | 680 | group_id: Annotated[int, Path(description="The ID of the user group")], |
@@ -710,7 +713,7 @@ async def add_user_to_group_by_email( |
710 | 713 | raise |
711 | 714 |
|
712 | 715 |
|
713 | | -@router.post("/{group_id}/users/{user_id_or_email}", response_model=bool, dependencies=[Depends(require_admin)]) |
| 716 | +@router.post("/{group_id}/users/{user_id_or_email}", response_model=bool, **user_group_defaults) |
714 | 717 | async def add_user_to_group( |
715 | 718 | request: Request, |
716 | 719 | group_id: Annotated[int, Path(description="The ID of the user group")], |
@@ -759,7 +762,7 @@ async def add_user_to_group( |
759 | 762 | raise |
760 | 763 |
|
761 | 764 |
|
762 | | -@router.delete("/{group_id}/users/{user_id_or_email}", response_model=bool, dependencies=[Depends(require_admin)]) |
| 765 | +@router.delete("/{group_id}/users/{user_id_or_email}", response_model=bool, **user_group_defaults) |
763 | 766 | async def remove_user_from_group( |
764 | 767 | group_id: Annotated[int, Path(description="The ID of the user group")], |
765 | 768 | user_id_or_email: Annotated[str, Path(description="The ID or email of the user to remove")], |
@@ -788,7 +791,7 @@ async def remove_user_from_group( |
788 | 791 | return True |
789 | 792 |
|
790 | 793 |
|
791 | | -@router.post("/{group_id}/signals/{signal_id}", response_model=bool, dependencies=[Depends(require_admin)]) |
| 794 | +@router.post("/{group_id}/signals/{signal_id}", response_model=bool, **user_group_defaults) |
792 | 795 | async def add_signal_to_group( |
793 | 796 | group_id: Annotated[int, Path(description="The ID of the user group")], |
794 | 797 | signal_id: Annotated[int, Path(description="The ID of the signal to add")], |
@@ -816,7 +819,7 @@ async def add_signal_to_group( |
816 | 819 | return True |
817 | 820 |
|
818 | 821 |
|
819 | | -@router.delete("/{group_id}/signals/{signal_id}", response_model=bool, dependencies=[Depends(require_admin)]) |
| 822 | +@router.delete("/{group_id}/signals/{signal_id}", response_model=bool, **user_group_defaults) |
820 | 823 | async def remove_signal_from_group( |
821 | 824 | group_id: Annotated[int, Path(description="The ID of the user group")], |
822 | 825 | signal_id: Annotated[int, Path(description="The ID of the signal to remove")], |
@@ -847,7 +850,7 @@ async def remove_signal_from_group( |
847 | 850 | return True |
848 | 851 |
|
849 | 852 |
|
850 | | -@router.post("/{group_id}/signals/{signal_id}/collaborators", response_model=bool, dependencies=[Depends(require_admin)]) |
| 853 | +@router.post("/{group_id}/signals/{signal_id}/collaborators", response_model=bool, **user_group_defaults) |
851 | 854 | async def add_collaborator_to_signal_by_email( |
852 | 855 | group_id: Annotated[int, Path(description="The ID of the user group")], |
853 | 856 | signal_id: Annotated[int, Path(description="The ID of the signal")], |
@@ -891,7 +894,7 @@ async def add_collaborator_to_signal_by_email( |
891 | 894 | return True |
892 | 895 |
|
893 | 896 |
|
894 | | -@router.post("/{group_id}/signals/{signal_id}/collaborators/{user_id_or_email}", response_model=bool, dependencies=[Depends(require_admin)]) |
| 897 | +@router.post("/{group_id}/signals/{signal_id}/collaborators/{user_id_or_email}", response_model=bool, **user_group_defaults) |
895 | 898 | async def add_collaborator_to_signal_in_group( |
896 | 899 | request: Request, |
897 | 900 | group_id: Annotated[int, Path(description="The ID of the user group")], |
@@ -1000,7 +1003,7 @@ async def add_collaborator_to_signal_in_group( |
1000 | 1003 | raise |
1001 | 1004 |
|
1002 | 1005 |
|
1003 | | -@router.delete("/{group_id}/signals/{signal_id}/collaborators/{user_id_or_email}", response_model=bool, dependencies=[Depends(require_admin)]) |
| 1006 | +@router.delete("/{group_id}/signals/{signal_id}/collaborators/{user_id_or_email}", response_model=bool, **user_group_defaults) |
1004 | 1007 | async def remove_collaborator_from_signal_in_group( |
1005 | 1008 | group_id: Annotated[int, Path(description="The ID of the user group")], |
1006 | 1009 | signal_id: Annotated[int, Path(description="The ID of the signal")], |
|
0 commit comments