From a106ab0bef14b30d7aab7cade08147bb32567982 Mon Sep 17 00:00:00 2001 From: stainless-bot Date: Fri, 15 Nov 2024 01:16:00 +0000 Subject: [PATCH] feat(iam): fix model mappings --- api.md | 29 +-- src/cloudflare/resources/accounts/members.py | 78 ++++---- src/cloudflare/resources/accounts/roles.py | 27 ++- src/cloudflare/types/__init__.py | 2 + src/cloudflare/types/accounts/__init__.py | 6 - .../types/accounts/member_create_response.py | 167 ------------------ .../types/accounts/member_list_response.py | 167 ------------------ .../types/accounts/member_update_params.py | 10 +- .../types/accounts/member_update_response.py | 167 ------------------ .../types/accounts/role_list_response.py | 47 ----- src/cloudflare/types/shared/__init__.py | 2 + .../member.py} | 47 +---- .../role_get_response.py => shared/role.py} | 6 +- .../types/shared_params/__init__.py | 1 + src/cloudflare/types/shared_params/role.py | 12 ++ tests/api_resources/accounts/test_members.py | 93 +++++----- tests/api_resources/accounts/test_roles.py | 26 +-- 17 files changed, 144 insertions(+), 743 deletions(-) delete mode 100644 src/cloudflare/types/accounts/member_create_response.py delete mode 100644 src/cloudflare/types/accounts/member_list_response.py delete mode 100644 src/cloudflare/types/accounts/member_update_response.py delete mode 100644 src/cloudflare/types/accounts/role_list_response.py rename src/cloudflare/types/{accounts/member_get_response.py => shared/member.py} (76%) rename src/cloudflare/types/{accounts/role_get_response.py => shared/role.py} (87%) create mode 100644 src/cloudflare/types/shared_params/role.py diff --git a/api.md b/api.md index db446942c0c..e26b4e9da35 100644 --- a/api.md +++ b/api.md @@ -10,12 +10,14 @@ from cloudflare.types import ( ErrorData, Identifier, LoadBalancerPreview, + Member, PaginationInfo, Permission, PermissionGrant, RatePlan, ResponseInfo, Result, + Role, SortDirection, Subscription, SubscriptionComponent, @@ -44,36 +46,23 @@ Methods: Types: ```python -from cloudflare.types.accounts import ( - Status, - MemberCreateResponse, - MemberUpdateResponse, - MemberListResponse, - MemberDeleteResponse, - MemberGetResponse, -) +from cloudflare.types.accounts import Status, MemberDeleteResponse ``` Methods: -- client.accounts.members.create(\*, account_id, \*\*params) -> Optional -- client.accounts.members.update(member_id, \*, account_id, \*\*params) -> Optional -- client.accounts.members.list(\*, account_id, \*\*params) -> SyncV4PagePaginationArray[MemberListResponse] +- client.accounts.members.create(\*, account_id, \*\*params) -> Optional +- client.accounts.members.update(member_id, \*, account_id, \*\*params) -> Optional +- client.accounts.members.list(\*, account_id, \*\*params) -> SyncV4PagePaginationArray[Member] - client.accounts.members.delete(member_id, \*, account_id) -> Optional -- client.accounts.members.get(member_id, \*, account_id) -> Optional +- client.accounts.members.get(member_id, \*, account_id) -> Optional ## Roles -Types: - -```python -from cloudflare.types.accounts import RoleListResponse, RoleGetResponse -``` - Methods: -- client.accounts.roles.list(\*, account_id) -> SyncSinglePage[RoleListResponse] -- client.accounts.roles.get(role_id, \*, account_id) -> Optional +- client.accounts.roles.list(\*, account_id) -> SyncSinglePage[Role] +- client.accounts.roles.get(role_id, \*, account_id) -> Optional ## Subscriptions diff --git a/src/cloudflare/resources/accounts/members.py b/src/cloudflare/resources/accounts/members.py index 4eeb2856485..ed54745beb2 100644 --- a/src/cloudflare/resources/accounts/members.py +++ b/src/cloudflare/resources/accounts/members.py @@ -25,11 +25,9 @@ from ...pagination import SyncV4PagePaginationArray, AsyncV4PagePaginationArray from ..._base_client import AsyncPaginator, make_request_options from ...types.accounts import member_list_params, member_create_params, member_update_params -from ...types.accounts.member_get_response import MemberGetResponse -from ...types.accounts.member_list_response import MemberListResponse -from ...types.accounts.member_create_response import MemberCreateResponse +from ...types.shared.member import Member +from ...types.shared_params.role import Role from ...types.accounts.member_delete_response import MemberDeleteResponse -from ...types.accounts.member_update_response import MemberUpdateResponse __all__ = ["MembersResource", "AsyncMembersResource"] @@ -68,7 +66,7 @@ def create( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, - ) -> Optional[MemberCreateResponse]: + ) -> Optional[Member]: """ Add a user to the list of members for this account. @@ -103,7 +101,7 @@ def create( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, - ) -> Optional[MemberCreateResponse]: + ) -> Optional[Member]: """ Add a user to the list of members for this account. @@ -139,7 +137,7 @@ def create( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, - ) -> Optional[MemberCreateResponse]: + ) -> Optional[Member]: if not account_id: raise ValueError(f"Expected a non-empty value for `account_id` but received {account_id!r}") return self._post( @@ -158,9 +156,9 @@ def create( extra_query=extra_query, extra_body=extra_body, timeout=timeout, - post_parser=ResultWrapper[Optional[MemberCreateResponse]]._unwrapper, + post_parser=ResultWrapper[Optional[Member]]._unwrapper, ), - cast_to=cast(Type[Optional[MemberCreateResponse]], ResultWrapper[MemberCreateResponse]), + cast_to=cast(Type[Optional[Member]], ResultWrapper[Member]), ) @overload @@ -169,14 +167,14 @@ def update( member_id: str, *, account_id: str, - roles: Iterable[member_update_params.IAMUpdateMemberWithRolesRole] | NotGiven = NOT_GIVEN, + roles: Iterable[Role] | NotGiven = NOT_GIVEN, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, - ) -> Optional[MemberUpdateResponse]: + ) -> Optional[Member]: """ Modify an account member. @@ -210,7 +208,7 @@ def update( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, - ) -> Optional[MemberUpdateResponse]: + ) -> Optional[Member]: """ Modify an account member. @@ -237,7 +235,7 @@ def update( member_id: str, *, account_id: str, - roles: Iterable[member_update_params.IAMUpdateMemberWithRolesRole] | NotGiven = NOT_GIVEN, + roles: Iterable[Role] | NotGiven = NOT_GIVEN, policies: Iterable[member_update_params.IAMUpdateMemberWithPoliciesPolicy] | NotGiven = NOT_GIVEN, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. @@ -245,7 +243,7 @@ def update( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, - ) -> Optional[MemberUpdateResponse]: + ) -> Optional[Member]: if not account_id: raise ValueError(f"Expected a non-empty value for `account_id` but received {account_id!r}") if not member_id: @@ -264,9 +262,9 @@ def update( extra_query=extra_query, extra_body=extra_body, timeout=timeout, - post_parser=ResultWrapper[Optional[MemberUpdateResponse]]._unwrapper, + post_parser=ResultWrapper[Optional[Member]]._unwrapper, ), - cast_to=cast(Type[Optional[MemberUpdateResponse]], ResultWrapper[MemberUpdateResponse]), + cast_to=cast(Type[Optional[Member]], ResultWrapper[Member]), ) def list( @@ -284,7 +282,7 @@ def list( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, - ) -> SyncV4PagePaginationArray[MemberListResponse]: + ) -> SyncV4PagePaginationArray[Member]: """ List all members of an account. @@ -313,7 +311,7 @@ def list( raise ValueError(f"Expected a non-empty value for `account_id` but received {account_id!r}") return self._get_api_list( f"/accounts/{account_id}/members", - page=SyncV4PagePaginationArray[MemberListResponse], + page=SyncV4PagePaginationArray[Member], options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, @@ -330,7 +328,7 @@ def list( member_list_params.MemberListParams, ), ), - model=MemberListResponse, + model=Member, ) def delete( @@ -388,7 +386,7 @@ def get( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, - ) -> Optional[MemberGetResponse]: + ) -> Optional[Member]: """ Get information about a specific member of an account. @@ -416,9 +414,9 @@ def get( extra_query=extra_query, extra_body=extra_body, timeout=timeout, - post_parser=ResultWrapper[Optional[MemberGetResponse]]._unwrapper, + post_parser=ResultWrapper[Optional[Member]]._unwrapper, ), - cast_to=cast(Type[Optional[MemberGetResponse]], ResultWrapper[MemberGetResponse]), + cast_to=cast(Type[Optional[Member]], ResultWrapper[Member]), ) @@ -456,7 +454,7 @@ async def create( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, - ) -> Optional[MemberCreateResponse]: + ) -> Optional[Member]: """ Add a user to the list of members for this account. @@ -491,7 +489,7 @@ async def create( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, - ) -> Optional[MemberCreateResponse]: + ) -> Optional[Member]: """ Add a user to the list of members for this account. @@ -527,7 +525,7 @@ async def create( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, - ) -> Optional[MemberCreateResponse]: + ) -> Optional[Member]: if not account_id: raise ValueError(f"Expected a non-empty value for `account_id` but received {account_id!r}") return await self._post( @@ -546,9 +544,9 @@ async def create( extra_query=extra_query, extra_body=extra_body, timeout=timeout, - post_parser=ResultWrapper[Optional[MemberCreateResponse]]._unwrapper, + post_parser=ResultWrapper[Optional[Member]]._unwrapper, ), - cast_to=cast(Type[Optional[MemberCreateResponse]], ResultWrapper[MemberCreateResponse]), + cast_to=cast(Type[Optional[Member]], ResultWrapper[Member]), ) @overload @@ -557,14 +555,14 @@ async def update( member_id: str, *, account_id: str, - roles: Iterable[member_update_params.IAMUpdateMemberWithRolesRole] | NotGiven = NOT_GIVEN, + roles: Iterable[Role] | NotGiven = NOT_GIVEN, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, - ) -> Optional[MemberUpdateResponse]: + ) -> Optional[Member]: """ Modify an account member. @@ -598,7 +596,7 @@ async def update( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, - ) -> Optional[MemberUpdateResponse]: + ) -> Optional[Member]: """ Modify an account member. @@ -625,7 +623,7 @@ async def update( member_id: str, *, account_id: str, - roles: Iterable[member_update_params.IAMUpdateMemberWithRolesRole] | NotGiven = NOT_GIVEN, + roles: Iterable[Role] | NotGiven = NOT_GIVEN, policies: Iterable[member_update_params.IAMUpdateMemberWithPoliciesPolicy] | NotGiven = NOT_GIVEN, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. @@ -633,7 +631,7 @@ async def update( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, - ) -> Optional[MemberUpdateResponse]: + ) -> Optional[Member]: if not account_id: raise ValueError(f"Expected a non-empty value for `account_id` but received {account_id!r}") if not member_id: @@ -652,9 +650,9 @@ async def update( extra_query=extra_query, extra_body=extra_body, timeout=timeout, - post_parser=ResultWrapper[Optional[MemberUpdateResponse]]._unwrapper, + post_parser=ResultWrapper[Optional[Member]]._unwrapper, ), - cast_to=cast(Type[Optional[MemberUpdateResponse]], ResultWrapper[MemberUpdateResponse]), + cast_to=cast(Type[Optional[Member]], ResultWrapper[Member]), ) def list( @@ -672,7 +670,7 @@ def list( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, - ) -> AsyncPaginator[MemberListResponse, AsyncV4PagePaginationArray[MemberListResponse]]: + ) -> AsyncPaginator[Member, AsyncV4PagePaginationArray[Member]]: """ List all members of an account. @@ -701,7 +699,7 @@ def list( raise ValueError(f"Expected a non-empty value for `account_id` but received {account_id!r}") return self._get_api_list( f"/accounts/{account_id}/members", - page=AsyncV4PagePaginationArray[MemberListResponse], + page=AsyncV4PagePaginationArray[Member], options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, @@ -718,7 +716,7 @@ def list( member_list_params.MemberListParams, ), ), - model=MemberListResponse, + model=Member, ) async def delete( @@ -776,7 +774,7 @@ async def get( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, - ) -> Optional[MemberGetResponse]: + ) -> Optional[Member]: """ Get information about a specific member of an account. @@ -804,9 +802,9 @@ async def get( extra_query=extra_query, extra_body=extra_body, timeout=timeout, - post_parser=ResultWrapper[Optional[MemberGetResponse]]._unwrapper, + post_parser=ResultWrapper[Optional[Member]]._unwrapper, ), - cast_to=cast(Type[Optional[MemberGetResponse]], ResultWrapper[MemberGetResponse]), + cast_to=cast(Type[Optional[Member]], ResultWrapper[Member]), ) diff --git a/src/cloudflare/resources/accounts/roles.py b/src/cloudflare/resources/accounts/roles.py index 22520e505d0..1fcaa9c487c 100644 --- a/src/cloudflare/resources/accounts/roles.py +++ b/src/cloudflare/resources/accounts/roles.py @@ -18,8 +18,7 @@ from ..._wrappers import ResultWrapper from ...pagination import SyncSinglePage, AsyncSinglePage from ..._base_client import AsyncPaginator, make_request_options -from ...types.accounts.role_get_response import RoleGetResponse -from ...types.accounts.role_list_response import RoleListResponse +from ...types.shared.role import Role __all__ = ["RolesResource", "AsyncRolesResource"] @@ -54,7 +53,7 @@ def list( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, - ) -> SyncSinglePage[RoleListResponse]: + ) -> SyncSinglePage[Role]: """ Get all available roles for an account. @@ -73,11 +72,11 @@ def list( raise ValueError(f"Expected a non-empty value for `account_id` but received {account_id!r}") return self._get_api_list( f"/accounts/{account_id}/roles", - page=SyncSinglePage[RoleListResponse], + page=SyncSinglePage[Role], options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout ), - model=RoleListResponse, + model=Role, ) def get( @@ -91,7 +90,7 @@ def get( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, - ) -> Optional[RoleGetResponse]: + ) -> Optional[Role]: """ Get information about a specific role for an account. @@ -119,9 +118,9 @@ def get( extra_query=extra_query, extra_body=extra_body, timeout=timeout, - post_parser=ResultWrapper[Optional[RoleGetResponse]]._unwrapper, + post_parser=ResultWrapper[Optional[Role]]._unwrapper, ), - cast_to=cast(Type[Optional[RoleGetResponse]], ResultWrapper[RoleGetResponse]), + cast_to=cast(Type[Optional[Role]], ResultWrapper[Role]), ) @@ -155,7 +154,7 @@ def list( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, - ) -> AsyncPaginator[RoleListResponse, AsyncSinglePage[RoleListResponse]]: + ) -> AsyncPaginator[Role, AsyncSinglePage[Role]]: """ Get all available roles for an account. @@ -174,11 +173,11 @@ def list( raise ValueError(f"Expected a non-empty value for `account_id` but received {account_id!r}") return self._get_api_list( f"/accounts/{account_id}/roles", - page=AsyncSinglePage[RoleListResponse], + page=AsyncSinglePage[Role], options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout ), - model=RoleListResponse, + model=Role, ) async def get( @@ -192,7 +191,7 @@ async def get( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, - ) -> Optional[RoleGetResponse]: + ) -> Optional[Role]: """ Get information about a specific role for an account. @@ -220,9 +219,9 @@ async def get( extra_query=extra_query, extra_body=extra_body, timeout=timeout, - post_parser=ResultWrapper[Optional[RoleGetResponse]]._unwrapper, + post_parser=ResultWrapper[Optional[Role]]._unwrapper, ), - cast_to=cast(Type[Optional[RoleGetResponse]], ResultWrapper[RoleGetResponse]), + cast_to=cast(Type[Optional[Role]], ResultWrapper[Role]), ) diff --git a/src/cloudflare/types/__init__.py b/src/cloudflare/types/__init__.py index 3b9c7703182..a241fecb148 100644 --- a/src/cloudflare/types/__init__.py +++ b/src/cloudflare/types/__init__.py @@ -4,6 +4,8 @@ from .shared import ( ASN as ASN, + Role as Role, + Member as Member, Result as Result, AuditLog as AuditLog, RatePlan as RatePlan, diff --git a/src/cloudflare/types/accounts/__init__.py b/src/cloudflare/types/accounts/__init__.py index 62cafadbd86..af56c08969a 100644 --- a/src/cloudflare/types/accounts/__init__.py +++ b/src/cloudflare/types/accounts/__init__.py @@ -4,18 +4,14 @@ from .status import Status as Status from .account import Account as Account -from .role_get_response import RoleGetResponse as RoleGetResponse from .token_list_params import TokenListParams as TokenListParams from .member_list_params import MemberListParams as MemberListParams -from .role_list_response import RoleListResponse as RoleListResponse from .token_get_response import TokenGetResponse as TokenGetResponse from .account_list_params import AccountListParams as AccountListParams -from .member_get_response import MemberGetResponse as MemberGetResponse from .token_create_params import TokenCreateParams as TokenCreateParams from .token_list_response import TokenListResponse as TokenListResponse from .token_update_params import TokenUpdateParams as TokenUpdateParams from .member_create_params import MemberCreateParams as MemberCreateParams -from .member_list_response import MemberListResponse as MemberListResponse from .member_update_params import MemberUpdateParams as MemberUpdateParams from .account_create_params import AccountCreateParams as AccountCreateParams from .account_update_params import AccountUpdateParams as AccountUpdateParams @@ -23,9 +19,7 @@ from .token_delete_response import TokenDeleteResponse as TokenDeleteResponse from .token_update_response import TokenUpdateResponse as TokenUpdateResponse from .token_verify_response import TokenVerifyResponse as TokenVerifyResponse -from .member_create_response import MemberCreateResponse as MemberCreateResponse from .member_delete_response import MemberDeleteResponse as MemberDeleteResponse -from .member_update_response import MemberUpdateResponse as MemberUpdateResponse from .account_delete_response import AccountDeleteResponse as AccountDeleteResponse from .subscription_get_response import SubscriptionGetResponse as SubscriptionGetResponse from .subscription_create_params import SubscriptionCreateParams as SubscriptionCreateParams diff --git a/src/cloudflare/types/accounts/member_create_response.py b/src/cloudflare/types/accounts/member_create_response.py deleted file mode 100644 index b2417c2ca3f..00000000000 --- a/src/cloudflare/types/accounts/member_create_response.py +++ /dev/null @@ -1,167 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import List, Optional -from typing_extensions import Literal - -from ..._models import BaseModel -from ..shared.permission_grant import PermissionGrant - -__all__ = [ - "MemberCreateResponse", - "Policy", - "PolicyPermissionGroup", - "PolicyPermissionGroupMeta", - "PolicyResourceGroup", - "PolicyResourceGroupScope", - "PolicyResourceGroupScopeObject", - "PolicyResourceGroupMeta", - "Role", - "RolePermissions", - "User", -] - - -class PolicyPermissionGroupMeta(BaseModel): - key: Optional[str] = None - - value: Optional[str] = None - - -class PolicyPermissionGroup(BaseModel): - id: str - """Identifier of the group.""" - - meta: Optional[PolicyPermissionGroupMeta] = None - """Attributes associated to the permission group.""" - - name: Optional[str] = None - """Name of the group.""" - - -class PolicyResourceGroupScopeObject(BaseModel): - key: str - """ - This is a combination of pre-defined resource name and identifier (like Zone ID - etc.) - """ - - -class PolicyResourceGroupScope(BaseModel): - key: str - """ - This is a combination of pre-defined resource name and identifier (like Account - ID etc.) - """ - - objects: List[PolicyResourceGroupScopeObject] - """A list of scope objects for additional context.""" - - -class PolicyResourceGroupMeta(BaseModel): - key: Optional[str] = None - - value: Optional[str] = None - - -class PolicyResourceGroup(BaseModel): - id: str - """Identifier of the group.""" - - scope: List[PolicyResourceGroupScope] - """The scope associated to the resource group""" - - meta: Optional[PolicyResourceGroupMeta] = None - """Attributes associated to the resource group.""" - - name: Optional[str] = None - """Name of the resource group.""" - - -class Policy(BaseModel): - id: Optional[str] = None - """Policy identifier.""" - - access: Optional[Literal["allow", "deny"]] = None - """Allow or deny operations against the resources.""" - - permission_groups: Optional[List[PolicyPermissionGroup]] = None - """A set of permission groups that are specified to the policy.""" - - resource_groups: Optional[List[PolicyResourceGroup]] = None - """A list of resource groups that the policy applies to.""" - - -class RolePermissions(BaseModel): - analytics: Optional[PermissionGrant] = None - - billing: Optional[PermissionGrant] = None - - cache_purge: Optional[PermissionGrant] = None - - dns: Optional[PermissionGrant] = None - - dns_records: Optional[PermissionGrant] = None - - lb: Optional[PermissionGrant] = None - - logs: Optional[PermissionGrant] = None - - organization: Optional[PermissionGrant] = None - - ssl: Optional[PermissionGrant] = None - - waf: Optional[PermissionGrant] = None - - zone_settings: Optional[PermissionGrant] = None - - zones: Optional[PermissionGrant] = None - - -class Role(BaseModel): - id: str - """Role identifier tag.""" - - description: str - """Description of role's permissions.""" - - name: str - """Role name.""" - - permissions: RolePermissions - - -class User(BaseModel): - email: str - """The contact email address of the user.""" - - id: Optional[str] = None - """Identifier""" - - first_name: Optional[str] = None - """User's first name""" - - last_name: Optional[str] = None - """User's last name""" - - two_factor_authentication_enabled: Optional[bool] = None - """Indicates whether two-factor authentication is enabled for the user account. - - Does not apply to API authentication. - """ - - -class MemberCreateResponse(BaseModel): - id: Optional[str] = None - """Membership identifier tag.""" - - policies: Optional[List[Policy]] = None - """Access policy for the membership""" - - roles: Optional[List[Role]] = None - """Roles assigned to this Member.""" - - status: Optional[Literal["accepted", "pending"]] = None - """A member's status in the account.""" - - user: Optional[User] = None - """Details of the user associated to the membership.""" diff --git a/src/cloudflare/types/accounts/member_list_response.py b/src/cloudflare/types/accounts/member_list_response.py deleted file mode 100644 index afc8a984763..00000000000 --- a/src/cloudflare/types/accounts/member_list_response.py +++ /dev/null @@ -1,167 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import List, Optional -from typing_extensions import Literal - -from ..._models import BaseModel -from ..shared.permission_grant import PermissionGrant - -__all__ = [ - "MemberListResponse", - "Policy", - "PolicyPermissionGroup", - "PolicyPermissionGroupMeta", - "PolicyResourceGroup", - "PolicyResourceGroupScope", - "PolicyResourceGroupScopeObject", - "PolicyResourceGroupMeta", - "Role", - "RolePermissions", - "User", -] - - -class PolicyPermissionGroupMeta(BaseModel): - key: Optional[str] = None - - value: Optional[str] = None - - -class PolicyPermissionGroup(BaseModel): - id: str - """Identifier of the group.""" - - meta: Optional[PolicyPermissionGroupMeta] = None - """Attributes associated to the permission group.""" - - name: Optional[str] = None - """Name of the group.""" - - -class PolicyResourceGroupScopeObject(BaseModel): - key: str - """ - This is a combination of pre-defined resource name and identifier (like Zone ID - etc.) - """ - - -class PolicyResourceGroupScope(BaseModel): - key: str - """ - This is a combination of pre-defined resource name and identifier (like Account - ID etc.) - """ - - objects: List[PolicyResourceGroupScopeObject] - """A list of scope objects for additional context.""" - - -class PolicyResourceGroupMeta(BaseModel): - key: Optional[str] = None - - value: Optional[str] = None - - -class PolicyResourceGroup(BaseModel): - id: str - """Identifier of the group.""" - - scope: List[PolicyResourceGroupScope] - """The scope associated to the resource group""" - - meta: Optional[PolicyResourceGroupMeta] = None - """Attributes associated to the resource group.""" - - name: Optional[str] = None - """Name of the resource group.""" - - -class Policy(BaseModel): - id: Optional[str] = None - """Policy identifier.""" - - access: Optional[Literal["allow", "deny"]] = None - """Allow or deny operations against the resources.""" - - permission_groups: Optional[List[PolicyPermissionGroup]] = None - """A set of permission groups that are specified to the policy.""" - - resource_groups: Optional[List[PolicyResourceGroup]] = None - """A list of resource groups that the policy applies to.""" - - -class RolePermissions(BaseModel): - analytics: Optional[PermissionGrant] = None - - billing: Optional[PermissionGrant] = None - - cache_purge: Optional[PermissionGrant] = None - - dns: Optional[PermissionGrant] = None - - dns_records: Optional[PermissionGrant] = None - - lb: Optional[PermissionGrant] = None - - logs: Optional[PermissionGrant] = None - - organization: Optional[PermissionGrant] = None - - ssl: Optional[PermissionGrant] = None - - waf: Optional[PermissionGrant] = None - - zone_settings: Optional[PermissionGrant] = None - - zones: Optional[PermissionGrant] = None - - -class Role(BaseModel): - id: str - """Role identifier tag.""" - - description: str - """Description of role's permissions.""" - - name: str - """Role name.""" - - permissions: RolePermissions - - -class User(BaseModel): - email: str - """The contact email address of the user.""" - - id: Optional[str] = None - """Identifier""" - - first_name: Optional[str] = None - """User's first name""" - - last_name: Optional[str] = None - """User's last name""" - - two_factor_authentication_enabled: Optional[bool] = None - """Indicates whether two-factor authentication is enabled for the user account. - - Does not apply to API authentication. - """ - - -class MemberListResponse(BaseModel): - id: Optional[str] = None - """Membership identifier tag.""" - - policies: Optional[List[Policy]] = None - """Access policy for the membership""" - - roles: Optional[List[Role]] = None - """Roles assigned to this Member.""" - - status: Optional[Literal["accepted", "pending"]] = None - """A member's status in the account.""" - - user: Optional[User] = None - """Details of the user associated to the membership.""" diff --git a/src/cloudflare/types/accounts/member_update_params.py b/src/cloudflare/types/accounts/member_update_params.py index 92c4624483c..8993a363573 100644 --- a/src/cloudflare/types/accounts/member_update_params.py +++ b/src/cloudflare/types/accounts/member_update_params.py @@ -5,10 +5,11 @@ from typing import Union, Iterable from typing_extensions import Literal, Required, TypeAlias, TypedDict +from ..shared_params.role import Role + __all__ = [ "MemberUpdateParams", "IAMUpdateMemberWithRoles", - "IAMUpdateMemberWithRolesRole", "IAMUpdateMemberWithPolicies", "IAMUpdateMemberWithPoliciesPolicy", "IAMUpdateMemberWithPoliciesPolicyPermissionGroup", @@ -20,15 +21,10 @@ class IAMUpdateMemberWithRoles(TypedDict, total=False): account_id: Required[str] """Account identifier tag.""" - roles: Iterable[IAMUpdateMemberWithRolesRole] + roles: Iterable[Role] """Roles assigned to this member.""" -class IAMUpdateMemberWithRolesRole(TypedDict, total=False): - id: Required[str] - """Role identifier tag.""" - - class IAMUpdateMemberWithPolicies(TypedDict, total=False): account_id: Required[str] """Account identifier tag.""" diff --git a/src/cloudflare/types/accounts/member_update_response.py b/src/cloudflare/types/accounts/member_update_response.py deleted file mode 100644 index fce9bcf0ea1..00000000000 --- a/src/cloudflare/types/accounts/member_update_response.py +++ /dev/null @@ -1,167 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import List, Optional -from typing_extensions import Literal - -from ..._models import BaseModel -from ..shared.permission_grant import PermissionGrant - -__all__ = [ - "MemberUpdateResponse", - "Policy", - "PolicyPermissionGroup", - "PolicyPermissionGroupMeta", - "PolicyResourceGroup", - "PolicyResourceGroupScope", - "PolicyResourceGroupScopeObject", - "PolicyResourceGroupMeta", - "Role", - "RolePermissions", - "User", -] - - -class PolicyPermissionGroupMeta(BaseModel): - key: Optional[str] = None - - value: Optional[str] = None - - -class PolicyPermissionGroup(BaseModel): - id: str - """Identifier of the group.""" - - meta: Optional[PolicyPermissionGroupMeta] = None - """Attributes associated to the permission group.""" - - name: Optional[str] = None - """Name of the group.""" - - -class PolicyResourceGroupScopeObject(BaseModel): - key: str - """ - This is a combination of pre-defined resource name and identifier (like Zone ID - etc.) - """ - - -class PolicyResourceGroupScope(BaseModel): - key: str - """ - This is a combination of pre-defined resource name and identifier (like Account - ID etc.) - """ - - objects: List[PolicyResourceGroupScopeObject] - """A list of scope objects for additional context.""" - - -class PolicyResourceGroupMeta(BaseModel): - key: Optional[str] = None - - value: Optional[str] = None - - -class PolicyResourceGroup(BaseModel): - id: str - """Identifier of the group.""" - - scope: List[PolicyResourceGroupScope] - """The scope associated to the resource group""" - - meta: Optional[PolicyResourceGroupMeta] = None - """Attributes associated to the resource group.""" - - name: Optional[str] = None - """Name of the resource group.""" - - -class Policy(BaseModel): - id: Optional[str] = None - """Policy identifier.""" - - access: Optional[Literal["allow", "deny"]] = None - """Allow or deny operations against the resources.""" - - permission_groups: Optional[List[PolicyPermissionGroup]] = None - """A set of permission groups that are specified to the policy.""" - - resource_groups: Optional[List[PolicyResourceGroup]] = None - """A list of resource groups that the policy applies to.""" - - -class RolePermissions(BaseModel): - analytics: Optional[PermissionGrant] = None - - billing: Optional[PermissionGrant] = None - - cache_purge: Optional[PermissionGrant] = None - - dns: Optional[PermissionGrant] = None - - dns_records: Optional[PermissionGrant] = None - - lb: Optional[PermissionGrant] = None - - logs: Optional[PermissionGrant] = None - - organization: Optional[PermissionGrant] = None - - ssl: Optional[PermissionGrant] = None - - waf: Optional[PermissionGrant] = None - - zone_settings: Optional[PermissionGrant] = None - - zones: Optional[PermissionGrant] = None - - -class Role(BaseModel): - id: str - """Role identifier tag.""" - - description: str - """Description of role's permissions.""" - - name: str - """Role name.""" - - permissions: RolePermissions - - -class User(BaseModel): - email: str - """The contact email address of the user.""" - - id: Optional[str] = None - """Identifier""" - - first_name: Optional[str] = None - """User's first name""" - - last_name: Optional[str] = None - """User's last name""" - - two_factor_authentication_enabled: Optional[bool] = None - """Indicates whether two-factor authentication is enabled for the user account. - - Does not apply to API authentication. - """ - - -class MemberUpdateResponse(BaseModel): - id: Optional[str] = None - """Membership identifier tag.""" - - policies: Optional[List[Policy]] = None - """Access policy for the membership""" - - roles: Optional[List[Role]] = None - """Roles assigned to this Member.""" - - status: Optional[Literal["accepted", "pending"]] = None - """A member's status in the account.""" - - user: Optional[User] = None - """Details of the user associated to the membership.""" diff --git a/src/cloudflare/types/accounts/role_list_response.py b/src/cloudflare/types/accounts/role_list_response.py deleted file mode 100644 index a33e125a638..00000000000 --- a/src/cloudflare/types/accounts/role_list_response.py +++ /dev/null @@ -1,47 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import Optional - -from ..._models import BaseModel -from ..shared.permission_grant import PermissionGrant - -__all__ = ["RoleListResponse", "Permissions"] - - -class Permissions(BaseModel): - analytics: Optional[PermissionGrant] = None - - billing: Optional[PermissionGrant] = None - - cache_purge: Optional[PermissionGrant] = None - - dns: Optional[PermissionGrant] = None - - dns_records: Optional[PermissionGrant] = None - - lb: Optional[PermissionGrant] = None - - logs: Optional[PermissionGrant] = None - - organization: Optional[PermissionGrant] = None - - ssl: Optional[PermissionGrant] = None - - waf: Optional[PermissionGrant] = None - - zone_settings: Optional[PermissionGrant] = None - - zones: Optional[PermissionGrant] = None - - -class RoleListResponse(BaseModel): - id: str - """Role identifier tag.""" - - description: str - """Description of role's permissions.""" - - name: str - """Role name.""" - - permissions: Permissions diff --git a/src/cloudflare/types/shared/__init__.py b/src/cloudflare/types/shared/__init__.py index ed081cf82aa..6610a90e94f 100644 --- a/src/cloudflare/types/shared/__init__.py +++ b/src/cloudflare/types/shared/__init__.py @@ -1,6 +1,8 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. from .asn import ASN as ASN +from .role import Role as Role +from .member import Member as Member from .result import Result as Result from .audit_log import AuditLog as AuditLog from .rate_plan import RatePlan as RatePlan diff --git a/src/cloudflare/types/accounts/member_get_response.py b/src/cloudflare/types/shared/member.py similarity index 76% rename from src/cloudflare/types/accounts/member_get_response.py rename to src/cloudflare/types/shared/member.py index 83e2665af49..5391a7acbb1 100644 --- a/src/cloudflare/types/accounts/member_get_response.py +++ b/src/cloudflare/types/shared/member.py @@ -3,11 +3,11 @@ from typing import List, Optional from typing_extensions import Literal +from .role import Role from ..._models import BaseModel -from ..shared.permission_grant import PermissionGrant __all__ = [ - "MemberGetResponse", + "Member", "Policy", "PolicyPermissionGroup", "PolicyPermissionGroupMeta", @@ -15,8 +15,6 @@ "PolicyResourceGroupScope", "PolicyResourceGroupScopeObject", "PolicyResourceGroupMeta", - "Role", - "RolePermissions", "User", ] @@ -91,45 +89,6 @@ class Policy(BaseModel): """A list of resource groups that the policy applies to.""" -class RolePermissions(BaseModel): - analytics: Optional[PermissionGrant] = None - - billing: Optional[PermissionGrant] = None - - cache_purge: Optional[PermissionGrant] = None - - dns: Optional[PermissionGrant] = None - - dns_records: Optional[PermissionGrant] = None - - lb: Optional[PermissionGrant] = None - - logs: Optional[PermissionGrant] = None - - organization: Optional[PermissionGrant] = None - - ssl: Optional[PermissionGrant] = None - - waf: Optional[PermissionGrant] = None - - zone_settings: Optional[PermissionGrant] = None - - zones: Optional[PermissionGrant] = None - - -class Role(BaseModel): - id: str - """Role identifier tag.""" - - description: str - """Description of role's permissions.""" - - name: str - """Role name.""" - - permissions: RolePermissions - - class User(BaseModel): email: str """The contact email address of the user.""" @@ -150,7 +109,7 @@ class User(BaseModel): """ -class MemberGetResponse(BaseModel): +class Member(BaseModel): id: Optional[str] = None """Membership identifier tag.""" diff --git a/src/cloudflare/types/accounts/role_get_response.py b/src/cloudflare/types/shared/role.py similarity index 87% rename from src/cloudflare/types/accounts/role_get_response.py rename to src/cloudflare/types/shared/role.py index 71af9eff87a..24ee969f825 100644 --- a/src/cloudflare/types/accounts/role_get_response.py +++ b/src/cloudflare/types/shared/role.py @@ -3,9 +3,9 @@ from typing import Optional from ..._models import BaseModel -from ..shared.permission_grant import PermissionGrant +from .permission_grant import PermissionGrant -__all__ = ["RoleGetResponse", "Permissions"] +__all__ = ["Role", "Permissions"] class Permissions(BaseModel): @@ -34,7 +34,7 @@ class Permissions(BaseModel): zones: Optional[PermissionGrant] = None -class RoleGetResponse(BaseModel): +class Role(BaseModel): id: str """Role identifier tag.""" diff --git a/src/cloudflare/types/shared_params/__init__.py b/src/cloudflare/types/shared_params/__init__.py index 66613c1bc7b..420bb6540f2 100644 --- a/src/cloudflare/types/shared_params/__init__.py +++ b/src/cloudflare/types/shared_params/__init__.py @@ -1,6 +1,7 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. from .asn import ASN as ASN +from .role import Role as Role from .rate_plan import RatePlan as RatePlan from .certificate_ca import CertificateCA as CertificateCA from .sort_direction import SortDirection as SortDirection diff --git a/src/cloudflare/types/shared_params/role.py b/src/cloudflare/types/shared_params/role.py new file mode 100644 index 00000000000..87cc37b52b8 --- /dev/null +++ b/src/cloudflare/types/shared_params/role.py @@ -0,0 +1,12 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing_extensions import Required, TypedDict + +__all__ = ["Role"] + + +class Role(TypedDict, total=False): + id: Required[str] + """Role identifier tag.""" diff --git a/tests/api_resources/accounts/test_members.py b/tests/api_resources/accounts/test_members.py index b411cad9979..45da05c5186 100644 --- a/tests/api_resources/accounts/test_members.py +++ b/tests/api_resources/accounts/test_members.py @@ -10,12 +10,9 @@ from cloudflare import Cloudflare, AsyncCloudflare from tests.utils import assert_matches_type from cloudflare.pagination import SyncV4PagePaginationArray, AsyncV4PagePaginationArray +from cloudflare.types.shared import Member from cloudflare.types.accounts import ( - MemberGetResponse, - MemberListResponse, - MemberCreateResponse, MemberDeleteResponse, - MemberUpdateResponse, ) base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") @@ -36,7 +33,7 @@ def test_method_create_overload_1(self, client: Cloudflare) -> None: "3536bcfad5faccb999b47003c79917fb", ], ) - assert_matches_type(Optional[MemberCreateResponse], member, path=["response"]) + assert_matches_type(Optional[Member], member, path=["response"]) @pytest.mark.skip(reason="HTTP 422 error from prism") @parametrize @@ -51,7 +48,7 @@ def test_method_create_with_all_params_overload_1(self, client: Cloudflare) -> N ], status="accepted", ) - assert_matches_type(Optional[MemberCreateResponse], member, path=["response"]) + assert_matches_type(Optional[Member], member, path=["response"]) @pytest.mark.skip(reason="HTTP 422 error from prism") @parametrize @@ -69,7 +66,7 @@ def test_raw_response_create_overload_1(self, client: Cloudflare) -> None: assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" member = response.parse() - assert_matches_type(Optional[MemberCreateResponse], member, path=["response"]) + assert_matches_type(Optional[Member], member, path=["response"]) @pytest.mark.skip(reason="HTTP 422 error from prism") @parametrize @@ -87,7 +84,7 @@ def test_streaming_response_create_overload_1(self, client: Cloudflare) -> None: assert response.http_request.headers.get("X-Stainless-Lang") == "python" member = response.parse() - assert_matches_type(Optional[MemberCreateResponse], member, path=["response"]) + assert_matches_type(Optional[Member], member, path=["response"]) assert cast(Any, response.is_closed) is True @@ -150,7 +147,7 @@ def test_method_create_overload_2(self, client: Cloudflare) -> None: }, ], ) - assert_matches_type(Optional[MemberCreateResponse], member, path=["response"]) + assert_matches_type(Optional[Member], member, path=["response"]) @pytest.mark.skip(reason="HTTP 422 error from prism") @parametrize @@ -198,7 +195,7 @@ def test_method_create_with_all_params_overload_2(self, client: Cloudflare) -> N ], status="accepted", ) - assert_matches_type(Optional[MemberCreateResponse], member, path=["response"]) + assert_matches_type(Optional[Member], member, path=["response"]) @pytest.mark.skip(reason="HTTP 422 error from prism") @parametrize @@ -249,7 +246,7 @@ def test_raw_response_create_overload_2(self, client: Cloudflare) -> None: assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" member = response.parse() - assert_matches_type(Optional[MemberCreateResponse], member, path=["response"]) + assert_matches_type(Optional[Member], member, path=["response"]) @pytest.mark.skip(reason="HTTP 422 error from prism") @parametrize @@ -300,7 +297,7 @@ def test_streaming_response_create_overload_2(self, client: Cloudflare) -> None: assert response.http_request.headers.get("X-Stainless-Lang") == "python" member = response.parse() - assert_matches_type(Optional[MemberCreateResponse], member, path=["response"]) + assert_matches_type(Optional[Member], member, path=["response"]) assert cast(Any, response.is_closed) is True @@ -358,7 +355,7 @@ def test_method_update_overload_1(self, client: Cloudflare) -> None: member_id="4536bcfad5faccb111b47003c79917fa", account_id="eb78d65290b24279ba6f44721b3ea3c4", ) - assert_matches_type(Optional[MemberUpdateResponse], member, path=["response"]) + assert_matches_type(Optional[Member], member, path=["response"]) @pytest.mark.skip(reason="TODO: investigate broken test") @parametrize @@ -372,7 +369,7 @@ def test_method_update_with_all_params_overload_1(self, client: Cloudflare) -> N {"id": "3536bcfad5faccb999b47003c79917fb"}, ], ) - assert_matches_type(Optional[MemberUpdateResponse], member, path=["response"]) + assert_matches_type(Optional[Member], member, path=["response"]) @pytest.mark.skip(reason="TODO: investigate broken test") @parametrize @@ -385,7 +382,7 @@ def test_raw_response_update_overload_1(self, client: Cloudflare) -> None: assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" member = response.parse() - assert_matches_type(Optional[MemberUpdateResponse], member, path=["response"]) + assert_matches_type(Optional[Member], member, path=["response"]) @pytest.mark.skip(reason="TODO: investigate broken test") @parametrize @@ -398,7 +395,7 @@ def test_streaming_response_update_overload_1(self, client: Cloudflare) -> None: assert response.http_request.headers.get("X-Stainless-Lang") == "python" member = response.parse() - assert_matches_type(Optional[MemberUpdateResponse], member, path=["response"]) + assert_matches_type(Optional[Member], member, path=["response"]) assert cast(Any, response.is_closed) is True @@ -462,7 +459,7 @@ def test_method_update_overload_2(self, client: Cloudflare) -> None: }, ], ) - assert_matches_type(Optional[MemberUpdateResponse], member, path=["response"]) + assert_matches_type(Optional[Member], member, path=["response"]) @pytest.mark.skip(reason="TODO: investigate broken test") @parametrize @@ -513,7 +510,7 @@ def test_raw_response_update_overload_2(self, client: Cloudflare) -> None: assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" member = response.parse() - assert_matches_type(Optional[MemberUpdateResponse], member, path=["response"]) + assert_matches_type(Optional[Member], member, path=["response"]) @pytest.mark.skip(reason="TODO: investigate broken test") @parametrize @@ -564,7 +561,7 @@ def test_streaming_response_update_overload_2(self, client: Cloudflare) -> None: assert response.http_request.headers.get("X-Stainless-Lang") == "python" member = response.parse() - assert_matches_type(Optional[MemberUpdateResponse], member, path=["response"]) + assert_matches_type(Optional[Member], member, path=["response"]) assert cast(Any, response.is_closed) is True @@ -664,7 +661,7 @@ def test_method_list(self, client: Cloudflare) -> None: member = client.accounts.members.list( account_id="eb78d65290b24279ba6f44721b3ea3c4", ) - assert_matches_type(SyncV4PagePaginationArray[MemberListResponse], member, path=["response"]) + assert_matches_type(SyncV4PagePaginationArray[Member], member, path=["response"]) @parametrize def test_method_list_with_all_params(self, client: Cloudflare) -> None: @@ -676,7 +673,7 @@ def test_method_list_with_all_params(self, client: Cloudflare) -> None: per_page=5, status="accepted", ) - assert_matches_type(SyncV4PagePaginationArray[MemberListResponse], member, path=["response"]) + assert_matches_type(SyncV4PagePaginationArray[Member], member, path=["response"]) @parametrize def test_raw_response_list(self, client: Cloudflare) -> None: @@ -687,7 +684,7 @@ def test_raw_response_list(self, client: Cloudflare) -> None: assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" member = response.parse() - assert_matches_type(SyncV4PagePaginationArray[MemberListResponse], member, path=["response"]) + assert_matches_type(SyncV4PagePaginationArray[Member], member, path=["response"]) @parametrize def test_streaming_response_list(self, client: Cloudflare) -> None: @@ -698,7 +695,7 @@ def test_streaming_response_list(self, client: Cloudflare) -> None: assert response.http_request.headers.get("X-Stainless-Lang") == "python" member = response.parse() - assert_matches_type(SyncV4PagePaginationArray[MemberListResponse], member, path=["response"]) + assert_matches_type(SyncV4PagePaginationArray[Member], member, path=["response"]) assert cast(Any, response.is_closed) is True @@ -768,7 +765,7 @@ def test_method_get(self, client: Cloudflare) -> None: member_id="4536bcfad5faccb111b47003c79917fa", account_id="eb78d65290b24279ba6f44721b3ea3c4", ) - assert_matches_type(Optional[MemberGetResponse], member, path=["response"]) + assert_matches_type(Optional[Member], member, path=["response"]) @pytest.mark.skip(reason="HTTP 422 error from prism") @parametrize @@ -781,7 +778,7 @@ def test_raw_response_get(self, client: Cloudflare) -> None: assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" member = response.parse() - assert_matches_type(Optional[MemberGetResponse], member, path=["response"]) + assert_matches_type(Optional[Member], member, path=["response"]) @pytest.mark.skip(reason="HTTP 422 error from prism") @parametrize @@ -794,7 +791,7 @@ def test_streaming_response_get(self, client: Cloudflare) -> None: assert response.http_request.headers.get("X-Stainless-Lang") == "python" member = response.parse() - assert_matches_type(Optional[MemberGetResponse], member, path=["response"]) + assert_matches_type(Optional[Member], member, path=["response"]) assert cast(Any, response.is_closed) is True @@ -829,7 +826,7 @@ async def test_method_create_overload_1(self, async_client: AsyncCloudflare) -> "3536bcfad5faccb999b47003c79917fb", ], ) - assert_matches_type(Optional[MemberCreateResponse], member, path=["response"]) + assert_matches_type(Optional[Member], member, path=["response"]) @pytest.mark.skip(reason="HTTP 422 error from prism") @parametrize @@ -844,7 +841,7 @@ async def test_method_create_with_all_params_overload_1(self, async_client: Asyn ], status="accepted", ) - assert_matches_type(Optional[MemberCreateResponse], member, path=["response"]) + assert_matches_type(Optional[Member], member, path=["response"]) @pytest.mark.skip(reason="HTTP 422 error from prism") @parametrize @@ -862,7 +859,7 @@ async def test_raw_response_create_overload_1(self, async_client: AsyncCloudflar assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" member = await response.parse() - assert_matches_type(Optional[MemberCreateResponse], member, path=["response"]) + assert_matches_type(Optional[Member], member, path=["response"]) @pytest.mark.skip(reason="HTTP 422 error from prism") @parametrize @@ -880,7 +877,7 @@ async def test_streaming_response_create_overload_1(self, async_client: AsyncClo assert response.http_request.headers.get("X-Stainless-Lang") == "python" member = await response.parse() - assert_matches_type(Optional[MemberCreateResponse], member, path=["response"]) + assert_matches_type(Optional[Member], member, path=["response"]) assert cast(Any, response.is_closed) is True @@ -943,7 +940,7 @@ async def test_method_create_overload_2(self, async_client: AsyncCloudflare) -> }, ], ) - assert_matches_type(Optional[MemberCreateResponse], member, path=["response"]) + assert_matches_type(Optional[Member], member, path=["response"]) @pytest.mark.skip(reason="HTTP 422 error from prism") @parametrize @@ -991,7 +988,7 @@ async def test_method_create_with_all_params_overload_2(self, async_client: Asyn ], status="accepted", ) - assert_matches_type(Optional[MemberCreateResponse], member, path=["response"]) + assert_matches_type(Optional[Member], member, path=["response"]) @pytest.mark.skip(reason="HTTP 422 error from prism") @parametrize @@ -1042,7 +1039,7 @@ async def test_raw_response_create_overload_2(self, async_client: AsyncCloudflar assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" member = await response.parse() - assert_matches_type(Optional[MemberCreateResponse], member, path=["response"]) + assert_matches_type(Optional[Member], member, path=["response"]) @pytest.mark.skip(reason="HTTP 422 error from prism") @parametrize @@ -1093,7 +1090,7 @@ async def test_streaming_response_create_overload_2(self, async_client: AsyncClo assert response.http_request.headers.get("X-Stainless-Lang") == "python" member = await response.parse() - assert_matches_type(Optional[MemberCreateResponse], member, path=["response"]) + assert_matches_type(Optional[Member], member, path=["response"]) assert cast(Any, response.is_closed) is True @@ -1151,7 +1148,7 @@ async def test_method_update_overload_1(self, async_client: AsyncCloudflare) -> member_id="4536bcfad5faccb111b47003c79917fa", account_id="eb78d65290b24279ba6f44721b3ea3c4", ) - assert_matches_type(Optional[MemberUpdateResponse], member, path=["response"]) + assert_matches_type(Optional[Member], member, path=["response"]) @pytest.mark.skip(reason="TODO: investigate broken test") @parametrize @@ -1165,7 +1162,7 @@ async def test_method_update_with_all_params_overload_1(self, async_client: Asyn {"id": "3536bcfad5faccb999b47003c79917fb"}, ], ) - assert_matches_type(Optional[MemberUpdateResponse], member, path=["response"]) + assert_matches_type(Optional[Member], member, path=["response"]) @pytest.mark.skip(reason="TODO: investigate broken test") @parametrize @@ -1178,7 +1175,7 @@ async def test_raw_response_update_overload_1(self, async_client: AsyncCloudflar assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" member = await response.parse() - assert_matches_type(Optional[MemberUpdateResponse], member, path=["response"]) + assert_matches_type(Optional[Member], member, path=["response"]) @pytest.mark.skip(reason="TODO: investigate broken test") @parametrize @@ -1191,7 +1188,7 @@ async def test_streaming_response_update_overload_1(self, async_client: AsyncClo assert response.http_request.headers.get("X-Stainless-Lang") == "python" member = await response.parse() - assert_matches_type(Optional[MemberUpdateResponse], member, path=["response"]) + assert_matches_type(Optional[Member], member, path=["response"]) assert cast(Any, response.is_closed) is True @@ -1255,7 +1252,7 @@ async def test_method_update_overload_2(self, async_client: AsyncCloudflare) -> }, ], ) - assert_matches_type(Optional[MemberUpdateResponse], member, path=["response"]) + assert_matches_type(Optional[Member], member, path=["response"]) @pytest.mark.skip(reason="TODO: investigate broken test") @parametrize @@ -1306,7 +1303,7 @@ async def test_raw_response_update_overload_2(self, async_client: AsyncCloudflar assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" member = await response.parse() - assert_matches_type(Optional[MemberUpdateResponse], member, path=["response"]) + assert_matches_type(Optional[Member], member, path=["response"]) @pytest.mark.skip(reason="TODO: investigate broken test") @parametrize @@ -1357,7 +1354,7 @@ async def test_streaming_response_update_overload_2(self, async_client: AsyncClo assert response.http_request.headers.get("X-Stainless-Lang") == "python" member = await response.parse() - assert_matches_type(Optional[MemberUpdateResponse], member, path=["response"]) + assert_matches_type(Optional[Member], member, path=["response"]) assert cast(Any, response.is_closed) is True @@ -1457,7 +1454,7 @@ async def test_method_list(self, async_client: AsyncCloudflare) -> None: member = await async_client.accounts.members.list( account_id="eb78d65290b24279ba6f44721b3ea3c4", ) - assert_matches_type(AsyncV4PagePaginationArray[MemberListResponse], member, path=["response"]) + assert_matches_type(AsyncV4PagePaginationArray[Member], member, path=["response"]) @parametrize async def test_method_list_with_all_params(self, async_client: AsyncCloudflare) -> None: @@ -1469,7 +1466,7 @@ async def test_method_list_with_all_params(self, async_client: AsyncCloudflare) per_page=5, status="accepted", ) - assert_matches_type(AsyncV4PagePaginationArray[MemberListResponse], member, path=["response"]) + assert_matches_type(AsyncV4PagePaginationArray[Member], member, path=["response"]) @parametrize async def test_raw_response_list(self, async_client: AsyncCloudflare) -> None: @@ -1480,7 +1477,7 @@ async def test_raw_response_list(self, async_client: AsyncCloudflare) -> None: assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" member = await response.parse() - assert_matches_type(AsyncV4PagePaginationArray[MemberListResponse], member, path=["response"]) + assert_matches_type(AsyncV4PagePaginationArray[Member], member, path=["response"]) @parametrize async def test_streaming_response_list(self, async_client: AsyncCloudflare) -> None: @@ -1491,7 +1488,7 @@ async def test_streaming_response_list(self, async_client: AsyncCloudflare) -> N assert response.http_request.headers.get("X-Stainless-Lang") == "python" member = await response.parse() - assert_matches_type(AsyncV4PagePaginationArray[MemberListResponse], member, path=["response"]) + assert_matches_type(AsyncV4PagePaginationArray[Member], member, path=["response"]) assert cast(Any, response.is_closed) is True @@ -1561,7 +1558,7 @@ async def test_method_get(self, async_client: AsyncCloudflare) -> None: member_id="4536bcfad5faccb111b47003c79917fa", account_id="eb78d65290b24279ba6f44721b3ea3c4", ) - assert_matches_type(Optional[MemberGetResponse], member, path=["response"]) + assert_matches_type(Optional[Member], member, path=["response"]) @pytest.mark.skip(reason="HTTP 422 error from prism") @parametrize @@ -1574,7 +1571,7 @@ async def test_raw_response_get(self, async_client: AsyncCloudflare) -> None: assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" member = await response.parse() - assert_matches_type(Optional[MemberGetResponse], member, path=["response"]) + assert_matches_type(Optional[Member], member, path=["response"]) @pytest.mark.skip(reason="HTTP 422 error from prism") @parametrize @@ -1587,7 +1584,7 @@ async def test_streaming_response_get(self, async_client: AsyncCloudflare) -> No assert response.http_request.headers.get("X-Stainless-Lang") == "python" member = await response.parse() - assert_matches_type(Optional[MemberGetResponse], member, path=["response"]) + assert_matches_type(Optional[Member], member, path=["response"]) assert cast(Any, response.is_closed) is True diff --git a/tests/api_resources/accounts/test_roles.py b/tests/api_resources/accounts/test_roles.py index dee54072f7b..95df57ae04f 100644 --- a/tests/api_resources/accounts/test_roles.py +++ b/tests/api_resources/accounts/test_roles.py @@ -10,7 +10,7 @@ from cloudflare import Cloudflare, AsyncCloudflare from tests.utils import assert_matches_type from cloudflare.pagination import SyncSinglePage, AsyncSinglePage -from cloudflare.types.accounts import RoleGetResponse, RoleListResponse +from cloudflare.types.shared import Role base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") @@ -23,7 +23,7 @@ def test_method_list(self, client: Cloudflare) -> None: role = client.accounts.roles.list( account_id="eb78d65290b24279ba6f44721b3ea3c4", ) - assert_matches_type(SyncSinglePage[RoleListResponse], role, path=["response"]) + assert_matches_type(SyncSinglePage[Role], role, path=["response"]) @parametrize def test_raw_response_list(self, client: Cloudflare) -> None: @@ -34,7 +34,7 @@ def test_raw_response_list(self, client: Cloudflare) -> None: assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" role = response.parse() - assert_matches_type(SyncSinglePage[RoleListResponse], role, path=["response"]) + assert_matches_type(SyncSinglePage[Role], role, path=["response"]) @parametrize def test_streaming_response_list(self, client: Cloudflare) -> None: @@ -45,7 +45,7 @@ def test_streaming_response_list(self, client: Cloudflare) -> None: assert response.http_request.headers.get("X-Stainless-Lang") == "python" role = response.parse() - assert_matches_type(SyncSinglePage[RoleListResponse], role, path=["response"]) + assert_matches_type(SyncSinglePage[Role], role, path=["response"]) assert cast(Any, response.is_closed) is True @@ -62,7 +62,7 @@ def test_method_get(self, client: Cloudflare) -> None: role_id="3536bcfad5faccb999b47003c79917fb", account_id="eb78d65290b24279ba6f44721b3ea3c4", ) - assert_matches_type(Optional[RoleGetResponse], role, path=["response"]) + assert_matches_type(Optional[Role], role, path=["response"]) @parametrize def test_raw_response_get(self, client: Cloudflare) -> None: @@ -74,7 +74,7 @@ def test_raw_response_get(self, client: Cloudflare) -> None: assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" role = response.parse() - assert_matches_type(Optional[RoleGetResponse], role, path=["response"]) + assert_matches_type(Optional[Role], role, path=["response"]) @parametrize def test_streaming_response_get(self, client: Cloudflare) -> None: @@ -86,7 +86,7 @@ def test_streaming_response_get(self, client: Cloudflare) -> None: assert response.http_request.headers.get("X-Stainless-Lang") == "python" role = response.parse() - assert_matches_type(Optional[RoleGetResponse], role, path=["response"]) + assert_matches_type(Optional[Role], role, path=["response"]) assert cast(Any, response.is_closed) is True @@ -113,7 +113,7 @@ async def test_method_list(self, async_client: AsyncCloudflare) -> None: role = await async_client.accounts.roles.list( account_id="eb78d65290b24279ba6f44721b3ea3c4", ) - assert_matches_type(AsyncSinglePage[RoleListResponse], role, path=["response"]) + assert_matches_type(AsyncSinglePage[Role], role, path=["response"]) @parametrize async def test_raw_response_list(self, async_client: AsyncCloudflare) -> None: @@ -124,7 +124,7 @@ async def test_raw_response_list(self, async_client: AsyncCloudflare) -> None: assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" role = await response.parse() - assert_matches_type(AsyncSinglePage[RoleListResponse], role, path=["response"]) + assert_matches_type(AsyncSinglePage[Role], role, path=["response"]) @parametrize async def test_streaming_response_list(self, async_client: AsyncCloudflare) -> None: @@ -135,7 +135,7 @@ async def test_streaming_response_list(self, async_client: AsyncCloudflare) -> N assert response.http_request.headers.get("X-Stainless-Lang") == "python" role = await response.parse() - assert_matches_type(AsyncSinglePage[RoleListResponse], role, path=["response"]) + assert_matches_type(AsyncSinglePage[Role], role, path=["response"]) assert cast(Any, response.is_closed) is True @@ -152,7 +152,7 @@ async def test_method_get(self, async_client: AsyncCloudflare) -> None: role_id="3536bcfad5faccb999b47003c79917fb", account_id="eb78d65290b24279ba6f44721b3ea3c4", ) - assert_matches_type(Optional[RoleGetResponse], role, path=["response"]) + assert_matches_type(Optional[Role], role, path=["response"]) @parametrize async def test_raw_response_get(self, async_client: AsyncCloudflare) -> None: @@ -164,7 +164,7 @@ async def test_raw_response_get(self, async_client: AsyncCloudflare) -> None: assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" role = await response.parse() - assert_matches_type(Optional[RoleGetResponse], role, path=["response"]) + assert_matches_type(Optional[Role], role, path=["response"]) @parametrize async def test_streaming_response_get(self, async_client: AsyncCloudflare) -> None: @@ -176,7 +176,7 @@ async def test_streaming_response_get(self, async_client: AsyncCloudflare) -> No assert response.http_request.headers.get("X-Stainless-Lang") == "python" role = await response.parse() - assert_matches_type(Optional[RoleGetResponse], role, path=["response"]) + assert_matches_type(Optional[Role], role, path=["response"]) assert cast(Any, response.is_closed) is True