From c007bbed53fc0dde3a97b87f8b62b1f7c3a13968 Mon Sep 17 00:00:00 2001 From: Adam Jenkins Date: Sun, 1 Feb 2026 12:17:21 -0400 Subject: [PATCH 1/3] Add idp_attributes field to OrganizationMembership - Add idp_attributes: dict[str, Any] to OrganizationMembership model - Update MockOrganizationMembership fixture - All organization_membership tests pass This change adds support for IDP custom attributes on organization memberships, which are sourced from the identity provider and stored as customAttributes in the API. Related to workos/workos PR #50470 Co-Authored-By: Claude Sonnet 4.5 --- src/workos/types/user_management/organization_membership.py | 3 ++- tests/utils/fixtures/mock_organization_membership.py | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/workos/types/user_management/organization_membership.py b/src/workos/types/user_management/organization_membership.py index 0f944070..29dc182a 100644 --- a/src/workos/types/user_management/organization_membership.py +++ b/src/workos/types/user_management/organization_membership.py @@ -1,4 +1,4 @@ -from typing import Literal, Sequence, Optional +from typing import Any, Literal, Sequence, Optional from typing_extensions import TypedDict from workos.types.workos_model import WorkOSModel @@ -21,5 +21,6 @@ class OrganizationMembership(WorkOSModel): role: OrganizationMembershipRole roles: Optional[Sequence[OrganizationMembershipRole]] = None status: LiteralOrUntyped[OrganizationMembershipStatus] + idp_attributes: dict[str, Any] created_at: str updated_at: str diff --git a/tests/utils/fixtures/mock_organization_membership.py b/tests/utils/fixtures/mock_organization_membership.py index bc2ea29c..5f2b817a 100644 --- a/tests/utils/fixtures/mock_organization_membership.py +++ b/tests/utils/fixtures/mock_organization_membership.py @@ -13,6 +13,7 @@ def __init__(self, id): organization_id="org_67890", status="active", role={"slug": "member"}, + idp_attributes={}, created_at=now, updated_at=now, ) From 43c57e445b441fbd629323a2d218ac5c56f7349f Mon Sep 17 00:00:00 2001 From: Adam Jenkins Date: Sun, 1 Feb 2026 12:28:22 -0400 Subject: [PATCH 2/3] Fix Python 3.8 compatibility for idp_attributes type Use Dict[str, Any] instead of dict[str, Any] for Python 3.8 compatibility. The lowercase dict syntax is only available in Python 3.9+. Fixes issue identified by Greptile bot review. Co-Authored-By: Claude Sonnet 4.5 --- src/workos/types/user_management/organization_membership.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/workos/types/user_management/organization_membership.py b/src/workos/types/user_management/organization_membership.py index 29dc182a..4deeb921 100644 --- a/src/workos/types/user_management/organization_membership.py +++ b/src/workos/types/user_management/organization_membership.py @@ -1,4 +1,4 @@ -from typing import Any, Literal, Sequence, Optional +from typing import Any, Dict, Literal, Sequence, Optional from typing_extensions import TypedDict from workos.types.workos_model import WorkOSModel @@ -21,6 +21,6 @@ class OrganizationMembership(WorkOSModel): role: OrganizationMembershipRole roles: Optional[Sequence[OrganizationMembershipRole]] = None status: LiteralOrUntyped[OrganizationMembershipStatus] - idp_attributes: dict[str, Any] + idp_attributes: Dict[str, Any] created_at: str updated_at: str From 80e8e89cde93ae562680539179faae054484fa5f Mon Sep 17 00:00:00 2001 From: Adam Jenkins Date: Sun, 1 Feb 2026 20:05:13 -0400 Subject: [PATCH 3/3] Rename idp_attributes to custom_attributes --- src/workos/types/user_management/organization_membership.py | 2 +- tests/utils/fixtures/mock_organization_membership.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/workos/types/user_management/organization_membership.py b/src/workos/types/user_management/organization_membership.py index 4deeb921..2d00b839 100644 --- a/src/workos/types/user_management/organization_membership.py +++ b/src/workos/types/user_management/organization_membership.py @@ -21,6 +21,6 @@ class OrganizationMembership(WorkOSModel): role: OrganizationMembershipRole roles: Optional[Sequence[OrganizationMembershipRole]] = None status: LiteralOrUntyped[OrganizationMembershipStatus] - idp_attributes: Dict[str, Any] + custom_attributes: Dict[str, Any] created_at: str updated_at: str diff --git a/tests/utils/fixtures/mock_organization_membership.py b/tests/utils/fixtures/mock_organization_membership.py index 5f2b817a..b363b48b 100644 --- a/tests/utils/fixtures/mock_organization_membership.py +++ b/tests/utils/fixtures/mock_organization_membership.py @@ -13,7 +13,7 @@ def __init__(self, id): organization_id="org_67890", status="active", role={"slug": "member"}, - idp_attributes={}, + custom_attributes={}, created_at=now, updated_at=now, )