1- from typing import Optional
1+ from typing import Optional , TypedDict , Union
22import workos
33from workos .utils .pagination_order import PaginationOrder
44from workos .utils .request import (
1717
1818
1919RESPONSE_LIMIT = 10
20+ DirectoryListFilters = TypedDict (
21+ "DirectoryListFilters" ,
22+ {"search" : Optional [str ], "organization" : Optional [str ], "domain" : Optional [str ]},
23+ total = False ,
24+ )
25+ DirectoryUserListFilters = TypedDict (
26+ "DirectoryUserListFilters" ,
27+ {"group" : Optional [str ], "directory" : Optional [str ]},
28+ total = False ,
29+ )
30+ DirectoryGroupListFilters = TypedDict (
31+ "DirectoryGroupListFilters" ,
32+ {"user" : Optional [str ], "directory" : Optional [str ]},
33+ total = False ,
34+ )
2035
2136
2237class DirectorySync :
@@ -40,7 +55,7 @@ def list_users(
4055 before : Optional [str ] = None ,
4156 after : Optional [str ] = None ,
4257 order : PaginationOrder = "desc" ,
43- ) -> WorkOsListResource [DirectoryUser ]:
58+ ) -> WorkOsListResource [DirectoryUser , DirectoryUserListFilters ]:
4459 """Gets a list of provisioned Users for a Directory.
4560
4661 Note, either 'directory' or 'group' must be provided.
@@ -57,30 +72,31 @@ def list_users(
5772 dict: Directory Users response from WorkOS.
5873 """
5974
60- params = {
75+ list_params : ListArgs = {
6176 "limit" : limit ,
6277 "before" : before ,
6378 "after" : after ,
6479 "order" : order ,
6580 }
6681
82+ filter_params : DirectoryUserListFilters = {}
6783 if group is not None :
68- params ["group" ] = group
84+ filter_params ["group" ] = group
6985 if directory is not None :
70- params ["directory" ] = directory
86+ filter_params ["directory" ] = directory
7187
7288 response = self .request_helper .request (
7389 "directory_users" ,
7490 method = REQUEST_METHOD_GET ,
75- params = params ,
91+ params = { ** list_params , ** filter_params } ,
7692 token = workos .api_key ,
7793 )
7894
7995 return WorkOsListResource (
8096 list_method = self .list_users ,
81- # TODO: Should we even bother with this validation?
82- list_args = ListArgs . model_validate ( params ) ,
83- ** ListPage [DirectoryUser ](** response ).model_dump ()
97+ list_args = list_params ,
98+ filter_params = filter_params ,
99+ ** ListPage [DirectoryUser ](** response ).model_dump (),
84100 )
85101
86102 def list_groups (
@@ -91,7 +107,7 @@ def list_groups(
91107 before : Optional [str ] = None ,
92108 after : Optional [str ] = None ,
93109 order : PaginationOrder = "desc" ,
94- ) -> WorkOsListResource [DirectoryGroup ]:
110+ ) -> WorkOsListResource [DirectoryGroup , DirectoryGroupListFilters ]:
95111 """Gets a list of provisioned Groups for a Directory .
96112
97113 Note, either 'directory' or 'user' must be provided.
@@ -107,29 +123,30 @@ def list_groups(
107123 Returns:
108124 dict: Directory Groups response from WorkOS.
109125 """
110- params = {
126+ list_params : ListArgs = {
111127 "limit" : limit ,
112128 "before" : before ,
113129 "after" : after ,
114130 "order" : order ,
115131 }
132+ filter_params : DirectoryGroupListFilters = {}
116133 if user is not None :
117- params ["user" ] = user
134+ filter_params ["user" ] = user
118135 if directory is not None :
119- params ["directory" ] = directory
136+ filter_params ["directory" ] = directory
120137
121138 response = self .request_helper .request (
122139 "directory_groups" ,
123140 method = REQUEST_METHOD_GET ,
124- params = params ,
141+ params = { ** list_params , ** filter_params } ,
125142 token = workos .api_key ,
126143 )
127144
128145 return WorkOsListResource (
129146 list_method = self .list_groups ,
130- # TODO: Should we even bother with this validation?
131- list_args = ListArgs . model_validate ( params ) ,
132- ** ListPage [DirectoryGroup ](** response ).model_dump ()
147+ list_args = list_params ,
148+ filter_params = filter_params ,
149+ ** ListPage [DirectoryGroup ](** response ).model_dump (),
133150 )
134151
135152 def get_user (self , user : str ):
@@ -193,7 +210,7 @@ def list_directories(
193210 after : Optional [str ] = None ,
194211 organization : Optional [str ] = None ,
195212 order : PaginationOrder = "desc" ,
196- ) -> WorkOsListResource [Directory ]:
213+ ) -> WorkOsListResource [Directory , DirectoryListFilters ]:
197214 """Gets details for existing Directories.
198215
199216 Args:
@@ -209,27 +226,28 @@ def list_directories(
209226 dict: Directories response from WorkOS.
210227 """
211228
212- params = {
213- "domain" : domain ,
214- "organization" : organization ,
215- "search" : search ,
229+ list_params : ListArgs = {
216230 "limit" : limit ,
217231 "before" : before ,
218232 "after" : after ,
219233 "order" : order ,
220234 }
221-
235+ filter_params : DirectoryListFilters = {
236+ "domain" : domain ,
237+ "search" : search ,
238+ "organization" : organization ,
239+ }
222240 response = self .request_helper .request (
223241 "directories" ,
224242 method = REQUEST_METHOD_GET ,
225- params = params ,
243+ params = { ** list_params , ** filter_params } ,
226244 token = workos .api_key ,
227245 )
228246 return WorkOsListResource (
229247 list_method = self .list_directories ,
230- # TODO: Should we even bother with this validation?
231- list_args = ListArgs . model_validate ( params ) ,
232- ** ListPage [Directory ](** response ).model_dump ()
248+ list_args = list_params ,
249+ filter_params = filter_params ,
250+ ** ListPage [Directory ](** response ).model_dump (),
233251 )
234252
235253 def delete_directory (self , directory : str ):
0 commit comments