From a622f1b67d89072ba54a9de6bc18621cd3e95ec2 Mon Sep 17 00:00:00 2001 From: box-sdk-build Date: Wed, 20 May 2026 09:35:49 -0700 Subject: [PATCH] feat: Convert Note Public API (box/box-openapi#599) --- .codegen.json | 2 +- box_sdk_gen/client.py | 7 ++ box_sdk_gen/managers/__init__.py | 2 + .../managers/convert_markdown_to_box_note.py | 118 ++++++++++++++++++ box_sdk_gen/schemas/v2026_r0/__init__.py | 6 + .../v2026_r0/folder_reference_v2026_r0.py | 30 +++++ .../notes_convert_request_body_v2026_r0.py | 38 ++++++ .../notes_convert_response_v2026_r0.py | 30 +++++ docs/README.md | 1 + docs/convert_markdown_to_box_note.md | 34 +++++ 10 files changed, 267 insertions(+), 1 deletion(-) create mode 100644 box_sdk_gen/managers/convert_markdown_to_box_note.py create mode 100644 box_sdk_gen/schemas/v2026_r0/folder_reference_v2026_r0.py create mode 100644 box_sdk_gen/schemas/v2026_r0/notes_convert_request_body_v2026_r0.py create mode 100644 box_sdk_gen/schemas/v2026_r0/notes_convert_response_v2026_r0.py create mode 100644 docs/convert_markdown_to_box_note.md diff --git a/.codegen.json b/.codegen.json index e41b9128..a8e4873c 100644 --- a/.codegen.json +++ b/.codegen.json @@ -1 +1 @@ -{ "engineHash": "4de40e1", "specHash": "e0ffc4a", "version": "10.10.0" } +{ "engineHash": "4de40e1", "specHash": "8b85e74", "version": "10.10.0" } diff --git a/box_sdk_gen/client.py b/box_sdk_gen/client.py index 7e807a9d..a002be5a 100644 --- a/box_sdk_gen/client.py +++ b/box_sdk_gen/client.py @@ -194,6 +194,10 @@ from box_sdk_gen.managers.automate_workflows import AutomateWorkflowsManager +from box_sdk_gen.managers.convert_markdown_to_box_note import ( + ConvertMarkdownToBoxNoteManager, +) + from box_sdk_gen.networking.auth import Authentication from box_sdk_gen.networking.network import NetworkSession @@ -469,6 +473,9 @@ def __init__(self, auth: Authentication, *, network_session: NetworkSession = No self.automate_workflows = AutomateWorkflowsManager( auth=self.auth, network_session=self.network_session ) + self.convert_markdown_to_box_note = ConvertMarkdownToBoxNoteManager( + 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 84b4a75e..b3c08820 100644 --- a/box_sdk_gen/managers/__init__.py +++ b/box_sdk_gen/managers/__init__.py @@ -165,3 +165,5 @@ from box_sdk_gen.managers.external_users import * from box_sdk_gen.managers.automate_workflows import * + +from box_sdk_gen.managers.convert_markdown_to_box_note import * diff --git a/box_sdk_gen/managers/convert_markdown_to_box_note.py b/box_sdk_gen/managers/convert_markdown_to_box_note.py new file mode 100644 index 00000000..34cd47b5 --- /dev/null +++ b/box_sdk_gen/managers/convert_markdown_to_box_note.py @@ -0,0 +1,118 @@ +from enum import Enum + +from typing import Optional + +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.v2026_r0.folder_reference_v2026_r0 import ( + FolderReferenceV2026R0, +) + +from box_sdk_gen.networking.fetch_options import ResponseFormat + +from box_sdk_gen.schemas.v2026_r0.notes_convert_response_v2026_r0 import ( + NotesConvertResponseV2026R0, +) + +from box_sdk_gen.schemas.v2026_r0.client_error_v2026_r0 import ClientErrorV2026R0 + +from box_sdk_gen.parameters.v2026_r0.box_version_header_v2026_r0 import ( + BoxVersionHeaderV2026R0, +) + +from box_sdk_gen.schemas.v2026_r0.notes_convert_request_body_v2026_r0 import ( + NotesConvertRequestBodyV2026R0, +) + +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 CreateNoteConvertV2026R0ContentFormat(str, Enum): + MARKDOWN = 'markdown' + + +class ConvertMarkdownToBoxNoteManager: + 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_note_convert_v2026_r0( + self, + content: str, + parent: FolderReferenceV2026R0, + name: str, + *, + content_format: CreateNoteConvertV2026R0ContentFormat = CreateNoteConvertV2026R0ContentFormat.MARKDOWN, + box_version: BoxVersionHeaderV2026R0 = BoxVersionHeaderV2026R0._2026_0, + extra_headers: Optional[Dict[str, Optional[str]]] = None + ) -> NotesConvertResponseV2026R0: + """ + Creates a Box Note (`.boxnote` file) from supported source content. See the `content_format` field for supported formats. + :param content: The content to convert to a note. See the `content_format` field for supported formats. + :type content: str + :param name: The name for the created note. The `.boxnote` extension is appended automatically. + :type name: str + :param content_format: Format of the content to convert., defaults to CreateNoteConvertV2026R0ContentFormat.MARKDOWN + :type content_format: CreateNoteConvertV2026R0ContentFormat, optional + :param box_version: Version header., defaults to BoxVersionHeaderV2026R0._2026_0 + :type box_version: BoxVersionHeaderV2026R0, 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 = { + 'content': content, + 'content_format': content_format, + 'parent': parent, + 'name': name, + } + 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/notes/convert'] + ), + 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, NotesConvertResponseV2026R0) diff --git a/box_sdk_gen/schemas/v2026_r0/__init__.py b/box_sdk_gen/schemas/v2026_r0/__init__.py index 6b48bc6d..5735f86f 100644 --- a/box_sdk_gen/schemas/v2026_r0/__init__.py +++ b/box_sdk_gen/schemas/v2026_r0/__init__.py @@ -4,6 +4,12 @@ from box_sdk_gen.schemas.v2026_r0.client_error_v2026_r0 import * +from box_sdk_gen.schemas.v2026_r0.folder_reference_v2026_r0 import * + +from box_sdk_gen.schemas.v2026_r0.notes_convert_request_body_v2026_r0 import * + +from box_sdk_gen.schemas.v2026_r0.notes_convert_response_v2026_r0 import * + from box_sdk_gen.schemas.v2026_r0.user_base_v2026_r0 import * from box_sdk_gen.schemas.v2026_r0.user_mini_v2026_r0 import * diff --git a/box_sdk_gen/schemas/v2026_r0/folder_reference_v2026_r0.py b/box_sdk_gen/schemas/v2026_r0/folder_reference_v2026_r0.py new file mode 100644 index 00000000..4646de78 --- /dev/null +++ b/box_sdk_gen/schemas/v2026_r0/folder_reference_v2026_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 FolderReferenceV2026R0TypeField(str, Enum): + FOLDER = 'folder' + + +class FolderReferenceV2026R0(BaseObject): + _discriminator = 'type', {'folder'} + + def __init__( + self, + id: str, + *, + type: FolderReferenceV2026R0TypeField = FolderReferenceV2026R0TypeField.FOLDER, + **kwargs + ): + """ + :param id: ID of the folder. + :type id: str + :param type: The value will always be `folder`., defaults to FolderReferenceV2026R0TypeField.FOLDER + :type type: FolderReferenceV2026R0TypeField, optional + """ + super().__init__(**kwargs) + self.id = id + self.type = type diff --git a/box_sdk_gen/schemas/v2026_r0/notes_convert_request_body_v2026_r0.py b/box_sdk_gen/schemas/v2026_r0/notes_convert_request_body_v2026_r0.py new file mode 100644 index 00000000..f5eaf82f --- /dev/null +++ b/box_sdk_gen/schemas/v2026_r0/notes_convert_request_body_v2026_r0.py @@ -0,0 +1,38 @@ +from enum import Enum + +from box_sdk_gen.internal.base_object import BaseObject + +from box_sdk_gen.schemas.v2026_r0.folder_reference_v2026_r0 import ( + FolderReferenceV2026R0, +) + +from box_sdk_gen.box.errors import BoxSDKError + + +class NotesConvertRequestBodyV2026R0ContentFormatField(str, Enum): + MARKDOWN = 'markdown' + + +class NotesConvertRequestBodyV2026R0(BaseObject): + def __init__( + self, + content: str, + parent: FolderReferenceV2026R0, + name: str, + *, + content_format: NotesConvertRequestBodyV2026R0ContentFormatField = NotesConvertRequestBodyV2026R0ContentFormatField.MARKDOWN, + **kwargs + ): + """ + :param content: The content to convert to a note. See the `content_format` field for supported formats. + :type content: str + :param name: The name for the created note. The `.boxnote` extension is appended automatically. + :type name: str + :param content_format: Format of the content to convert., defaults to NotesConvertRequestBodyV2026R0ContentFormatField.MARKDOWN + :type content_format: NotesConvertRequestBodyV2026R0ContentFormatField, optional + """ + super().__init__(**kwargs) + self.content = content + self.parent = parent + self.name = name + self.content_format = content_format diff --git a/box_sdk_gen/schemas/v2026_r0/notes_convert_response_v2026_r0.py b/box_sdk_gen/schemas/v2026_r0/notes_convert_response_v2026_r0.py new file mode 100644 index 00000000..76ccea3f --- /dev/null +++ b/box_sdk_gen/schemas/v2026_r0/notes_convert_response_v2026_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 NotesConvertResponseV2026R0TypeField(str, Enum): + FILE = 'file' + + +class NotesConvertResponseV2026R0(BaseObject): + _discriminator = 'type', {'file'} + + def __init__( + self, + id: str, + *, + type: NotesConvertResponseV2026R0TypeField = NotesConvertResponseV2026R0TypeField.FILE, + **kwargs + ): + """ + :param id: Box file ID of the created `.boxnote` file. + :type id: str + :param type: The Box resource type; always `file` for a Box file., defaults to NotesConvertResponseV2026R0TypeField.FILE + :type type: NotesConvertResponseV2026R0TypeField, optional + """ + super().__init__(**kwargs) + self.id = id + self.type = type diff --git a/docs/README.md b/docs/README.md index 16e8f70b..d61cf785 100644 --- a/docs/README.md +++ b/docs/README.md @@ -26,6 +26,7 @@ the SDK are available by topic: - [Collaboration allowlist exempt targets](collaboration_allowlist_exempt_targets.md) - [Collections](collections.md) - [Comments](comments.md) +- [Convert markdown to box note](convert_markdown_to_box_note.md) - [Device pinners](device_pinners.md) - [Docgen](docgen.md) - [Docgen template](docgen_template.md) diff --git a/docs/convert_markdown_to_box_note.md b/docs/convert_markdown_to_box_note.md new file mode 100644 index 00000000..c5a02efd --- /dev/null +++ b/docs/convert_markdown_to_box_note.md @@ -0,0 +1,34 @@ +# ConvertMarkdownToBoxNoteManager + +- [Convert content to Box Note](#convert-content-to-box-note) + +## Convert content to Box Note + +Creates a Box Note (`.boxnote` file) from supported source content. See the `content_format` field for supported formats. + +This operation is performed by calling function `create_note_convert_v2026_r0`. + +See the endpoint docs at +[API Reference](https://developer.box.com/reference/v2026.0/post-notes-convert/). + +_Currently we don't have an example for calling `create_note_convert_v2026_r0` in integration tests_ + +### Arguments + +- content `str` + - The content to convert to a note. See the `content_format` field for supported formats. +- content_format `CreateNoteConvertV2026R0ContentFormat` + - Format of the content to convert. +- parent `FolderReferenceV2026R0` +- name `str` + - The name for the created note. The `.boxnote` extension is appended automatically. +- box_version `BoxVersionHeaderV2026R0` + - 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 `NotesConvertResponseV2026R0`. + +The note was created successfully.