diff --git a/.codegen.json b/.codegen.json index 778c6acc3..8082af814 100644 --- a/.codegen.json +++ b/.codegen.json @@ -1 +1 @@ -{ "engineHash": "ef443c1", "specHash": "99e14a6", "version": "0.1.0" } +{ "engineHash": "54ce521", "specHash": "623b811", "version": "0.1.0" } diff --git a/box_sdk_gen/client.py b/box_sdk_gen/client.py index b49eebb45..9d5c34948 100644 --- a/box_sdk_gen/client.py +++ b/box_sdk_gen/client.py @@ -182,6 +182,8 @@ from box_sdk_gen.managers.archives import ArchivesManager +from box_sdk_gen.managers.external_users import ExternalUsersManager + from box_sdk_gen.networking.auth import Authentication from box_sdk_gen.networking.network import NetworkSession @@ -440,6 +442,9 @@ def __init__(self, auth: Authentication, *, network_session: NetworkSession = No self.archives = ArchivesManager( auth=self.auth, network_session=self.network_session ) + self.external_users = ExternalUsersManager( + auth=self.auth, network_session=self.network_session + ) def make_request(self, fetch_options: FetchOptions) -> FetchResponse: """ diff --git a/box_sdk_gen/managers/__init__.py b/box_sdk_gen/managers/__init__.py index d5a840f81..f3a23b7fb 100644 --- a/box_sdk_gen/managers/__init__.py +++ b/box_sdk_gen/managers/__init__.py @@ -155,3 +155,5 @@ from box_sdk_gen.managers.shield_lists import * from box_sdk_gen.managers.archives import * + +from box_sdk_gen.managers.external_users import * diff --git a/box_sdk_gen/managers/external_users.py b/box_sdk_gen/managers/external_users.py new file mode 100644 index 000000000..fdbdb8c49 --- /dev/null +++ b/box_sdk_gen/managers/external_users.py @@ -0,0 +1,106 @@ +from typing import Optional + +from typing import List + +from typing import Dict + +from box_sdk_gen.internal.utils import to_string + +from box_sdk_gen.serialization.json import serialize + +from box_sdk_gen.serialization.json import deserialize + +from box_sdk_gen.schemas.v2025_r0.user_reference_v2025_r0 import UserReferenceV2025R0 + +from box_sdk_gen.networking.fetch_options import ResponseFormat + +from box_sdk_gen.schemas.v2025_r0.external_users_submit_delete_job_response_v2025_r0 import ( + ExternalUsersSubmitDeleteJobResponseV2025R0, +) + +from box_sdk_gen.schemas.v2025_r0.client_error_v2025_r0 import ClientErrorV2025R0 + +from box_sdk_gen.parameters.v2025_r0.box_version_header_v2025_r0 import ( + BoxVersionHeaderV2025R0, +) + +from box_sdk_gen.schemas.v2025_r0.external_users_submit_delete_job_request_v2025_r0 import ( + ExternalUsersSubmitDeleteJobRequestV2025R0, +) + +from box_sdk_gen.box.errors import BoxSDKError + +from box_sdk_gen.networking.auth import Authentication + +from box_sdk_gen.networking.network import NetworkSession + +from box_sdk_gen.networking.fetch_options import FetchOptions + +from box_sdk_gen.networking.fetch_response import FetchResponse + +from box_sdk_gen.internal.utils import prepare_params + +from box_sdk_gen.internal.utils import to_string + +from box_sdk_gen.internal.utils import ByteStream + +from box_sdk_gen.serialization.json import sd_to_json + +from box_sdk_gen.serialization.json import SerializedData + + +class ExternalUsersManager: + def __init__( + self, + *, + auth: Optional[Authentication] = None, + network_session: NetworkSession = None + ): + if network_session is None: + network_session = NetworkSession() + self.auth = auth + self.network_session = network_session + + def create_external_user_submit_delete_job_v2025_r0( + self, + external_users: List[UserReferenceV2025R0], + *, + box_version: BoxVersionHeaderV2025R0 = BoxVersionHeaderV2025R0._2025_0, + extra_headers: Optional[Dict[str, Optional[str]]] = None + ) -> ExternalUsersSubmitDeleteJobResponseV2025R0: + """ + Delete external users from current user enterprise. This will remove each + + external user from all invited collaborations within the current enterprise. + + :param external_users: List of external users to delete. + :type external_users: List[UserReferenceV2025R0] + :param box_version: Version header., defaults to BoxVersionHeaderV2025R0._2025_0 + :type box_version: BoxVersionHeaderV2025R0, optional + :param extra_headers: Extra headers that will be included in the HTTP request., defaults to None + :type extra_headers: Optional[Dict[str, Optional[str]]], optional + """ + if extra_headers is None: + extra_headers = {} + request_body: Dict = {'external_users': external_users} + headers_map: Dict[str, str] = prepare_params( + {'box-version': to_string(box_version), **extra_headers} + ) + response: FetchResponse = self.network_session.network_client.fetch( + FetchOptions( + url=''.join( + [ + self.network_session.base_urls.base_url, + '/2.0/external_users/submit_delete_job', + ] + ), + method='POST', + headers=headers_map, + data=serialize(request_body), + content_type='application/json', + response_format=ResponseFormat.JSON, + auth=self.auth, + network_session=self.network_session, + ) + ) + return deserialize(response.data, ExternalUsersSubmitDeleteJobResponseV2025R0) diff --git a/box_sdk_gen/schemas/v2025_r0/__init__.py b/box_sdk_gen/schemas/v2025_r0/__init__.py index 5c88bfc00..b5405a205 100644 --- a/box_sdk_gen/schemas/v2025_r0/__init__.py +++ b/box_sdk_gen/schemas/v2025_r0/__init__.py @@ -18,6 +18,10 @@ from box_sdk_gen.schemas.v2025_r0.enterprise_reference_v2025_r0 import * +from box_sdk_gen.schemas.v2025_r0.external_user_deletion_result_v2025_r0 import * + +from box_sdk_gen.schemas.v2025_r0.external_users_submit_delete_job_response_v2025_r0 import * + from box_sdk_gen.schemas.v2025_r0.file_reference_v2025_r0 import * from box_sdk_gen.schemas.v2025_r0.doc_gen_template_create_request_v2025_r0 import * @@ -104,6 +108,10 @@ from box_sdk_gen.schemas.v2025_r0.doc_gen_jobs_full_v2025_r0 import * +from box_sdk_gen.schemas.v2025_r0.user_reference_v2025_r0 import * + +from box_sdk_gen.schemas.v2025_r0.external_users_submit_delete_job_request_v2025_r0 import * + from box_sdk_gen.schemas.v2025_r0.weblink_reference_v2025_r0 import * from box_sdk_gen.schemas.v2025_r0.hub_item_reference_v2025_r0 import * diff --git a/box_sdk_gen/schemas/v2025_r0/external_user_deletion_result_v2025_r0.py b/box_sdk_gen/schemas/v2025_r0/external_user_deletion_result_v2025_r0.py new file mode 100644 index 000000000..c452fced0 --- /dev/null +++ b/box_sdk_gen/schemas/v2025_r0/external_user_deletion_result_v2025_r0.py @@ -0,0 +1,23 @@ +from typing import Optional + +from box_sdk_gen.internal.base_object import BaseObject + +from box_sdk_gen.box.errors import BoxSDKError + + +class ExternalUserDeletionResultV2025R0(BaseObject): + def __init__( + self, user_id: str, status: int, *, detail: Optional[str] = None, **kwargs + ): + """ + :param user_id: The ID of the external user. + :type user_id: str + :param status: HTTP status code for a specific user's deletion request. + :type status: int + :param detail: Deletion request status details., defaults to None + :type detail: Optional[str], optional + """ + super().__init__(**kwargs) + self.user_id = user_id + self.status = status + self.detail = detail diff --git a/box_sdk_gen/schemas/v2025_r0/external_users_submit_delete_job_request_v2025_r0.py b/box_sdk_gen/schemas/v2025_r0/external_users_submit_delete_job_request_v2025_r0.py new file mode 100644 index 000000000..29960b159 --- /dev/null +++ b/box_sdk_gen/schemas/v2025_r0/external_users_submit_delete_job_request_v2025_r0.py @@ -0,0 +1,17 @@ +from typing import List + +from box_sdk_gen.internal.base_object import BaseObject + +from box_sdk_gen.schemas.v2025_r0.user_reference_v2025_r0 import UserReferenceV2025R0 + +from box_sdk_gen.box.errors import BoxSDKError + + +class ExternalUsersSubmitDeleteJobRequestV2025R0(BaseObject): + def __init__(self, external_users: List[UserReferenceV2025R0], **kwargs): + """ + :param external_users: List of external users to delete. + :type external_users: List[UserReferenceV2025R0] + """ + super().__init__(**kwargs) + self.external_users = external_users diff --git a/box_sdk_gen/schemas/v2025_r0/external_users_submit_delete_job_response_v2025_r0.py b/box_sdk_gen/schemas/v2025_r0/external_users_submit_delete_job_response_v2025_r0.py new file mode 100644 index 000000000..9c75db4e9 --- /dev/null +++ b/box_sdk_gen/schemas/v2025_r0/external_users_submit_delete_job_response_v2025_r0.py @@ -0,0 +1,19 @@ +from typing import List + +from box_sdk_gen.internal.base_object import BaseObject + +from box_sdk_gen.schemas.v2025_r0.external_user_deletion_result_v2025_r0 import ( + ExternalUserDeletionResultV2025R0, +) + +from box_sdk_gen.box.errors import BoxSDKError + + +class ExternalUsersSubmitDeleteJobResponseV2025R0(BaseObject): + def __init__(self, entries: List[ExternalUserDeletionResultV2025R0], **kwargs): + """ + :param entries: Array of results of each external user deletion request. + :type entries: List[ExternalUserDeletionResultV2025R0] + """ + super().__init__(**kwargs) + self.entries = entries diff --git a/box_sdk_gen/schemas/v2025_r0/shield_list_content_ip_v2025_r0.py b/box_sdk_gen/schemas/v2025_r0/shield_list_content_ip_v2025_r0.py index fdaef0ecf..74fd61531 100644 --- a/box_sdk_gen/schemas/v2025_r0/shield_list_content_ip_v2025_r0.py +++ b/box_sdk_gen/schemas/v2025_r0/shield_list_content_ip_v2025_r0.py @@ -22,7 +22,7 @@ def __init__( **kwargs ): """ - :param ip_addresses: List of ips and cidrs. + :param ip_addresses: List of ip addresses and CIDRs. :type ip_addresses: List[str] :param type: The type of content in the shield list., defaults to ShieldListContentIpV2025R0TypeField.IP :type type: ShieldListContentIpV2025R0TypeField, optional diff --git a/box_sdk_gen/schemas/v2025_r0/user_reference_v2025_r0.py b/box_sdk_gen/schemas/v2025_r0/user_reference_v2025_r0.py new file mode 100644 index 000000000..afe32b0f5 --- /dev/null +++ b/box_sdk_gen/schemas/v2025_r0/user_reference_v2025_r0.py @@ -0,0 +1,30 @@ +from enum import Enum + +from box_sdk_gen.internal.base_object import BaseObject + +from box_sdk_gen.box.errors import BoxSDKError + + +class UserReferenceV2025R0TypeField(str, Enum): + USER = 'user' + + +class UserReferenceV2025R0(BaseObject): + _discriminator = 'type', {'user'} + + def __init__( + self, + id: str, + *, + type: UserReferenceV2025R0TypeField = UserReferenceV2025R0TypeField.USER, + **kwargs + ): + """ + :param id: The unique identifier for the user. + :type id: str + :param type: The value is always `user`., defaults to UserReferenceV2025R0TypeField.USER + :type type: UserReferenceV2025R0TypeField, optional + """ + super().__init__(**kwargs) + self.id = id + self.type = type diff --git a/box_sdk_gen/schemas/v2025_r0/weblink_reference_v2025_r0.py b/box_sdk_gen/schemas/v2025_r0/weblink_reference_v2025_r0.py index 1e767a598..d172f86e2 100644 --- a/box_sdk_gen/schemas/v2025_r0/weblink_reference_v2025_r0.py +++ b/box_sdk_gen/schemas/v2025_r0/weblink_reference_v2025_r0.py @@ -20,7 +20,7 @@ def __init__( **kwargs ): """ - :param id: ID of the weblink. + :param id: ID of the web link. :type id: str :param type: The value will always be `weblink`., defaults to WeblinkReferenceV2025R0TypeField.WEBLINK :type type: WeblinkReferenceV2025R0TypeField, optional diff --git a/docs/README.md b/docs/README.md index 7b54f27b4..3ed7efdee 100644 --- a/docs/README.md +++ b/docs/README.md @@ -23,6 +23,7 @@ the SDK are available by topic: - [Downloads](downloads.md) - [Email aliases](email_aliases.md) - [Events](events.md) +- [External users](external_users.md) - [File classifications](file_classifications.md) - [File metadata](file_metadata.md) - [File requests](file_requests.md) diff --git a/docs/external_users.md b/docs/external_users.md new file mode 100644 index 000000000..9fd61470e --- /dev/null +++ b/docs/external_users.md @@ -0,0 +1,28 @@ +# ExternalUsersManager + +- [Submit job to delete external users](#submit-job-to-delete-external-users) + +## Submit job to delete external users + +Delete external users from current user enterprise. This will remove each +external user from all invited collaborations within the current enterprise. + +This operation is performed by calling function `create_external_user_submit_delete_job_v2025_r0`. + +See the endpoint docs at +[API Reference](https://developer.box.com/reference/v2025.0/post-external-users-submit-delete-job/). + +_Currently we don't have an example for calling `create_external_user_submit_delete_job_v2025_r0` in integration tests_ + +### Arguments + +- external_users `List[UserReferenceV2025R0]` + - List of external users to delete. +- box_version `BoxVersionHeaderV2025R0` + - Version header. +- extra_headers `Optional[Dict[str, Optional[str]]]` + - Extra headers that will be included in the HTTP request. + +### Returns + +This function returns a value of type `ExternalUsersSubmitDeleteJobResponseV2025R0`.