@@ -35,18 +35,66 @@ def get_user_profile() -> dict[str, Any]:
3535 return dict (response )
3636
3737
38+ def filter_users_by_office (data : dict [str , Any ], office : str ) -> dict [str , Any ]:
39+ """
40+ Filter users JSON to only include users that have roles for the specified office.
41+ Each user's roles dict will only contain the entry for that office.
42+
43+ Args:
44+ data: The full users JSON as a Python dict.
45+ office: The office key to filter by (e.g., 'MVP', 'LRL').
46+
47+ Returns:
48+ A new dict with the same structure, filtered to the specified office.
49+ """
50+ filtered_users = []
51+
52+ for user in data .get ("users" , []):
53+ roles = user .get ("roles" , {})
54+
55+ if office in roles :
56+ # Build a copy of the user with only the target office's roles
57+ filtered_user = {k : v for k , v in user .items () if k != "roles" }
58+ filtered_user ["roles" ] = {office : roles [office ]}
59+ filtered_users .append (filtered_user )
60+
61+ return {
62+ "page" : data .get ("page" ),
63+ "page-size" : data .get ("page-size" ),
64+ "total" : len (filtered_users ),
65+ "users" : filtered_users ,
66+ }
67+
68+
3869def get_users (
3970 office_id : Optional [str ] = None ,
71+ username_like : Optional [str ] = None ,
72+ include_roles : Optional [bool ] = None ,
4073 page : Optional [str ] = None ,
41- page_size : Optional [int ] = None ,
74+ page_size : Optional [int ] = 5000 ,
4275) -> Data :
4376 """Retrieve users with optional office and paging filters."""
4477
45- params = {"office" : office_id , "page" : page , "page-size" : page_size }
78+ endpoint = "users"
79+ params = {
80+ "office" : office_id ,
81+ "username-like" : username_like ,
82+ "include-roles" : include_roles ,
83+ "page" : page ,
84+ "page-size" : page_size ,
85+ }
4686 try :
47- response = api .get ("users" , params = params , api_version = 1 )
87+ response = api .get_with_paging (
88+ endpoint = endpoint , selector = "users" , params = params , api_version = 1
89+ )
4890 except api .ApiError as error :
4991 _raise_user_management_error (error , "User list lookup" )
92+
93+ # filter by office if office_id is provided since the API does not
94+ # currently support filtering by office on the backend. This is a
95+ # temporary workaround until the API supports office filtering.
96+ if office_id :
97+ response = filter_users_by_office (response , office_id )
5098 return Data (response , selector = "users" )
5199
52100
0 commit comments