diff --git a/workos/resources/directory_sync.py b/workos/resources/directory_sync.py index 885492d6..a336ddde 100644 --- a/workos/resources/directory_sync.py +++ b/workos/resources/directory_sync.py @@ -1,7 +1,5 @@ from typing import List, Optional, Literal -from enum import Enum from workos.resources.workos_model import WorkOSModel -from workos.typing.enums import EnumOrUntyped from workos.typing.literals import LiteralOrUntyped DirectoryState = Literal[ diff --git a/workos/resources/list.py b/workos/resources/list.py index bee7cea9..6a479380 100644 --- a/workos/resources/list.py +++ b/workos/resources/list.py @@ -109,8 +109,14 @@ def auto_paging_iter(self): data = [] -# add all possible generics of List Resource -T = TypeVar("T", Organization, Directory, DirectoryGroup, DirectoryUser) +ListableResource = TypeVar( + # add all possible generics of List Resource + "ListableResource", + Organization, + Directory, + DirectoryGroup, + DirectoryUser, +) class ListMetadata(BaseModel): @@ -118,9 +124,9 @@ class ListMetadata(BaseModel): before: Optional[str] = None -class ListPage(BaseModel, Generic[T]): +class ListPage(BaseModel, Generic[ListableResource]): object: Literal["list"] - data: List[T] + data: List[ListableResource] list_metadata: ListMetadata @@ -134,17 +140,17 @@ class Config: extra = "allow" -class WorkOsListResource(BaseModel, Generic[T]): +class WorkOsListResource(BaseModel, Generic[ListableResource]): object: Literal["list"] - data: List[T] + data: List[ListableResource] list_metadata: ListMetadata # These fields end up exposed in the types. Does we care? list_method: Callable = Field(exclude=True) list_args: ListArgs = Field(exclude=True) - def auto_paging_iter(self) -> Iterator[T]: - next_page: WorkOsListResource[T] + def auto_paging_iter(self) -> Iterator[ListableResource]: + next_page: WorkOsListResource[ListableResource] after = self.list_metadata.after order = self.list_args.order diff --git a/workos/resources/organizations.py b/workos/resources/organizations.py index ec32eee5..4752ba46 100644 --- a/workos/resources/organizations.py +++ b/workos/resources/organizations.py @@ -5,7 +5,7 @@ class OrganizationDomain(WorkOSModel): id: str organization_id: str - object: Literal["organization"] + object: Literal["organization_domain"] verification_strategy: Literal["manual", "dns"] state: Literal["failed", "pending", "legacy_verified", "verified"] domain: str diff --git a/workos/typing/enums.py b/workos/typing/enums.py deleted file mode 100644 index d61e82b0..00000000 --- a/workos/typing/enums.py +++ /dev/null @@ -1,46 +0,0 @@ -from enum import Enum -from typing import Any, TypeVar, Union -from typing_extensions import Annotated -from pydantic import ( - Field, - ValidationError, - ValidationInfo, - ValidatorFunctionWrapHandler, - WrapValidator, -) -from workos.typing.untyped_literal import UntypedLiteral - - -EnumType = TypeVar("EnumType", bound=Enum) - - -def convert_unknown_enum_to_untyped_literal( - value: Any, handler: ValidatorFunctionWrapHandler, info: ValidationInfo -) -> Union[Enum, UntypedLiteral]: - try: - return handler(value) - except ValidationError as validation_error: - if validation_error.errors()[0]["type"] == "literal_error": - return handler(UntypedLiteral(value)) - else: - return handler(value) - - -def allow_unknown_enum_value( - value: Any, handler: ValidatorFunctionWrapHandler, info: ValidationInfo -) -> Union[Enum, str]: - try: - return handler(value) - except ValidationError as validation_error: - if validation_error.errors()[0]["type"] == "literal_error": - return value - else: - return handler(value) - - -EnumOrUntyped = Annotated[ - Annotated[Union[EnumType, UntypedLiteral], Field(union_mode="left_to_right")], - WrapValidator(convert_unknown_enum_to_untyped_literal), -] - -PermissiveEnum = Annotated[EnumType, WrapValidator(allow_unknown_enum_value)]