diff --git a/.codegen.json b/.codegen.json index 8a3dbb4d..8130d39f 100644 --- a/.codegen.json +++ b/.codegen.json @@ -1 +1 @@ -{ "engineHash": "41feeaa", "specHash": "1080bb4", "version": "1.12.0" } +{ "engineHash": "be67a6e", "specHash": "c303afc", "version": "1.12.0" } diff --git a/box_sdk_gen/managers/integration_mappings.py b/box_sdk_gen/managers/integration_mappings.py index 8dac7e0a..b3069eb0 100644 --- a/box_sdk_gen/managers/integration_mappings.py +++ b/box_sdk_gen/managers/integration_mappings.py @@ -16,6 +16,10 @@ IntegrationMappingPartnerItemSlack, ) +from box_sdk_gen.schemas.integration_mapping_partner_item_teams_create_request import ( + IntegrationMappingPartnerItemTeamsCreateRequest, +) + from box_sdk_gen.schemas.integration_mappings import IntegrationMappings from box_sdk_gen.schemas.client_error import ClientError @@ -34,6 +38,16 @@ IntegrationMappingSlackOptions, ) +from box_sdk_gen.schemas.integration_mappings_teams import IntegrationMappingsTeams + +from box_sdk_gen.schemas.integration_mapping_teams import IntegrationMappingTeams + +from box_sdk_gen.schemas.integration_mapping_teams_create_request import ( + IntegrationMappingTeamsCreateRequest, +) + +from box_sdk_gen.schemas.folder_reference import FolderReference + from box_sdk_gen.box.errors import BoxSDKError from box_sdk_gen.networking.auth import Authentication @@ -63,6 +77,15 @@ class GetSlackIntegrationMappingBoxItemType(str, Enum): FOLDER = 'folder' +class GetIntegrationMappingTeamsPartnerItemType(str, Enum): + CHANNEL = 'channel' + TEAM = 'team' + + +class GetIntegrationMappingTeamsBoxItemType(str, Enum): + FOLDER = 'folder' + + class IntegrationMappingsManager: def __init__( self, @@ -285,3 +308,193 @@ def delete_slack_integration_mapping_by_id( ) ) return None + + def get_integration_mapping_teams( + self, + *, + partner_item_type: Optional[GetIntegrationMappingTeamsPartnerItemType] = None, + partner_item_id: Optional[str] = None, + box_item_id: Optional[str] = None, + box_item_type: Optional[GetIntegrationMappingTeamsBoxItemType] = None, + extra_headers: Optional[Dict[str, Optional[str]]] = None + ) -> IntegrationMappingsTeams: + """ + Lists [Teams integration mappings](https://support.box.com/hc/en-us/articles/360044681474-Using-Box-for-Teams) in a users' enterprise. + + You need Admin or Co-Admin role to + + + use this endpoint. + + :param partner_item_type: Mapped item type, for which the mapping should be returned, defaults to None + :type partner_item_type: Optional[GetIntegrationMappingTeamsPartnerItemType], optional + :param partner_item_id: ID of the mapped item, for which the mapping should be returned, defaults to None + :type partner_item_id: Optional[str], optional + :param box_item_id: Box item ID, for which the mappings should be returned, defaults to None + :type box_item_id: Optional[str], optional + :param box_item_type: Box item type, for which the mappings should be returned, defaults to None + :type box_item_type: Optional[GetIntegrationMappingTeamsBoxItemType], 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 = {} + query_params_map: Dict[str, str] = prepare_params( + { + 'partner_item_type': to_string(partner_item_type), + 'partner_item_id': to_string(partner_item_id), + 'box_item_id': to_string(box_item_id), + 'box_item_type': to_string(box_item_type), + } + ) + headers_map: Dict[str, str] = prepare_params({**extra_headers}) + response: FetchResponse = self.network_session.network_client.fetch( + FetchOptions( + url=''.join( + [ + self.network_session.base_urls.base_url, + '/2.0/integration_mappings/teams', + ] + ), + method='GET', + params=query_params_map, + headers=headers_map, + response_format=ResponseFormat.JSON, + auth=self.auth, + network_session=self.network_session, + ) + ) + return deserialize(response.data, IntegrationMappingsTeams) + + def create_integration_mapping_teams( + self, + partner_item: IntegrationMappingPartnerItemTeamsCreateRequest, + box_item: FolderReference, + *, + extra_headers: Optional[Dict[str, Optional[str]]] = None + ) -> IntegrationMappingTeams: + """ + Creates a [Teams integration mapping](https://support.box.com/hc/en-us/articles/360044681474-Using-Box-for-Teams) + + by mapping a Teams channel to a Box item. + + + You need Admin or Co-Admin role to + + + use this endpoint. + + :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 = {'partner_item': partner_item, 'box_item': box_item} + headers_map: Dict[str, str] = prepare_params({**extra_headers}) + response: FetchResponse = self.network_session.network_client.fetch( + FetchOptions( + url=''.join( + [ + self.network_session.base_urls.base_url, + '/2.0/integration_mappings/teams', + ] + ), + 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, IntegrationMappingTeams) + + def update_integration_mapping_teams_by_id( + self, + integration_mapping_id: str, + *, + box_item: Optional[FolderReference] = None, + extra_headers: Optional[Dict[str, Optional[str]]] = None + ) -> IntegrationMappingTeams: + """ + Updates a [Teams integration mapping](https://support.box.com/hc/en-us/articles/360044681474-Using-Box-for-Teams). + + Supports updating the Box folder ID and options. + + + You need Admin or Co-Admin role to + + + use this endpoint. + + :param integration_mapping_id: An ID of an integration mapping + Example: "11235432" + :type integration_mapping_id: str + :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 = {'box_item': box_item} + headers_map: Dict[str, str] = prepare_params({**extra_headers}) + response: FetchResponse = self.network_session.network_client.fetch( + FetchOptions( + url=''.join( + [ + self.network_session.base_urls.base_url, + '/2.0/integration_mappings/teams/', + to_string(integration_mapping_id), + ] + ), + method='PUT', + 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, IntegrationMappingTeams) + + def delete_integration_mapping_teams_by_id( + self, + integration_mapping_id: str, + *, + extra_headers: Optional[Dict[str, Optional[str]]] = None + ) -> None: + """ + Deletes a [Teams integration mapping](https://support.box.com/hc/en-us/articles/360044681474-Using-Box-for-Teams). + + You need Admin or Co-Admin role to + + + use this endpoint. + + :param integration_mapping_id: An ID of an integration mapping + Example: "11235432" + :type integration_mapping_id: str + :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 = {} + headers_map: Dict[str, str] = prepare_params({**extra_headers}) + response: FetchResponse = self.network_session.network_client.fetch( + FetchOptions( + url=''.join( + [ + self.network_session.base_urls.base_url, + '/2.0/integration_mappings/teams/', + to_string(integration_mapping_id), + ] + ), + method='DELETE', + headers=headers_map, + response_format=ResponseFormat.NO_CONTENT, + auth=self.auth, + network_session=self.network_session, + ) + ) + return None diff --git a/box_sdk_gen/managers/shared_links_app_items.py b/box_sdk_gen/managers/shared_links_app_items.py index 34286162..9c57a897 100644 --- a/box_sdk_gen/managers/shared_links_app_items.py +++ b/box_sdk_gen/managers/shared_links_app_items.py @@ -45,7 +45,7 @@ def __init__( self.auth = auth self.network_session = network_session - def get_shared_item_app_items( + def find_app_item_for_shared_link( self, boxapi: str, *, extra_headers: Optional[Dict[str, Optional[str]]] = None ) -> AppItem: """ diff --git a/box_sdk_gen/schemas/__init__.py b/box_sdk_gen/schemas/__init__.py index e5b273c2..5c45dbe5 100644 --- a/box_sdk_gen/schemas/__init__.py +++ b/box_sdk_gen/schemas/__init__.py @@ -120,6 +120,8 @@ from box_sdk_gen.schemas.access_token import * +from box_sdk_gen.schemas.folder_reference import * + from box_sdk_gen.schemas.generic_source import * from box_sdk_gen.schemas.group_base import * @@ -138,6 +140,16 @@ from box_sdk_gen.schemas.integration_mapping_partner_item_slack import * +from box_sdk_gen.schemas.integration_mapping_partner_item_teams import * + +from box_sdk_gen.schemas.integration_mapping_teams import * + +from box_sdk_gen.schemas.integration_mappings_teams import * + +from box_sdk_gen.schemas.integration_mapping_partner_item_teams_create_request import * + +from box_sdk_gen.schemas.integration_mapping_teams_create_request import * + from box_sdk_gen.schemas.integration_mapping_slack_options import * from box_sdk_gen.schemas.integration_mapping_slack_create_request import * diff --git a/box_sdk_gen/schemas/folder_reference.py b/box_sdk_gen/schemas/folder_reference.py new file mode 100644 index 00000000..b5389f66 --- /dev/null +++ b/box_sdk_gen/schemas/folder_reference.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 FolderReferenceTypeField(str, Enum): + FOLDER = 'folder' + + +class FolderReference(BaseObject): + _discriminator = 'type', {'folder'} + + def __init__( + self, + id: str, + *, + type: FolderReferenceTypeField = FolderReferenceTypeField.FOLDER, + **kwargs + ): + """ + :param id: ID of the folder + :type id: str + :param type: `folder`, defaults to FolderReferenceTypeField.FOLDER + :type type: FolderReferenceTypeField, optional + """ + super().__init__(**kwargs) + self.id = id + self.type = type diff --git a/box_sdk_gen/schemas/integration_mapping_partner_item_teams.py b/box_sdk_gen/schemas/integration_mapping_partner_item_teams.py new file mode 100644 index 00000000..7e7a31c5 --- /dev/null +++ b/box_sdk_gen/schemas/integration_mapping_partner_item_teams.py @@ -0,0 +1,34 @@ +from enum import Enum + +from box_sdk_gen.internal.base_object import BaseObject + +from box_sdk_gen.box.errors import BoxSDKError + + +class IntegrationMappingPartnerItemTeamsTypeField(str, Enum): + CHANNEL = 'channel' + TEAM = 'team' + + +class IntegrationMappingPartnerItemTeams(BaseObject): + _discriminator = 'type', {'channel', 'team'} + + def __init__( + self, + type: IntegrationMappingPartnerItemTeamsTypeField, + id: str, + tenant_id: str, + **kwargs + ): + """ + :param type: Type of the mapped item referenced in `id` + :type type: IntegrationMappingPartnerItemTeamsTypeField + :param id: ID of the mapped item (of type referenced in `type`) + :type id: str + :param tenant_id: ID of the tenant that is registered with Microsoft Teams. + :type tenant_id: str + """ + super().__init__(**kwargs) + self.type = type + self.id = id + self.tenant_id = tenant_id diff --git a/box_sdk_gen/schemas/integration_mapping_partner_item_teams_create_request.py b/box_sdk_gen/schemas/integration_mapping_partner_item_teams_create_request.py new file mode 100644 index 00000000..606160f0 --- /dev/null +++ b/box_sdk_gen/schemas/integration_mapping_partner_item_teams_create_request.py @@ -0,0 +1,38 @@ +from enum import Enum + +from box_sdk_gen.internal.base_object import BaseObject + +from box_sdk_gen.box.errors import BoxSDKError + + +class IntegrationMappingPartnerItemTeamsCreateRequestTypeField(str, Enum): + CHANNEL = 'channel' + TEAM = 'team' + + +class IntegrationMappingPartnerItemTeamsCreateRequest(BaseObject): + _discriminator = 'type', {'channel', 'team'} + + def __init__( + self, + type: IntegrationMappingPartnerItemTeamsCreateRequestTypeField, + id: str, + tenant_id: str, + team_id: str, + **kwargs + ): + """ + :param type: Type of the mapped item referenced in `id` + :type type: IntegrationMappingPartnerItemTeamsCreateRequestTypeField + :param id: ID of the mapped item (of type referenced in `type`) + :type id: str + :param tenant_id: ID of the tenant that is registered with Microsoft Teams. + :type tenant_id: str + :param team_id: ID of the team that is registered with Microsoft Teams. + :type team_id: str + """ + super().__init__(**kwargs) + self.type = type + self.id = id + self.tenant_id = tenant_id + self.team_id = team_id diff --git a/box_sdk_gen/schemas/integration_mapping_teams.py b/box_sdk_gen/schemas/integration_mapping_teams.py new file mode 100644 index 00000000..b82ea9ee --- /dev/null +++ b/box_sdk_gen/schemas/integration_mapping_teams.py @@ -0,0 +1,69 @@ +from enum import Enum + +from typing import Optional + +from typing import Union + +from box_sdk_gen.schemas.integration_mapping_base import IntegrationMappingBaseTypeField + +from box_sdk_gen.schemas.integration_mapping_base import IntegrationMappingBase + +from box_sdk_gen.schemas.integration_mapping_partner_item_teams import ( + IntegrationMappingPartnerItemTeams, +) + +from box_sdk_gen.schemas.folder_reference import FolderReference + +from box_sdk_gen.box.errors import BoxSDKError + +from box_sdk_gen.internal.utils import DateTime + + +class IntegrationMappingTeamsIntegrationTypeField(str, Enum): + TEAMS = 'teams' + + +class IntegrationMappingTeams(IntegrationMappingBase): + def __init__( + self, + partner_item: Union[IntegrationMappingPartnerItemTeams], + box_item: FolderReference, + id: str, + *, + integration_type: Optional[IntegrationMappingTeamsIntegrationTypeField] = None, + is_overridden_by_manual_mapping: Optional[bool] = None, + created_at: Optional[DateTime] = None, + modified_at: Optional[DateTime] = None, + type: IntegrationMappingBaseTypeField = IntegrationMappingBaseTypeField.INTEGRATION_MAPPING, + **kwargs + ): + """ + :param partner_item: Mapped item object for Teams + :type partner_item: Union[IntegrationMappingPartnerItemTeams] + :param id: A unique identifier of a folder mapping + (part of a composite key together + with `integration_type`) + :type id: str + :param integration_type: Identifies the Box partner app, + with which the mapping is associated. + Supports Slack and Teams. + (part of the composite key together with `id`), defaults to None + :type integration_type: Optional[IntegrationMappingTeamsIntegrationTypeField], optional + :param is_overridden_by_manual_mapping: Identifies whether the mapping has + been manually set by the team owner from UI for channels + (as opposed to being automatically created), defaults to None + :type is_overridden_by_manual_mapping: Optional[bool], optional + :param created_at: When the integration mapping object was created, defaults to None + :type created_at: Optional[DateTime], optional + :param modified_at: When the integration mapping object was last modified, defaults to None + :type modified_at: Optional[DateTime], optional + :param type: Mapping type, defaults to IntegrationMappingBaseTypeField.INTEGRATION_MAPPING + :type type: IntegrationMappingBaseTypeField, optional + """ + super().__init__(id=id, type=type, **kwargs) + self.partner_item = partner_item + self.box_item = box_item + self.integration_type = integration_type + self.is_overridden_by_manual_mapping = is_overridden_by_manual_mapping + self.created_at = created_at + self.modified_at = modified_at diff --git a/box_sdk_gen/schemas/integration_mapping_teams_create_request.py b/box_sdk_gen/schemas/integration_mapping_teams_create_request.py new file mode 100644 index 00000000..2f615a43 --- /dev/null +++ b/box_sdk_gen/schemas/integration_mapping_teams_create_request.py @@ -0,0 +1,21 @@ +from box_sdk_gen.internal.base_object import BaseObject + +from box_sdk_gen.schemas.integration_mapping_partner_item_teams_create_request import ( + IntegrationMappingPartnerItemTeamsCreateRequest, +) + +from box_sdk_gen.schemas.folder_reference import FolderReference + +from box_sdk_gen.box.errors import BoxSDKError + + +class IntegrationMappingTeamsCreateRequest(BaseObject): + def __init__( + self, + partner_item: IntegrationMappingPartnerItemTeamsCreateRequest, + box_item: FolderReference, + **kwargs + ): + super().__init__(**kwargs) + self.partner_item = partner_item + self.box_item = box_item diff --git a/box_sdk_gen/schemas/integration_mappings_teams.py b/box_sdk_gen/schemas/integration_mappings_teams.py new file mode 100644 index 00000000..6f35f25b --- /dev/null +++ b/box_sdk_gen/schemas/integration_mappings_teams.py @@ -0,0 +1,21 @@ +from typing import Optional + +from typing import List + +from box_sdk_gen.internal.base_object import BaseObject + +from box_sdk_gen.schemas.integration_mapping_teams import IntegrationMappingTeams + +from box_sdk_gen.box.errors import BoxSDKError + + +class IntegrationMappingsTeams(BaseObject): + def __init__( + self, *, entries: Optional[List[IntegrationMappingTeams]] = None, **kwargs + ): + """ + :param entries: A list of integration mappings, defaults to None + :type entries: Optional[List[IntegrationMappingTeams]], optional + """ + super().__init__(**kwargs) + self.entries = entries diff --git a/docs/integration_mappings.md b/docs/integration_mappings.md index 88329cb1..dcebf90a 100644 --- a/docs/integration_mappings.md +++ b/docs/integration_mappings.md @@ -4,6 +4,10 @@ - [Create Slack integration mapping](#create-slack-integration-mapping) - [Update Slack integration mapping](#update-slack-integration-mapping) - [Delete Slack integration mapping](#delete-slack-integration-mapping) +- [List Teams integration mappings](#list-teams-integration-mappings) +- [Create Teams integration mapping](#create-teams-integration-mapping) +- [Update Teams integration mapping](#update-teams-integration-mapping) +- [Delete Teams integration mapping](#delete-teams-integration-mapping) ## List Slack integration mappings @@ -145,3 +149,119 @@ _Currently we don't have an example for calling `delete_slack_integration_mappin This function returns a value of type `None`. Empty body in response + +## List Teams integration mappings + +Lists [Teams integration mappings](https://support.box.com/hc/en-us/articles/360044681474-Using-Box-for-Teams) in a users' enterprise. +You need Admin or Co-Admin role to +use this endpoint. + +This operation is performed by calling function `get_integration_mapping_teams`. + +See the endpoint docs at +[API Reference](https://developer.box.com/reference/get-integration-mappings-teams/). + +_Currently we don't have an example for calling `get_integration_mapping_teams` in integration tests_ + +### Arguments + +- partner_item_type `Optional[GetIntegrationMappingTeamsPartnerItemType]` + - Mapped item type, for which the mapping should be returned +- partner_item_id `Optional[str]` + - ID of the mapped item, for which the mapping should be returned +- box_item_id `Optional[str]` + - Box item ID, for which the mappings should be returned +- box_item_type `Optional[GetIntegrationMappingTeamsBoxItemType]` + - Box item type, for which the mappings should be returned +- 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 `IntegrationMappingsTeams`. + +Returns a collection of integration mappings + +## Create Teams integration mapping + +Creates a [Teams integration mapping](https://support.box.com/hc/en-us/articles/360044681474-Using-Box-for-Teams) +by mapping a Teams channel to a Box item. +You need Admin or Co-Admin role to +use this endpoint. + +This operation is performed by calling function `create_integration_mapping_teams`. + +See the endpoint docs at +[API Reference](https://developer.box.com/reference/post-integration-mappings-teams/). + +_Currently we don't have an example for calling `create_integration_mapping_teams` in integration tests_ + +### Arguments + +- partner_item `IntegrationMappingPartnerItemTeamsCreateRequest` + - +- box_item `FolderReference` + - +- 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 `IntegrationMappingTeams`. + +Returns the created integration mapping. + +## Update Teams integration mapping + +Updates a [Teams integration mapping](https://support.box.com/hc/en-us/articles/360044681474-Using-Box-for-Teams). +Supports updating the Box folder ID and options. +You need Admin or Co-Admin role to +use this endpoint. + +This operation is performed by calling function `update_integration_mapping_teams_by_id`. + +See the endpoint docs at +[API Reference](https://developer.box.com/reference/put-integration-mappings-teams-id/). + +_Currently we don't have an example for calling `update_integration_mapping_teams_by_id` in integration tests_ + +### Arguments + +- integration_mapping_id `str` + - An ID of an integration mapping Example: "11235432" +- box_item `Optional[FolderReference]` + - +- 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 `IntegrationMappingTeams`. + +Returns the updated integration mapping object. + +## Delete Teams integration mapping + +Deletes a [Teams integration mapping](https://support.box.com/hc/en-us/articles/360044681474-Using-Box-for-Teams). +You need Admin or Co-Admin role to +use this endpoint. + +This operation is performed by calling function `delete_integration_mapping_teams_by_id`. + +See the endpoint docs at +[API Reference](https://developer.box.com/reference/delete-integration-mappings-teams-id/). + +_Currently we don't have an example for calling `delete_integration_mapping_teams_by_id` in integration tests_ + +### Arguments + +- integration_mapping_id `str` + - An ID of an integration mapping Example: "11235432" +- 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 `None`. + +Empty body in response diff --git a/docs/shared_links_app_items.md b/docs/shared_links_app_items.md index 17630910..a26cdabc 100644 --- a/docs/shared_links_app_items.md +++ b/docs/shared_links_app_items.md @@ -8,12 +8,18 @@ Returns the app item represented by a shared link. The link can originate from the current enterprise or another. -This operation is performed by calling function `get_shared_item_app_items`. +This operation is performed by calling function `find_app_item_for_shared_link`. See the endpoint docs at [API Reference](https://developer.box.com/reference/get-shared-items--app-items/). -_Currently we don't have an example for calling `get_shared_item_app_items` in integration tests_ + + +```python +client.shared_links_app_items.find_app_item_for_shared_link( + "".join(["shared_link=", app_item_shared_link]) +) +``` ### Arguments diff --git a/test/shared_links_app_items.py b/test/shared_links_app_items.py new file mode 100644 index 00000000..9b37e30e --- /dev/null +++ b/test/shared_links_app_items.py @@ -0,0 +1,20 @@ +from box_sdk_gen.internal.utils import to_string + +from box_sdk_gen.client import BoxClient + +from box_sdk_gen.schemas.app_item import AppItem + +from box_sdk_gen.internal.utils import get_env_var + +from test.commons import get_default_client + +client: BoxClient = get_default_client() + + +def testSharedLinksFiles(): + app_item_shared_link: str = get_env_var('APP_ITEM_SHARED_LINK') + app_item: AppItem = client.shared_links_app_items.find_app_item_for_shared_link( + ''.join(['shared_link=', app_item_shared_link]) + ) + assert to_string(app_item.type) == 'app_item' + assert app_item.application_type == 'hubs'