Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
* [#676](https://github.com/workos/workos-python/pull/676) fix(generated): regenerate from spec

**Fixes**
* **[organization_membership](https://workos.com/docs/reference/authkit/organization-membership)**:
* Added `roles` to organization membership models
2 changes: 1 addition & 1 deletion .last-synced-sha
Original file line number Diff line number Diff line change
@@ -1 +1 @@
b6a68da8bd60c1478e0a86ca97c75448677e8871
1a2f47b20f63f2c8f0eb56bbd2adb3b5947d693a
7 changes: 1 addition & 6 deletions src/workos/common/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
AuthenticateResponseAuthenticationMethod as AuthenticateResponseAuthenticationMethod,
)
from .models import AuthenticateResponseImpersonator as AuthenticateResponseImpersonator
from .models import * # noqa: F401,F403
from .models import AuthenticationChallenge as AuthenticationChallenge
from .models import (
AuthenticationEmailVerificationFailed as AuthenticationEmailVerificationFailed,
Expand Down Expand Up @@ -311,12 +312,6 @@
from .models import OrganizationDomainDataState as OrganizationDomainDataState
from .models import OrganizationDomainDeleted as OrganizationDomainDeleted
from .models import OrganizationDomainDeletedData as OrganizationDomainDeletedData
from .models import (
OrganizationDomainStandAloneState as OrganizationDomainStandAloneState,
)
from .models import (
OrganizationDomainStandAloneVerificationStrategy as OrganizationDomainStandAloneVerificationStrategy,
)
from .models import OrganizationDomainState as OrganizationDomainState
from .models import OrganizationDomainUpdated as OrganizationDomainUpdated
from .models import OrganizationDomainUpdatedData as OrganizationDomainUpdatedData
Expand Down
72 changes: 66 additions & 6 deletions src/workos/common/models/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
from .authenticate_response_impersonator import (
AuthenticateResponseImpersonator as AuthenticateResponseImpersonator,
)
from .authentication_radar_risk_detected_data_action import * # noqa: F401,F403
from .authentication_challenge import AuthenticationChallenge as AuthenticationChallenge
from .authentication_email_verification_failed import (
AuthenticationEmailVerificationFailed as AuthenticationEmailVerificationFailed,
Expand Down Expand Up @@ -221,6 +222,16 @@
ConnectedAccountAuthMethod as ConnectedAccountAuthMethod,
)
from .connected_account_state import ConnectedAccountState as ConnectedAccountState
from .connection_activated_data_connection_type import * # noqa: F401,F403
from .connection_activated_data_state import * # noqa: F401,F403
from .connection_activated_data_status import * # noqa: F401,F403
from .connection_deactivated_data_connection_type import * # noqa: F401,F403
from .connection_deactivated_data_state import * # noqa: F401,F403
from .connection_deactivated_data_status import * # noqa: F401,F403
from .connection_deleted_data_connection_type import * # noqa: F401,F403
from .connection_deleted_data_state import * # noqa: F401,F403
from .connection_saml_certificate_renewal_required_data_certificate_certificate_type import * # noqa: F401,F403
from .connection_saml_certificate_renewed_data_certificate_certificate_type import * # noqa: F401,F403
from .connection_activated import ConnectionActivated as ConnectionActivated
from .connection_activated_data import (
ConnectionActivatedData as ConnectionActivatedData,
Expand Down Expand Up @@ -291,6 +302,7 @@
from .data_integrations_list_response_data_ownership import (
DataIntegrationsListResponseDataOwnership as DataIntegrationsListResponseDataOwnership,
)
from .directory_user_state import * # noqa: F401,F403
from .directory_group import DirectoryGroup as DirectoryGroup
from .directory_state import DirectoryState as DirectoryState
from .directory_type import DirectoryType as DirectoryType
Expand All @@ -299,6 +311,11 @@
from .directory_user_with_groups_state import (
DirectoryUserWithGroupsState as DirectoryUserWithGroupsState,
)
from .dsync_activated_data_state import * # noqa: F401,F403
from .dsync_activated_data_type import * # noqa: F401,F403
from .dsync_deleted_data_state import * # noqa: F401,F403
from .dsync_deleted_data_type import * # noqa: F401,F403
from .dsync_user_updated_data_state import * # noqa: F401,F403
from .dsync_activated import DsyncActivated as DsyncActivated
from .dsync_activated_data import DsyncActivatedData as DsyncActivatedData
from .dsync_activated_data_domain import (
Expand Down Expand Up @@ -336,6 +353,7 @@
EmailVerificationCreatedData as EmailVerificationCreatedData,
)
from .error_response import ErrorResponse as ErrorResponse
from .event_context_actor_source import * # noqa: F401,F403
from .event_context import EventContext as EventContext
from .event_context_actor import EventContextActor as EventContextActor
from .event_context_google_analytics_session import (
Expand All @@ -344,6 +362,12 @@
from .feature_flag import FeatureFlag as FeatureFlag
from .feature_flag_owner import FeatureFlagOwner as FeatureFlagOwner
from .flag import Flag as Flag
from .flag_created_context_actor_source import * # noqa: F401,F403
from .flag_deleted_context_actor_source import * # noqa: F401,F403
from .flag_rule_updated_context_access_type import * # noqa: F401,F403
from .flag_rule_updated_context_actor_source import * # noqa: F401,F403
from .flag_rule_updated_context_previous_attribute_context_access_type import * # noqa: F401,F403
from .flag_updated_context_actor_source import * # noqa: F401,F403
from .flag_created import FlagCreated as FlagCreated
from .flag_created_context import FlagCreatedContext as FlagCreatedContext
from .flag_created_context_actor import (
Expand Down Expand Up @@ -417,6 +441,10 @@
from .group_member_removed import GroupMemberRemoved as GroupMemberRemoved
from .group_member_removed_data import GroupMemberRemovedData as GroupMemberRemovedData
from .group_updated import GroupUpdated as GroupUpdated
from .invitation_accepted_data_state import * # noqa: F401,F403
from .invitation_created_data_state import * # noqa: F401,F403
from .invitation_resent_data_state import * # noqa: F401,F403
from .invitation_revoked_data_state import * # noqa: F401,F403
from .invitation_accepted import InvitationAccepted as InvitationAccepted
from .invitation_accepted_data import InvitationAcceptedData as InvitationAcceptedData
from .invitation_created import InvitationCreated as InvitationCreated
Expand All @@ -429,6 +457,28 @@
from .list_metadata import ListMetadata as ListMetadata
from .magic_auth_created import MagicAuthCreated as MagicAuthCreated
from .magic_auth_created_data import MagicAuthCreatedData as MagicAuthCreatedData
from .organization_created_data_domain_state import * # noqa: F401,F403
from .organization_created_data_domain_verification_strategy import * # noqa: F401,F403
from .organization_deleted_data_domain_state import * # noqa: F401,F403
from .organization_deleted_data_domain_verification_strategy import * # noqa: F401,F403
from .organization_domain_created_data_state import * # noqa: F401,F403
from .organization_domain_created_data_verification_strategy import * # noqa: F401,F403
from .organization_domain_deleted_data_state import * # noqa: F401,F403
from .organization_domain_deleted_data_verification_strategy import * # noqa: F401,F403
from .organization_domain_stand_alone_state import * # noqa: F401,F403
from .organization_domain_stand_alone_verification_strategy import * # noqa: F401,F403
from .organization_domain_updated_data_state import * # noqa: F401,F403
from .organization_domain_updated_data_verification_strategy import * # noqa: F401,F403
from .organization_domain_verification_failed_data_organization_domain_state import * # noqa: F401,F403
from .organization_domain_verification_failed_data_organization_domain_verification_strategy import * # noqa: F401,F403
from .organization_domain_verification_failed_data_reason import * # noqa: F401,F403
from .organization_domain_verified_data_state import * # noqa: F401,F403
from .organization_domain_verified_data_verification_strategy import * # noqa: F401,F403
from .organization_membership_created_data_status import * # noqa: F401,F403
from .organization_membership_deleted_data_status import * # noqa: F401,F403
from .organization_membership_updated_data_status import * # noqa: F401,F403
from .organization_updated_data_domain_state import * # noqa: F401,F403
from .organization_updated_data_domain_verification_strategy import * # noqa: F401,F403
from .organization_created import OrganizationCreated as OrganizationCreated
from .organization_created_data import (
OrganizationCreatedData as OrganizationCreatedData,
Expand Down Expand Up @@ -459,12 +509,6 @@
from .organization_domain_deleted_data import (
OrganizationDomainDeletedData as OrganizationDomainDeletedData,
)
from .organization_domain_stand_alone_state import (
OrganizationDomainStandAloneState as OrganizationDomainStandAloneState,
)
from .organization_domain_stand_alone_verification_strategy import (
OrganizationDomainStandAloneVerificationStrategy as OrganizationDomainStandAloneVerificationStrategy,
)
from .organization_domain_state import (
OrganizationDomainState as OrganizationDomainState,
)
Expand Down Expand Up @@ -553,6 +597,7 @@
from .permission_deleted_data import PermissionDeletedData as PermissionDeletedData
from .permission_updated import PermissionUpdated as PermissionUpdated
from .permission_updated_data import PermissionUpdatedData as PermissionUpdatedData
from .pipe_connected_account_state import * # noqa: F401,F403
from .pipe_connected_account import PipeConnectedAccount as PipeConnectedAccount
from .pipes_connected_account_connected import (
PipesConnectedAccountConnected as PipesConnectedAccountConnected,
Expand Down Expand Up @@ -589,6 +634,10 @@
from .role_type import RoleType as RoleType
from .role_updated import RoleUpdated as RoleUpdated
from .role_updated_data import RoleUpdatedData as RoleUpdatedData
from .session_created_data_auth_method import * # noqa: F401,F403
from .session_created_data_status import * # noqa: F401,F403
from .session_revoked_data_auth_method import * # noqa: F401,F403
from .session_revoked_data_status import * # noqa: F401,F403
from .session_created import SessionCreated as SessionCreated
from .session_created_data import SessionCreatedData as SessionCreatedData
from .session_created_data_impersonator import (
Expand Down Expand Up @@ -641,6 +690,16 @@
from .user_sessions_list_item import UserSessionsListItem as UserSessionsListItem
from .user_sessions_status import UserSessionsStatus as UserSessionsStatus
from .user_updated import UserUpdated as UserUpdated
from .vault_byok_key_provider import * # noqa: F401,F403
from .vault_data_created_data_actor_source import * # noqa: F401,F403
from .vault_data_deleted_data_actor_source import * # noqa: F401,F403
from .vault_data_read_data_actor_source import * # noqa: F401,F403
from .vault_data_updated_data_actor_source import * # noqa: F401,F403
from .vault_dek_decrypted_data_actor_source import * # noqa: F401,F403
from .vault_dek_read_data_actor_source import * # noqa: F401,F403
from .vault_kek_created_data_actor_source import * # noqa: F401,F403
from .vault_metadata_read_data_actor_source import * # noqa: F401,F403
from .vault_names_listed_data_actor_source import * # noqa: F401,F403
from .vault_byok_key_deleted import VaultByokKeyDeleted as VaultByokKeyDeleted
from .vault_byok_key_deleted_data import (
VaultByokKeyDeletedData as VaultByokKeyDeletedData,
Expand Down Expand Up @@ -669,6 +728,7 @@
from .vault_metadata_read_data import VaultMetadataReadData as VaultMetadataReadData
from .vault_names_listed import VaultNamesListed as VaultNamesListed
from .vault_names_listed_data import VaultNamesListedData as VaultNamesListedData
from .waitlist_user_state import * # noqa: F401,F403
from .waitlist_user import WaitlistUser as WaitlistUser
from .waitlist_user_approved import WaitlistUserApproved as WaitlistUserApproved
from .waitlist_user_created import WaitlistUserCreated as WaitlistUserCreated
Expand Down
4 changes: 1 addition & 3 deletions src/workos/organization_domains/models/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,7 @@
from .create_organization_domain import (
CreateOrganizationDomain as CreateOrganizationDomain,
)
from .organization_domain_stand_alone import * # noqa: F401,F403
from workos.common.models.organization_domain import (
OrganizationDomain as OrganizationDomain,
)
from .organization_domain_stand_alone import (
OrganizationDomainStandAlone as OrganizationDomainStandAlone,
)
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from datetime import datetime
from enum import Enum
from typing import cast
from typing import Any, Dict, Literal, Optional
from typing import Any, Dict, List, Literal, Optional
from workos._types import _raise_deserialize_error
from workos._types import _format_datetime, _parse_datetime

Expand Down Expand Up @@ -39,6 +39,8 @@ class OrganizationMembership:
"""An ISO 8601 timestamp."""
role: "SlimRole"
"""The primary role assigned to the user within the organization."""
roles: List["SlimRole"]
"""The list of roles assigned to the user within the organization."""
user: "User"
"""The user that belongs to the organization through this membership."""
organization_name: Optional[str] = None
Expand All @@ -60,6 +62,10 @@ def from_dict(cls, data: Dict[str, Any]) -> "OrganizationMembership":
created_at=_parse_datetime(data["created_at"]),
updated_at=_parse_datetime(data["updated_at"]),
role=SlimRole.from_dict(cast(Dict[str, Any], data["role"])),
roles=[
SlimRole.from_dict(cast(Dict[str, Any], item))
for item in cast(list[Any], data["roles"])
],
Comment on lines +65 to +68

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Legacy Role Payloads Fail

When an existing membership response or mock payload still has only role, this required data["roles"] lookup raises during from_dict. The membership resource methods deserialize successful API responses through this path, so callers can receive an unexpected SDK error instead of an OrganizationMembership model.

Prompt To Fix With AI
This is a comment left during a code review.
Path: src/workos/organization_membership/models/organization_membership.py
Line: 65-68

Comment:
**Legacy Role Payloads Fail**

When an existing membership response or mock payload still has only `role`, this required `data["roles"]` lookup raises during `from_dict`. The membership resource methods deserialize successful API responses through this path, so callers can receive an unexpected SDK error instead of an `OrganizationMembership` model.

How can I resolve this? If you propose a fix, please make it concise.

user=User.from_dict(cast(Dict[str, Any], data["user"])),
organization_name=data.get("organization_name"),
custom_attributes=data.get("custom_attributes"),
Expand All @@ -81,6 +87,7 @@ def to_dict(self) -> Dict[str, Any]:
result["created_at"] = _format_datetime(self.created_at)
result["updated_at"] = _format_datetime(self.updated_at)
result["role"] = self.role.to_dict()
result["roles"] = [item.to_dict() for item in self.roles]
result["user"] = self.user.to_dict()
if self.organization_name is not None:
result["organization_name"] = self.organization_name
Expand Down
5 changes: 5 additions & 0 deletions tests/fixtures/list_user_organization_membership.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,11 @@
"role": {
"slug": "admin"
},
"roles": [
{
"slug": "admin"
}
],
"user": {
"object": "user",
"id": "user_01E4ZCR3C56J083X43JQXF3JK5",
Expand Down
5 changes: 5 additions & 0 deletions tests/fixtures/organization_membership.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,11 @@
"role": {
"slug": "admin"
},
"roles": [
{
"slug": "admin"
}
],
"user": {
"object": "user",
"id": "user_01E4ZCR3C56J083X43JQXF3JK5",
Expand Down
5 changes: 5 additions & 0 deletions tests/fixtures/user_organization_membership.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,11 @@
"role": {
"slug": "admin"
},
"roles": [
{
"slug": "admin"
}
],
"user": {
"object": "user",
"id": "user_01E4ZCR3C56J083X43JQXF3JK5",
Expand Down
Loading