Skip to content

Commit 5c2b933

Browse files
authored
Add organization membership deactivate and reactivate API methods (#264)
* Add organization membership deactivate and reactivate API methods.
1 parent 6409314 commit 5c2b933

File tree

2 files changed

+104
-0
lines changed

2 files changed

+104
-0
lines changed

tests/test_user_management.py

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -389,6 +389,38 @@ def test_list_organization_memberships_returns_metadata(
389389
dict_oms = oms.to_dict()
390390
assert dict_oms["metadata"]["params"]["organization_id"] == "org_12345"
391391

392+
def test_list_organization_memberships_with_multiple_statuses_returns_metadata(
393+
self, mock_organization_memberships, capture_and_mock_request
394+
):
395+
_, request_kwargs = capture_and_mock_request(
396+
"get", mock_organization_memberships, 200
397+
)
398+
399+
oms = self.user_management.list_organization_memberships(
400+
organization_id="org_12345",
401+
statuses=["active", "inactive"],
402+
)
403+
404+
assert request_kwargs["params"]["statuses"] == "active,inactive"
405+
dict_oms = oms.to_dict()
406+
assert dict_oms["metadata"]["params"]["organization_id"] == "org_12345"
407+
408+
def test_list_organization_memberships_with_a_single_status_returns_metadata(
409+
self, mock_organization_memberships, capture_and_mock_request
410+
):
411+
_, request_kwargs = capture_and_mock_request(
412+
"get", mock_organization_memberships, 200
413+
)
414+
415+
oms = self.user_management.list_organization_memberships(
416+
organization_id="org_12345",
417+
statuses=["inactive"],
418+
)
419+
420+
assert request_kwargs["params"]["statuses"] == "inactive"
421+
dict_oms = oms.to_dict()
422+
assert dict_oms["metadata"]["params"]["organization_id"] == "org_12345"
423+
392424
def test_delete_organization_membership(self, capture_and_mock_request):
393425
url, request_kwargs = capture_and_mock_request("delete", None, 200)
394426

@@ -397,6 +429,34 @@ def test_delete_organization_membership(self, capture_and_mock_request):
397429
assert url[0].endswith("user_management/organization_memberships/om_ABCDE")
398430
assert user is None
399431

432+
def test_deactivate_organization_membership(
433+
self, mock_organization_membership, capture_and_mock_request
434+
):
435+
url, request_kwargs = capture_and_mock_request(
436+
"put", mock_organization_membership, 200
437+
)
438+
439+
om = self.user_management.deactivate_organization_membership("om_ABCDE")
440+
441+
assert url[0].endswith(
442+
"user_management/organization_memberships/om_ABCDE/deactivate"
443+
)
444+
assert om["id"] == "om_ABCDE"
445+
446+
def test_reactivate_organization_membership(
447+
self, mock_organization_membership, capture_and_mock_request
448+
):
449+
url, request_kwargs = capture_and_mock_request(
450+
"put", mock_organization_membership, 200
451+
)
452+
453+
om = self.user_management.reactivate_organization_membership("om_ABCDE")
454+
455+
assert url[0].endswith(
456+
"user_management/organization_memberships/om_ABCDE/reactivate"
457+
)
458+
assert om["id"] == "om_ABCDE"
459+
400460
def test_authorization_url_throws_value_error_without_redirect_uri(self):
401461
connection_id = "connection_123"
402462
login_hint = "[email protected]"

workos/user_management.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,12 @@
2828
USER_DETAIL_PATH = "user_management/users/{0}"
2929
ORGANIZATION_MEMBERSHIP_PATH = "user_management/organization_memberships"
3030
ORGANIZATION_MEMBERSHIP_DETAIL_PATH = "user_management/organization_memberships/{0}"
31+
ORGANIZATION_MEMBERSHIP_DEACTIVATE_PATH = (
32+
ORGANIZATION_MEMBERSHIP_DETAIL_PATH + "/deactivate"
33+
)
34+
ORGANIZATION_MEMBERSHIP_REACTIVATE_PATH = (
35+
ORGANIZATION_MEMBERSHIP_DETAIL_PATH + "/reactivate"
36+
)
3137
USER_AUTHORIZATION_PATH = "user_management/authorize"
3238
USER_AUTHENTICATE_PATH = "user_management/authenticate"
3339
USER_SEND_PASSWORD_RESET_PATH = "user_management/password_reset/send"
@@ -290,6 +296,7 @@ def list_organization_memberships(
290296
self,
291297
user_id=None,
292298
organization_id=None,
299+
statuses=None,
293300
limit=None,
294301
before=None,
295302
after=None,
@@ -300,6 +307,7 @@ def list_organization_memberships(
300307
Kwargs:
301308
user_id (str): Filter Organization Memberships by user. (Optional)
302309
organization_id (str): Filter Organization Memberships by organization. (Optional)
310+
statuses (list): Filter Organization Memberships by status. (Optional)
303311
limit (int): Maximum number of records to return. (Optional)
304312
before (str): Pagination cursor to receive records before a provided Organization Membership ID. (Optional)
305313
after (str): Pagination cursor to receive records after a provided Organization Membership ID. (Optional)
@@ -315,9 +323,13 @@ def list_organization_memberships(
315323
limit = RESPONSE_LIMIT
316324
default_limit = True
317325

326+
if statuses is not None:
327+
statuses = ",".join(statuses)
328+
318329
params = {
319330
"user_id": user_id,
320331
"organization_id": organization_id,
332+
"statuses": statuses,
321333
"limit": limit,
322334
"before": before,
323335
"after": after,
@@ -364,6 +376,38 @@ def delete_organization_membership(self, organization_membership_id):
364376
token=workos.api_key,
365377
)
366378

379+
def deactivate_organization_membership(self, organization_membership_id):
380+
"""Deactivate an organization membership.
381+
382+
Args:
383+
organization_membership_id (str) - The unique ID of the Organization Membership.
384+
Returns:
385+
dict: OrganizationMembership response from WorkOS.
386+
"""
387+
response = self.request_helper.request(
388+
ORGANIZATION_MEMBERSHIP_DEACTIVATE_PATH.format(organization_membership_id),
389+
method=REQUEST_METHOD_PUT,
390+
token=workos.api_key,
391+
)
392+
393+
return WorkOSOrganizationMembership.construct_from_response(response).to_dict()
394+
395+
def reactivate_organization_membership(self, organization_membership_id):
396+
"""Reactivates an organization membership.
397+
398+
Args:
399+
organization_membership_id (str) - The unique ID of the Organization Membership.
400+
Returns:
401+
dict: OrganizationMembership response from WorkOS.
402+
"""
403+
response = self.request_helper.request(
404+
ORGANIZATION_MEMBERSHIP_REACTIVATE_PATH.format(organization_membership_id),
405+
method=REQUEST_METHOD_PUT,
406+
token=workos.api_key,
407+
)
408+
409+
return WorkOSOrganizationMembership.construct_from_response(response).to_dict()
410+
367411
def get_authorization_url(
368412
self,
369413
redirect_uri,

0 commit comments

Comments
 (0)