Source code for arize.organizations.types

"""Public type re-exports and SDK-facing role types for the organizations subdomain."""

from typing import Annotated, Literal

from pydantic import BaseModel, Field, field_validator

from arize._generated.api_client.models.organization import Organization
from arize._generated.api_client.models.organization_custom_role_assignment import (
    OrganizationCustomRoleAssignment,
)
from arize._generated.api_client.models.organization_list_response import (
    OrganizationListResponse,
)
from arize._generated.api_client.models.organization_membership_input import (
    OrganizationMembershipInput,
)
from arize._generated.api_client.models.organization_predefined_role_assignment import (
    OrganizationPredefinedRoleAssignment,
)
from arize._generated.api_client.models.organization_role import (
    OrganizationRole,
)
from arize._generated.api_client.models.organization_role_assignment import (
    OrganizationRoleAssignment,
)


[docs] class PredefinedOrgRole(OrganizationPredefinedRoleAssignment): """A predefined organization role assignment. The ``type`` discriminator is set to ``"predefined"`` automatically. Args: name: The predefined role name (``"admin"``, ``"member"``, ``"read-only"``, or ``"annotator"``). """ type: Literal["predefined"] = "predefined" # type: ignore[assignment] def __str__(self) -> str: """Return the role name as a string.""" return self.name.value
[docs] class CustomOrgRole(OrganizationCustomRoleAssignment): """A custom RBAC role assignment for an organization. The ``type`` discriminator is set to ``"custom"`` automatically. Args: id: The unique identifier of the custom RBAC role. name: Human-readable name of the custom role (returned in responses only; ignored on input). """ type: Literal["custom"] = "custom" # type: ignore[assignment] def __str__(self) -> str: """Return the role name if available, otherwise the role id.""" return self.name if self.name is not None else self.id
_OrgRoleField = Annotated[ PredefinedOrgRole | CustomOrgRole, Field(discriminator="type"), ]
[docs] class OrganizationMembership(BaseModel): """An organization membership record with domain-typed role.""" id: str user_id: str organization_id: str role: _OrgRoleField @field_validator("role", mode="before") @classmethod def _coerce_role(cls, v: object) -> object: if isinstance(v, OrganizationRoleAssignment): actual = v.actual_instance if isinstance(actual, OrganizationPredefinedRoleAssignment): return PredefinedOrgRole(name=actual.name) if isinstance(actual, OrganizationCustomRoleAssignment): return CustomOrgRole(id=actual.id, name=actual.name) raise TypeError(f"Unknown org role type: {type(actual)!r}") return v
__all__ = [ "CustomOrgRole", "Organization", "OrganizationListResponse", "OrganizationMembership", "OrganizationMembershipInput", "OrganizationRole", "PredefinedOrgRole", ]