Skip to content

Commit f58bf9e

Browse files
authored
Add role to OrganizationMembership class (#236)
* Add role to OrganizationMembership class * Add PUT OrganizationMembership endpoint
1 parent e65ec1e commit f58bf9e

File tree

5 files changed

+55
-3
lines changed

5 files changed

+55
-3
lines changed

tests/test_user_management.py

+14
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,20 @@ def test_create_organization_membership(
319319
assert organization_membership["user_id"] == user_id
320320
assert organization_membership["organization_id"] == organization_id
321321

322+
def test_update_organization_membership(
323+
self, capture_and_mock_request, mock_organization_membership
324+
):
325+
url, _ = capture_and_mock_request("put", mock_organization_membership, 201)
326+
327+
organization_membership = self.user_management.update_organization_membership(
328+
organization_membership_id="om_ABCDE",
329+
role_slug="member",
330+
)
331+
332+
assert url[0].endswith("user_management/organization_memberships/om_ABCDE")
333+
assert organization_membership["id"] == "om_ABCDE"
334+
assert organization_membership["role"] == {"slug": "member"}
335+
322336
def test_get_organization_membership(
323337
self, mock_organization_membership, capture_and_mock_request
324338
):

tests/utils/fixtures/mock_organization_membership.py

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ def __init__(self, id):
88
self.user_id = "user_12345"
99
self.organization_id = "org_67890"
1010
self.status = "active"
11+
self.role = {"slug": "member"}
1112
self.created_at = datetime.datetime.now()
1213
self.updated_at = datetime.datetime.now()
1314

@@ -16,6 +17,7 @@ def __init__(self, id):
1617
"user_id",
1718
"organization_id",
1819
"status",
20+
"role",
1921
"created_at",
2022
"updated_at",
2123
]

workos/__about__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
__package_url__ = "https://github.com/workos-inc/workos-python"
1414

15-
__version__ = "3.0.0"
15+
__version__ = "3.1.0"
1616

1717
__author__ = "WorkOS"
1818

workos/resources/user_management.py

+1
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ class WorkOSOrganizationMembership(WorkOSBaseResource):
6969
"status",
7070
"created_at",
7171
"updated_at",
72+
"role",
7273
]
7374

7475

workos/user_management.py

+37-2
Original file line numberDiff line numberDiff line change
@@ -201,19 +201,25 @@ def delete_user(self, user_id):
201201
token=workos.api_key,
202202
)
203203

204-
def create_organization_membership(self, user_id, organization_id):
204+
def create_organization_membership(self, user_id, organization_id, role_slug=None):
205205
"""Create a new OrganizationMembership for the given Organization and User.
206206
207207
Args:
208208
user_id: The Unique ID of the User.
209209
organization_id: The Unique ID of the Organization to which the user belongs to.
210+
role_slug: The Unique Slug of the Role to which to grant to this membership.
211+
If no slug is passed in, the default role will be granted.(Optional)
210212
211213
Returns:
212214
dict: Created OrganizationMembership response from WorkOS.
213215
"""
214216
headers = {}
215217

216-
params = {"user_id": user_id, "organization_id": organization_id}
218+
params = {
219+
"user_id": user_id,
220+
"organization_id": organization_id,
221+
"role_slug": role_slug,
222+
}
217223

218224
response = self.request_helper.request(
219225
ORGANIZATION_MEMBERSHIP_PATH,
@@ -225,6 +231,35 @@ def create_organization_membership(self, user_id, organization_id):
225231

226232
return WorkOSOrganizationMembership.construct_from_response(response).to_dict()
227233

234+
def update_organization_membership(
235+
self, organization_membership_id, role_slug=None
236+
):
237+
"""Updates an OrganizationMembership for the given id.
238+
239+
Args:
240+
organization_membership_id (str) - The unique ID of the Organization Membership.
241+
role_slug: The Unique Slug of the Role to which to grant to this membership.
242+
If no slug is passed in, it will not be changed (Optional)
243+
244+
Returns:
245+
dict: Created OrganizationMembership response from WorkOS.
246+
"""
247+
headers = {}
248+
249+
params = {
250+
"role_slug": role_slug,
251+
}
252+
253+
response = self.request_helper.request(
254+
ORGANIZATION_MEMBERSHIP_DETAIL_PATH.format(organization_membership_id),
255+
method=REQUEST_METHOD_PUT,
256+
params=params,
257+
headers=headers,
258+
token=workos.api_key,
259+
)
260+
261+
return WorkOSOrganizationMembership.construct_from_response(response).to_dict()
262+
228263
def get_organization_membership(self, organization_membership_id):
229264
"""Get the details of an organization membership.
230265

0 commit comments

Comments
 (0)