From dc6e37a49bdb2c83f425d635c626bf5419d615bc Mon Sep 17 00:00:00 2001 From: box-sdk-build Date: Thu, 14 Mar 2024 05:10:54 -0700 Subject: [PATCH 1/3] chore: Update .codegen.json with commit hash of codegen and openapi spec --- .codegen.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.codegen.json b/.codegen.json index 9dab521..9e18804 100644 --- a/.codegen.json +++ b/.codegen.json @@ -1 +1 @@ -{ "engineHash": "bd1adff", "specHash": "b2f7568", "version": "0.6.1" } +{ "engineHash": "bdc0ade", "specHash": "b2f7568", "version": "0.6.1" } From 4a9556f2886c539ce8101ef5fbb9619241968470 Mon Sep 17 00:00:00 2001 From: box-sdk-build Date: Thu, 14 Mar 2024 11:42:26 -0700 Subject: [PATCH 2/3] feat: use getDiscriminatorsForUnion in generic serialization (box/box-codegen#448) --- .codegen.json | 2 +- test/events.py | 29 ++++++++++++++++++----------- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/.codegen.json b/.codegen.json index 9e18804..984fb6a 100644 --- a/.codegen.json +++ b/.codegen.json @@ -1 +1 @@ -{ "engineHash": "bdc0ade", "specHash": "b2f7568", "version": "0.6.1" } +{ "engineHash": "183c130", "specHash": "b2f7568", "version": "0.6.1" } diff --git a/test/events.py b/test/events.py index cdc5f0d..db12a17 100644 --- a/test/events.py +++ b/test/events.py @@ -16,6 +16,14 @@ from test.commons import get_default_client +from box_sdk_gen.schemas import EventSource + +from box_sdk_gen.schemas import File + +from box_sdk_gen.schemas import Folder + +from box_sdk_gen.schemas import User + client: BoxClient = get_default_client() @@ -35,12 +43,12 @@ def testEventUpload(): assert len(events.entries) > 0 event: Event = events.entries[0] assert to_string(event.event_type) == 'UPLOAD' + source: EventSource = event.source assert ( - to_string(event.source.item_type) == 'file' - or to_string(event.source.item_type) == 'folder' + to_string(source.item_type) == 'file' or to_string(source.item_type) == 'folder' ) - assert not event.source.item_id == '' - assert not event.source.item_name == '' + assert not source.item_id == '' + assert not source.item_name == '' def testEventDeleteUser(): @@ -51,8 +59,9 @@ def testEventDeleteUser(): assert len(events.entries) > 0 event: Event = events.entries[0] assert to_string(event.event_type) == 'DELETE_USER' - assert to_string(event.source.type) == 'user' - assert not event.source.id == '' + source: User = event.source + assert to_string(source.type) == 'user' + assert not source.id == '' def testEventSourceFileOrFolder(): @@ -61,11 +70,9 @@ def testEventSourceFileOrFolder(): ) assert len(events.entries) > 0 event: Event = events.entries[0] - assert ( - to_string(event.source.type) == 'file' - or to_string(event.source.type) == 'folder' - ) - assert not event.source.id == '' + source: File = event.source + assert to_string(source.type) == 'file' or to_string(source.type) == 'folder' + assert not source.id == '' def testGetEventsWithLongPolling(): From 4f2452a621994bcf086ee31f3c7f23aa3d2fb595 Mon Sep 17 00:00:00 2001 From: box-sdk-build Date: Fri, 15 Mar 2024 08:31:27 -0700 Subject: [PATCH 3/3] feat: Support of type any in Python and TS (box/box-codegen#453) --- .codegen.json | 2 +- box_sdk_gen/managers/file_metadata.py | 4 +- box_sdk_gen/managers/folder_metadata.py | 4 +- box_sdk_gen/managers/metadata_templates.py | 4 +- box_sdk_gen/schemas.py | 2 +- docs/file_metadata.md | 2 +- docs/folder_metadata.md | 4 +- test/file_metadata.py | 91 ++++++++++++++++++++- test/folder_metadata.py | 93 +++++++++++++++++++++- 9 files changed, 193 insertions(+), 13 deletions(-) diff --git a/.codegen.json b/.codegen.json index 984fb6a..078a9d8 100644 --- a/.codegen.json +++ b/.codegen.json @@ -1 +1 @@ -{ "engineHash": "183c130", "specHash": "b2f7568", "version": "0.6.1" } +{ "engineHash": "3d3d072", "specHash": "b2f7568", "version": "0.6.1" } diff --git a/box_sdk_gen/managers/file_metadata.py b/box_sdk_gen/managers/file_metadata.py index f5b9876..8920feb 100644 --- a/box_sdk_gen/managers/file_metadata.py +++ b/box_sdk_gen/managers/file_metadata.py @@ -235,7 +235,7 @@ def create_file_metadata_by_id( file_id: str, scope: CreateFileMetadataByIdScope, template_key: str, - request_body: Dict[str, str], + request_body: Dict, *, extra_headers: Optional[Dict[str, Optional[str]]] = None ) -> MetadataFull: @@ -266,7 +266,7 @@ def create_file_metadata_by_id( Example: "properties" :type template_key: str :param request_body: Request body of createFileMetadataById method - :type request_body: Dict[str, str] + :type request_body: Dict :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 """ diff --git a/box_sdk_gen/managers/folder_metadata.py b/box_sdk_gen/managers/folder_metadata.py index 8dd49f1..e31c963 100644 --- a/box_sdk_gen/managers/folder_metadata.py +++ b/box_sdk_gen/managers/folder_metadata.py @@ -247,7 +247,7 @@ def create_folder_metadata_by_id( folder_id: str, scope: CreateFolderMetadataByIdScope, template_key: str, - request_body: Dict[str, str], + request_body: Dict, *, extra_headers: Optional[Dict[str, Optional[str]]] = None ) -> MetadataFull: @@ -290,7 +290,7 @@ def create_folder_metadata_by_id( Example: "properties" :type template_key: str :param request_body: Request body of createFolderMetadataById method - :type request_body: Dict[str, str] + :type request_body: Dict :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 """ diff --git a/box_sdk_gen/managers/metadata_templates.py b/box_sdk_gen/managers/metadata_templates.py index 8f3c84e..beb3cb2 100644 --- a/box_sdk_gen/managers/metadata_templates.py +++ b/box_sdk_gen/managers/metadata_templates.py @@ -91,7 +91,7 @@ def __init__( self, op: UpdateMetadataTemplateRequestBodyOpField, *, - data: Optional[Dict[str, str]] = None, + data: Optional[Dict] = None, field_key: Optional[str] = None, field_keys: Optional[List[str]] = None, enum_option_key: Optional[str] = None, @@ -106,7 +106,7 @@ def __init__( :type op: UpdateMetadataTemplateRequestBodyOpField :param data: The data for the operation. This will vary depending on the operation being performed., defaults to None - :type data: Optional[Dict[str, str]], optional + :type data: Optional[Dict], optional :param field_key: For operations that affect a single field this defines the key of the field that is affected., defaults to None :type field_key: Optional[str], optional diff --git a/box_sdk_gen/schemas.py b/box_sdk_gen/schemas.py index 08fe8cd..92fa475 100644 --- a/box_sdk_gen/schemas.py +++ b/box_sdk_gen/schemas.py @@ -9072,7 +9072,7 @@ def __init__( created_by: Optional[UserMini] = None, event_type: Optional[EventEventTypeField] = None, session_id: Optional[str] = None, - source: Optional[Union[User, EventSource, File, Folder, Dict[str, str]]] = None, + source: Optional[Union[User, EventSource, File, Folder, Dict]] = None, additional_details: Optional[EventAdditionalDetailsField] = None, **kwargs ): diff --git a/docs/file_metadata.md b/docs/file_metadata.md index effe3b5..841005c 100644 --- a/docs/file_metadata.md +++ b/docs/file_metadata.md @@ -99,7 +99,7 @@ client.file_metadata.create_file_metadata_by_id(file.id, CreateFileMetadataByIdS - The scope of the metadata template Example: "global" - template_key `str` - The name of the metadata template Example: "properties" -- request_body `Dict[str, str]` +- request_body `Dict` - Request body of createFileMetadataById method - extra_headers `Optional[Dict[str, Optional[str]]]` - Extra headers that will be included in the HTTP request. diff --git a/docs/folder_metadata.md b/docs/folder_metadata.md index 19ba29b..e275572 100644 --- a/docs/folder_metadata.md +++ b/docs/folder_metadata.md @@ -104,7 +104,7 @@ client.folder_metadata.create_folder_metadata_by_id(folder.id, CreateFolderMetad - The scope of the metadata template Example: "global" - template_key `str` - The name of the metadata template Example: "properties" -- request_body `Dict[str, str]` +- request_body `Dict` - Request body of createFolderMetadataById method - extra_headers `Optional[Dict[str, Optional[str]]]` - Extra headers that will be included in the HTTP request. @@ -170,7 +170,7 @@ See the endpoint docs at ```python -client.folder_metadata.delete_folder_metadata_by_id(folder.id, DeleteFolderMetadataByIdScope.GLOBAL.value, 'properties') +client.folder_metadata.delete_folder_metadata_by_id(folder.id, DeleteFolderMetadataByIdScope.ENTERPRISE.value, template_key) ``` ### Arguments diff --git a/test/file_metadata.py b/test/file_metadata.py index 154c8d7..61a0007 100644 --- a/test/file_metadata.py +++ b/test/file_metadata.py @@ -2,6 +2,8 @@ import pytest +from typing import List + from box_sdk_gen.client import BoxClient from box_sdk_gen.schemas import FileFull @@ -22,6 +24,20 @@ from box_sdk_gen.managers.file_metadata import DeleteFileMetadataByIdScope +from box_sdk_gen.schemas import MetadataTemplate + +from box_sdk_gen.managers.metadata_templates import CreateMetadataTemplateFields + +from box_sdk_gen.managers.metadata_templates import ( + CreateMetadataTemplateFieldsTypeField, +) + +from box_sdk_gen.managers.metadata_templates import ( + CreateMetadataTemplateFieldsOptionsField, +) + +from box_sdk_gen.managers.metadata_templates import DeleteMetadataTemplateScope + from box_sdk_gen.internal.utils import generate_byte_stream from box_sdk_gen.internal.utils import get_uuid @@ -33,7 +49,7 @@ client: BoxClient = get_default_client() -def testFileMetadata(): +def testGlobalFileMetadata(): file: FileFull = upload_new_file() file_metadata: Metadatas = client.file_metadata.get_file_metadata(file.id) assert len(file_metadata.entries) == 0 @@ -74,3 +90,76 @@ def testFileMetadata(): file.id, GetFileMetadataByIdScope.GLOBAL.value, 'properties' ) client.files.delete_file_by_id(file.id) + + +def testEnterpriseFileMetadata(): + file: FileFull = upload_new_file() + template_key: str = ''.join(['key', get_uuid()]) + template: MetadataTemplate = client.metadata_templates.create_metadata_template( + 'enterprise', + template_key, + template_key=template_key, + fields=[ + CreateMetadataTemplateFields( + type=CreateMetadataTemplateFieldsTypeField.STRING.value, + key='name', + display_name='name', + ), + CreateMetadataTemplateFields( + type=CreateMetadataTemplateFieldsTypeField.FLOAT.value, + key='age', + display_name='age', + ), + CreateMetadataTemplateFields( + type=CreateMetadataTemplateFieldsTypeField.DATE.value, + key='birthDate', + display_name='birthDate', + ), + CreateMetadataTemplateFields( + type=CreateMetadataTemplateFieldsTypeField.ENUM.value, + key='countryCode', + display_name='countryCode', + options=[ + CreateMetadataTemplateFieldsOptionsField(key='US'), + CreateMetadataTemplateFieldsOptionsField(key='CA'), + ], + ), + CreateMetadataTemplateFields( + type=CreateMetadataTemplateFieldsTypeField.MULTISELECT.value, + key='sports', + display_name='sports', + options=[ + CreateMetadataTemplateFieldsOptionsField(key='basketball'), + CreateMetadataTemplateFieldsOptionsField(key='football'), + CreateMetadataTemplateFieldsOptionsField(key='tennis'), + ], + ), + ], + ) + created_metadata: MetadataFull = client.file_metadata.create_file_metadata_by_id( + file.id, + CreateFileMetadataByIdScope.ENTERPRISE.value, + template_key, + { + 'name': 'John', + 'age': 23, + 'birthDate': '2001-01-03T02:20:50.520Z', + 'countryCode': 'US', + 'sports': ['basketball', 'tennis'], + }, + ) + assert to_string(created_metadata.template) == template_key + assert created_metadata.extra_data['name'] == 'John' + assert created_metadata.extra_data['age'] == 23 + assert created_metadata.extra_data['birthDate'] == '2001-01-03T02:20:50.520Z' + assert created_metadata.extra_data['countryCode'] == 'US' + sports: List[str] = created_metadata.extra_data['sports'] + assert sports[0] == 'basketball' + assert sports[1] == 'tennis' + client.file_metadata.delete_file_metadata_by_id( + file.id, DeleteFileMetadataByIdScope.ENTERPRISE.value, template_key + ) + client.metadata_templates.delete_metadata_template( + DeleteMetadataTemplateScope.ENTERPRISE.value, template_key + ) + client.files.delete_file_by_id(file.id) diff --git a/test/folder_metadata.py b/test/folder_metadata.py index 6a143ff..b0da003 100644 --- a/test/folder_metadata.py +++ b/test/folder_metadata.py @@ -2,6 +2,8 @@ import pytest +from typing import List + from box_sdk_gen.client import BoxClient from box_sdk_gen.schemas import FolderFull @@ -24,6 +26,20 @@ from box_sdk_gen.managers.folder_metadata import DeleteFolderMetadataByIdScope +from box_sdk_gen.schemas import MetadataTemplate + +from box_sdk_gen.managers.metadata_templates import CreateMetadataTemplateFields + +from box_sdk_gen.managers.metadata_templates import ( + CreateMetadataTemplateFieldsTypeField, +) + +from box_sdk_gen.managers.metadata_templates import ( + CreateMetadataTemplateFieldsOptionsField, +) + +from box_sdk_gen.managers.metadata_templates import DeleteMetadataTemplateScope + from box_sdk_gen.internal.utils import get_uuid from test.commons import get_default_client @@ -33,7 +49,7 @@ client: BoxClient = get_default_client() -def testFolderMetadata(): +def testGlobalFolderMetadata(): folder: FolderFull = create_new_folder() folder_metadata: Metadatas = client.folder_metadata.get_folder_metadata(folder.id) assert len(folder_metadata.entries) == 0 @@ -81,3 +97,78 @@ def testFolderMetadata(): folder.id, GetFolderMetadataByIdScope.GLOBAL.value, 'properties' ) client.folders.delete_folder_by_id(folder.id) + + +def testEnterpriseFolderMetadata(): + folder: FolderFull = create_new_folder() + template_key: str = ''.join(['key', get_uuid()]) + template: MetadataTemplate = client.metadata_templates.create_metadata_template( + 'enterprise', + template_key, + template_key=template_key, + fields=[ + CreateMetadataTemplateFields( + type=CreateMetadataTemplateFieldsTypeField.STRING.value, + key='name', + display_name='name', + ), + CreateMetadataTemplateFields( + type=CreateMetadataTemplateFieldsTypeField.FLOAT.value, + key='age', + display_name='age', + ), + CreateMetadataTemplateFields( + type=CreateMetadataTemplateFieldsTypeField.DATE.value, + key='birthDate', + display_name='birthDate', + ), + CreateMetadataTemplateFields( + type=CreateMetadataTemplateFieldsTypeField.ENUM.value, + key='countryCode', + display_name='countryCode', + options=[ + CreateMetadataTemplateFieldsOptionsField(key='US'), + CreateMetadataTemplateFieldsOptionsField(key='CA'), + ], + ), + CreateMetadataTemplateFields( + type=CreateMetadataTemplateFieldsTypeField.MULTISELECT.value, + key='sports', + display_name='sports', + options=[ + CreateMetadataTemplateFieldsOptionsField(key='basketball'), + CreateMetadataTemplateFieldsOptionsField(key='football'), + CreateMetadataTemplateFieldsOptionsField(key='tennis'), + ], + ), + ], + ) + created_metadata: MetadataFull = ( + client.folder_metadata.create_folder_metadata_by_id( + folder.id, + CreateFolderMetadataByIdScope.ENTERPRISE.value, + template_key, + { + 'name': 'John', + 'age': 23, + 'birthDate': '2001-01-03T02:20:50.520Z', + 'countryCode': 'US', + 'sports': ['basketball', 'tennis'], + }, + ) + ) + assert to_string(created_metadata.template) == template_key + assert created_metadata.extra_data['name'] == 'John' + assert created_metadata.extra_data['age'] == 23 + assert created_metadata.extra_data['birthDate'] == '2001-01-03T02:20:50.520Z' + assert created_metadata.extra_data['countryCode'] == 'US' + sports: List[str] = created_metadata.extra_data['sports'] + assert sports[0] == 'basketball' + assert sports[1] == 'tennis' + client.folder_metadata.delete_folder_metadata_by_id( + folder.id, DeleteFolderMetadataByIdScope.ENTERPRISE.value, template_key + ) + client.metadata_templates.delete_metadata_template( + DeleteMetadataTemplateScope.ENTERPRISE.value, template_key + ) + client.folders.delete_folder_by_id(folder.id)