workos 5.32.0__tar.gz → 5.33.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (161) hide show
  1. {workos-5.32.0 → workos-5.33.0}/PKG-INFO +1 -1
  2. {workos-5.32.0 → workos-5.33.0}/tests/test_user_management.py +56 -0
  3. {workos-5.32.0 → workos-5.33.0}/workos/__about__.py +1 -1
  4. {workos-5.32.0 → workos-5.33.0}/workos/user_management.py +26 -0
  5. {workos-5.32.0 → workos-5.33.0}/workos.egg-info/PKG-INFO +1 -1
  6. {workos-5.32.0 → workos-5.33.0}/LICENSE +0 -0
  7. {workos-5.32.0 → workos-5.33.0}/README.md +0 -0
  8. {workos-5.32.0 → workos-5.33.0}/setup.cfg +0 -0
  9. {workos-5.32.0 → workos-5.33.0}/setup.py +0 -0
  10. {workos-5.32.0 → workos-5.33.0}/tests/test_async_http_client.py +0 -0
  11. {workos-5.32.0 → workos-5.33.0}/tests/test_audit_logs.py +0 -0
  12. {workos-5.32.0 → workos-5.33.0}/tests/test_client.py +0 -0
  13. {workos-5.32.0 → workos-5.33.0}/tests/test_directory_sync.py +0 -0
  14. {workos-5.32.0 → workos-5.33.0}/tests/test_events.py +0 -0
  15. {workos-5.32.0 → workos-5.33.0}/tests/test_fga.py +0 -0
  16. {workos-5.32.0 → workos-5.33.0}/tests/test_mfa.py +0 -0
  17. {workos-5.32.0 → workos-5.33.0}/tests/test_organization_domains.py +0 -0
  18. {workos-5.32.0 → workos-5.33.0}/tests/test_organizations.py +0 -0
  19. {workos-5.32.0 → workos-5.33.0}/tests/test_passwordless.py +0 -0
  20. {workos-5.32.0 → workos-5.33.0}/tests/test_portal.py +0 -0
  21. {workos-5.32.0 → workos-5.33.0}/tests/test_session.py +0 -0
  22. {workos-5.32.0 → workos-5.33.0}/tests/test_sso.py +0 -0
  23. {workos-5.32.0 → workos-5.33.0}/tests/test_sync_http_client.py +0 -0
  24. {workos-5.32.0 → workos-5.33.0}/tests/test_user_management_list_sessions.py +0 -0
  25. {workos-5.32.0 → workos-5.33.0}/tests/test_user_management_revoke_session.py +0 -0
  26. {workos-5.32.0 → workos-5.33.0}/tests/test_vault.py +0 -0
  27. {workos-5.32.0 → workos-5.33.0}/tests/test_webhooks.py +0 -0
  28. {workos-5.32.0 → workos-5.33.0}/tests/test_widgets.py +0 -0
  29. {workos-5.32.0 → workos-5.33.0}/workos/__init__.py +0 -0
  30. {workos-5.32.0 → workos-5.33.0}/workos/_base_client.py +0 -0
  31. {workos-5.32.0 → workos-5.33.0}/workos/_client_configuration.py +0 -0
  32. {workos-5.32.0 → workos-5.33.0}/workos/async_client.py +0 -0
  33. {workos-5.32.0 → workos-5.33.0}/workos/audit_logs.py +0 -0
  34. {workos-5.32.0 → workos-5.33.0}/workos/client.py +0 -0
  35. {workos-5.32.0 → workos-5.33.0}/workos/directory_sync.py +0 -0
  36. {workos-5.32.0 → workos-5.33.0}/workos/events.py +0 -0
  37. {workos-5.32.0 → workos-5.33.0}/workos/exceptions.py +0 -0
  38. {workos-5.32.0 → workos-5.33.0}/workos/fga.py +0 -0
  39. {workos-5.32.0 → workos-5.33.0}/workos/mfa.py +0 -0
  40. {workos-5.32.0 → workos-5.33.0}/workos/organization_domains.py +0 -0
  41. {workos-5.32.0 → workos-5.33.0}/workos/organizations.py +0 -0
  42. {workos-5.32.0 → workos-5.33.0}/workos/passwordless.py +0 -0
  43. {workos-5.32.0 → workos-5.33.0}/workos/portal.py +0 -0
  44. {workos-5.32.0 → workos-5.33.0}/workos/py.typed +0 -0
  45. {workos-5.32.0 → workos-5.33.0}/workos/session.py +0 -0
  46. {workos-5.32.0 → workos-5.33.0}/workos/sso.py +0 -0
  47. {workos-5.32.0 → workos-5.33.0}/workos/types/__init__.py +0 -0
  48. {workos-5.32.0 → workos-5.33.0}/workos/types/audit_logs/__init__.py +0 -0
  49. {workos-5.32.0 → workos-5.33.0}/workos/types/audit_logs/audit_log_event.py +0 -0
  50. {workos-5.32.0 → workos-5.33.0}/workos/types/audit_logs/audit_log_event_actor.py +0 -0
  51. {workos-5.32.0 → workos-5.33.0}/workos/types/audit_logs/audit_log_event_context.py +0 -0
  52. {workos-5.32.0 → workos-5.33.0}/workos/types/audit_logs/audit_log_event_target.py +0 -0
  53. {workos-5.32.0 → workos-5.33.0}/workos/types/audit_logs/audit_log_export.py +0 -0
  54. {workos-5.32.0 → workos-5.33.0}/workos/types/audit_logs/audit_log_metadata.py +0 -0
  55. {workos-5.32.0 → workos-5.33.0}/workos/types/directory_sync/__init__.py +0 -0
  56. {workos-5.32.0 → workos-5.33.0}/workos/types/directory_sync/directory.py +0 -0
  57. {workos-5.32.0 → workos-5.33.0}/workos/types/directory_sync/directory_group.py +0 -0
  58. {workos-5.32.0 → workos-5.33.0}/workos/types/directory_sync/directory_state.py +0 -0
  59. {workos-5.32.0 → workos-5.33.0}/workos/types/directory_sync/directory_type.py +0 -0
  60. {workos-5.32.0 → workos-5.33.0}/workos/types/directory_sync/directory_user.py +0 -0
  61. {workos-5.32.0 → workos-5.33.0}/workos/types/directory_sync/list_filters.py +0 -0
  62. {workos-5.32.0 → workos-5.33.0}/workos/types/events/__init__.py +0 -0
  63. {workos-5.32.0 → workos-5.33.0}/workos/types/events/authentication_payload.py +0 -0
  64. {workos-5.32.0 → workos-5.33.0}/workos/types/events/connection_payload_with_legacy_fields.py +0 -0
  65. {workos-5.32.0 → workos-5.33.0}/workos/types/events/directory_group_membership_payload.py +0 -0
  66. {workos-5.32.0 → workos-5.33.0}/workos/types/events/directory_group_with_previous_attributes.py +0 -0
  67. {workos-5.32.0 → workos-5.33.0}/workos/types/events/directory_payload.py +0 -0
  68. {workos-5.32.0 → workos-5.33.0}/workos/types/events/directory_payload_with_legacy_fields.py +0 -0
  69. {workos-5.32.0 → workos-5.33.0}/workos/types/events/directory_user_with_previous_attributes.py +0 -0
  70. {workos-5.32.0 → workos-5.33.0}/workos/types/events/event.py +0 -0
  71. {workos-5.32.0 → workos-5.33.0}/workos/types/events/event_model.py +0 -0
  72. {workos-5.32.0 → workos-5.33.0}/workos/types/events/event_type.py +0 -0
  73. {workos-5.32.0 → workos-5.33.0}/workos/types/events/list_filters.py +0 -0
  74. {workos-5.32.0 → workos-5.33.0}/workos/types/events/organization_domain_verification_failed_payload.py +0 -0
  75. {workos-5.32.0 → workos-5.33.0}/workos/types/events/previous_attributes.py +0 -0
  76. {workos-5.32.0 → workos-5.33.0}/workos/types/events/session_created_payload.py +0 -0
  77. {workos-5.32.0 → workos-5.33.0}/workos/types/feature_flags/__init__.py +0 -0
  78. {workos-5.32.0 → workos-5.33.0}/workos/types/feature_flags/feature_flag.py +0 -0
  79. {workos-5.32.0 → workos-5.33.0}/workos/types/feature_flags/list_filters.py +0 -0
  80. {workos-5.32.0 → workos-5.33.0}/workos/types/fga/__init__.py +0 -0
  81. {workos-5.32.0 → workos-5.33.0}/workos/types/fga/authorization_resource_types.py +0 -0
  82. {workos-5.32.0 → workos-5.33.0}/workos/types/fga/authorization_resources.py +0 -0
  83. {workos-5.32.0 → workos-5.33.0}/workos/types/fga/check.py +0 -0
  84. {workos-5.32.0 → workos-5.33.0}/workos/types/fga/list_filters.py +0 -0
  85. {workos-5.32.0 → workos-5.33.0}/workos/types/fga/warnings.py +0 -0
  86. {workos-5.32.0 → workos-5.33.0}/workos/types/fga/warrant.py +0 -0
  87. {workos-5.32.0 → workos-5.33.0}/workos/types/list_resource.py +0 -0
  88. {workos-5.32.0 → workos-5.33.0}/workos/types/metadata.py +0 -0
  89. {workos-5.32.0 → workos-5.33.0}/workos/types/mfa/__init__.py +0 -0
  90. {workos-5.32.0 → workos-5.33.0}/workos/types/mfa/authentication_challenge.py +0 -0
  91. {workos-5.32.0 → workos-5.33.0}/workos/types/mfa/authentication_challenge_verification_response.py +0 -0
  92. {workos-5.32.0 → workos-5.33.0}/workos/types/mfa/authentication_factor.py +0 -0
  93. {workos-5.32.0 → workos-5.33.0}/workos/types/mfa/authentication_factor_totp_and_challenge_response.py +0 -0
  94. {workos-5.32.0 → workos-5.33.0}/workos/types/mfa/enroll_authentication_factor_type.py +0 -0
  95. {workos-5.32.0 → workos-5.33.0}/workos/types/organization_domains/__init__.py +0 -0
  96. {workos-5.32.0 → workos-5.33.0}/workos/types/organization_domains/organization_domain.py +0 -0
  97. {workos-5.32.0 → workos-5.33.0}/workos/types/organizations/__init__.py +0 -0
  98. {workos-5.32.0 → workos-5.33.0}/workos/types/organizations/domain_data_input.py +0 -0
  99. {workos-5.32.0 → workos-5.33.0}/workos/types/organizations/list_filters.py +0 -0
  100. {workos-5.32.0 → workos-5.33.0}/workos/types/organizations/organization.py +0 -0
  101. {workos-5.32.0 → workos-5.33.0}/workos/types/organizations/organization_common.py +0 -0
  102. {workos-5.32.0 → workos-5.33.0}/workos/types/passwordless/__init__.py +0 -0
  103. {workos-5.32.0 → workos-5.33.0}/workos/types/passwordless/passwordless_session.py +0 -0
  104. {workos-5.32.0 → workos-5.33.0}/workos/types/passwordless/passwordless_session_type.py +0 -0
  105. {workos-5.32.0 → workos-5.33.0}/workos/types/portal/__init__.py +0 -0
  106. {workos-5.32.0 → workos-5.33.0}/workos/types/portal/portal_link.py +0 -0
  107. {workos-5.32.0 → workos-5.33.0}/workos/types/portal/portal_link_intent.py +0 -0
  108. {workos-5.32.0 → workos-5.33.0}/workos/types/portal/portal_link_intent_options.py +0 -0
  109. {workos-5.32.0 → workos-5.33.0}/workos/types/roles/__init__.py +0 -0
  110. {workos-5.32.0 → workos-5.33.0}/workos/types/roles/role.py +0 -0
  111. {workos-5.32.0 → workos-5.33.0}/workos/types/sso/__init__.py +0 -0
  112. {workos-5.32.0 → workos-5.33.0}/workos/types/sso/connection.py +0 -0
  113. {workos-5.32.0 → workos-5.33.0}/workos/types/sso/connection_domain.py +0 -0
  114. {workos-5.32.0 → workos-5.33.0}/workos/types/sso/profile.py +0 -0
  115. {workos-5.32.0 → workos-5.33.0}/workos/types/sso/sso_provider_type.py +0 -0
  116. {workos-5.32.0 → workos-5.33.0}/workos/types/user_management/__init__.py +0 -0
  117. {workos-5.32.0 → workos-5.33.0}/workos/types/user_management/authenticate_with_common.py +0 -0
  118. {workos-5.32.0 → workos-5.33.0}/workos/types/user_management/authentication_response.py +0 -0
  119. {workos-5.32.0 → workos-5.33.0}/workos/types/user_management/email_verification.py +0 -0
  120. {workos-5.32.0 → workos-5.33.0}/workos/types/user_management/impersonator.py +0 -0
  121. {workos-5.32.0 → workos-5.33.0}/workos/types/user_management/invitation.py +0 -0
  122. {workos-5.32.0 → workos-5.33.0}/workos/types/user_management/list_filters.py +0 -0
  123. {workos-5.32.0 → workos-5.33.0}/workos/types/user_management/magic_auth.py +0 -0
  124. {workos-5.32.0 → workos-5.33.0}/workos/types/user_management/oauth_tokens.py +0 -0
  125. {workos-5.32.0 → workos-5.33.0}/workos/types/user_management/organization_membership.py +0 -0
  126. {workos-5.32.0 → workos-5.33.0}/workos/types/user_management/password_hash_type.py +0 -0
  127. {workos-5.32.0 → workos-5.33.0}/workos/types/user_management/password_reset.py +0 -0
  128. {workos-5.32.0 → workos-5.33.0}/workos/types/user_management/screen_hint.py +0 -0
  129. {workos-5.32.0 → workos-5.33.0}/workos/types/user_management/session.py +0 -0
  130. {workos-5.32.0 → workos-5.33.0}/workos/types/user_management/user.py +0 -0
  131. {workos-5.32.0 → workos-5.33.0}/workos/types/user_management/user_management_provider_type.py +0 -0
  132. {workos-5.32.0 → workos-5.33.0}/workos/types/vault/__init__.py +0 -0
  133. {workos-5.32.0 → workos-5.33.0}/workos/types/vault/key.py +0 -0
  134. {workos-5.32.0 → workos-5.33.0}/workos/types/vault/object.py +0 -0
  135. {workos-5.32.0 → workos-5.33.0}/workos/types/webhooks/__init__.py +0 -0
  136. {workos-5.32.0 → workos-5.33.0}/workos/types/webhooks/webhook.py +0 -0
  137. {workos-5.32.0 → workos-5.33.0}/workos/types/webhooks/webhook_model.py +0 -0
  138. {workos-5.32.0 → workos-5.33.0}/workos/types/webhooks/webhook_payload.py +0 -0
  139. {workos-5.32.0 → workos-5.33.0}/workos/types/widgets/__init__.py +0 -0
  140. {workos-5.32.0 → workos-5.33.0}/workos/types/widgets/widget_scope.py +0 -0
  141. {workos-5.32.0 → workos-5.33.0}/workos/types/widgets/widget_token_response.py +0 -0
  142. {workos-5.32.0 → workos-5.33.0}/workos/types/workos_model.py +0 -0
  143. {workos-5.32.0 → workos-5.33.0}/workos/typing/__init__.py +0 -0
  144. {workos-5.32.0 → workos-5.33.0}/workos/typing/literals.py +0 -0
  145. {workos-5.32.0 → workos-5.33.0}/workos/typing/sync_or_async.py +0 -0
  146. {workos-5.32.0 → workos-5.33.0}/workos/typing/untyped_literal.py +0 -0
  147. {workos-5.32.0 → workos-5.33.0}/workos/typing/webhooks.py +0 -0
  148. {workos-5.32.0 → workos-5.33.0}/workos/utils/__init__.py +0 -0
  149. {workos-5.32.0 → workos-5.33.0}/workos/utils/_base_http_client.py +0 -0
  150. {workos-5.32.0 → workos-5.33.0}/workos/utils/crypto_provider.py +0 -0
  151. {workos-5.32.0 → workos-5.33.0}/workos/utils/http_client.py +0 -0
  152. {workos-5.32.0 → workos-5.33.0}/workos/utils/pagination_order.py +0 -0
  153. {workos-5.32.0 → workos-5.33.0}/workos/utils/request_helper.py +0 -0
  154. {workos-5.32.0 → workos-5.33.0}/workos/vault.py +0 -0
  155. {workos-5.32.0 → workos-5.33.0}/workos/webhooks.py +0 -0
  156. {workos-5.32.0 → workos-5.33.0}/workos/widgets.py +0 -0
  157. {workos-5.32.0 → workos-5.33.0}/workos.egg-info/SOURCES.txt +0 -0
  158. {workos-5.32.0 → workos-5.33.0}/workos.egg-info/dependency_links.txt +0 -0
  159. {workos-5.32.0 → workos-5.33.0}/workos.egg-info/not-zip-safe +0 -0
  160. {workos-5.32.0 → workos-5.33.0}/workos.egg-info/requires.txt +0 -0
  161. {workos-5.32.0 → workos-5.33.0}/workos.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: workos
3
- Version: 5.32.0
3
+ Version: 5.33.0
4
4
  Summary: WorkOS Python Client
5
5
  Home-page: https://github.com/workos-inc/workos-python
6
6
  Author: WorkOS
@@ -1194,3 +1194,59 @@ class TestUserManagement(UserManagementFixtures):
1194
1194
  )
1195
1195
  assert request_kwargs["method"] == "post"
1196
1196
  assert isinstance(invitation, Invitation)
1197
+
1198
+ def test_resend_invitation(
1199
+ self, capture_and_mock_http_client_request, mock_invitation
1200
+ ):
1201
+ request_kwargs = capture_and_mock_http_client_request(
1202
+ self.http_client, mock_invitation, 200
1203
+ )
1204
+
1205
+ invitation = syncify(self.user_management.resend_invitation("invitation_ABCDE"))
1206
+
1207
+ assert request_kwargs["url"].endswith(
1208
+ "user_management/invitations/invitation_ABCDE/resend"
1209
+ )
1210
+ assert request_kwargs["method"] == "post"
1211
+ assert isinstance(invitation, Invitation)
1212
+ assert invitation.id == "invitation_ABCDE"
1213
+
1214
+ def test_resend_invitation_not_found(self, capture_and_mock_http_client_request):
1215
+ error_response = {
1216
+ "message": "Invitation not found",
1217
+ "code": "not_found",
1218
+ }
1219
+ capture_and_mock_http_client_request(self.http_client, error_response, 404)
1220
+
1221
+ with pytest.raises(Exception):
1222
+ syncify(self.user_management.resend_invitation("invitation_nonexistent"))
1223
+
1224
+ def test_resend_invitation_expired(self, capture_and_mock_http_client_request):
1225
+ error_response = {
1226
+ "message": "Invite has expired.",
1227
+ "code": "invite_expired",
1228
+ }
1229
+ capture_and_mock_http_client_request(self.http_client, error_response, 400)
1230
+
1231
+ with pytest.raises(Exception):
1232
+ syncify(self.user_management.resend_invitation("invitation_expired"))
1233
+
1234
+ def test_resend_invitation_revoked(self, capture_and_mock_http_client_request):
1235
+ error_response = {
1236
+ "message": "Invite has been revoked.",
1237
+ "code": "invite_revoked",
1238
+ }
1239
+ capture_and_mock_http_client_request(self.http_client, error_response, 400)
1240
+
1241
+ with pytest.raises(Exception):
1242
+ syncify(self.user_management.resend_invitation("invitation_revoked"))
1243
+
1244
+ def test_resend_invitation_accepted(self, capture_and_mock_http_client_request):
1245
+ error_response = {
1246
+ "message": "Invite has already been accepted.",
1247
+ "code": "invite_accepted",
1248
+ }
1249
+ capture_and_mock_http_client_request(self.http_client, error_response, 400)
1250
+
1251
+ with pytest.raises(Exception):
1252
+ syncify(self.user_management.resend_invitation("invitation_accepted"))
@@ -12,7 +12,7 @@ __package_name__ = "workos"
12
12
 
13
13
  __package_url__ = "https://github.com/workos-inc/workos-python"
14
14
 
15
- __version__ = "5.32.0"
15
+ __version__ = "5.33.0"
16
16
 
17
17
  __author__ = "WorkOS"
18
18
 
@@ -94,6 +94,7 @@ INVITATION_PATH = "user_management/invitations"
94
94
  INVITATION_DETAIL_PATH = "user_management/invitations/{0}"
95
95
  INVITATION_DETAIL_BY_TOKEN_PATH = "user_management/invitations/by_token/{0}"
96
96
  INVITATION_REVOKE_PATH = "user_management/invitations/{0}/revoke"
97
+ INVITATION_RESEND_PATH = "user_management/invitations/{0}/resend"
97
98
  PASSWORD_RESET_PATH = "user_management/password_reset"
98
99
  PASSWORD_RESET_DETAIL_PATH = "user_management/password_reset/{0}"
99
100
 
@@ -896,6 +897,17 @@ class UserManagementModule(Protocol):
896
897
  """
897
898
  ...
898
899
 
900
+ def resend_invitation(self, invitation_id: str) -> SyncOrAsync[Invitation]:
901
+ """Resends an existing Invitation.
902
+
903
+ Args:
904
+ invitation_id (str): The unique ID of the Invitation.
905
+
906
+ Returns:
907
+ Invitation: Invitation response from WorkOS.
908
+ """
909
+ ...
910
+
899
911
 
900
912
  class UserManagement(UserManagementModule):
901
913
  _http_client: SyncHTTPClient
@@ -1584,6 +1596,13 @@ class UserManagement(UserManagementModule):
1584
1596
 
1585
1597
  return Invitation.model_validate(response)
1586
1598
 
1599
+ def resend_invitation(self, invitation_id: str) -> Invitation:
1600
+ response = self._http_client.request(
1601
+ INVITATION_RESEND_PATH.format(invitation_id), method=REQUEST_METHOD_POST
1602
+ )
1603
+
1604
+ return Invitation.model_validate(response)
1605
+
1587
1606
 
1588
1607
  class AsyncUserManagement(UserManagementModule):
1589
1608
  _http_client: AsyncHTTPClient
@@ -2286,3 +2305,10 @@ class AsyncUserManagement(UserManagementModule):
2286
2305
  )
2287
2306
 
2288
2307
  return Invitation.model_validate(response)
2308
+
2309
+ async def resend_invitation(self, invitation_id: str) -> Invitation:
2310
+ response = await self._http_client.request(
2311
+ INVITATION_RESEND_PATH.format(invitation_id), method=REQUEST_METHOD_POST
2312
+ )
2313
+
2314
+ return Invitation.model_validate(response)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: workos
3
- Version: 5.32.0
3
+ Version: 5.33.0
4
4
  Summary: WorkOS Python Client
5
5
  Home-page: https://github.com/workos-inc/workos-python
6
6
  Author: WorkOS
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes