notionary 0.2.27__py3-none-any.whl → 0.2.28__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- notionary/__init__.py +5 -20
- notionary/blocks/client.py +87 -215
- notionary/blocks/enums.py +167 -0
- notionary/blocks/rich_text/markdown_rich_text_converter.py +266 -0
- notionary/blocks/rich_text/models.py +164 -0
- notionary/blocks/rich_text/name_id_resolver/__init__.py +11 -0
- notionary/blocks/rich_text/name_id_resolver/database.py +31 -0
- notionary/blocks/rich_text/name_id_resolver/page.py +34 -0
- notionary/blocks/rich_text/name_id_resolver/person.py +37 -0
- notionary/blocks/rich_text/name_id_resolver/port.py +11 -0
- notionary/blocks/rich_text/rich_text_markdown_converter.py +132 -0
- notionary/blocks/rich_text/rich_text_patterns.py +39 -0
- notionary/blocks/schemas.py +746 -0
- notionary/comments/client.py +52 -187
- notionary/comments/factory.py +40 -0
- notionary/comments/models.py +5 -127
- notionary/comments/schemas.py +240 -0
- notionary/comments/service.py +34 -0
- notionary/data_source/http/client.py +11 -0
- notionary/data_source/http/data_source_instance_client.py +94 -0
- notionary/data_source/properties/models.py +406 -0
- notionary/data_source/query/builder.py +429 -0
- notionary/data_source/query/resolver.py +114 -0
- notionary/data_source/query/schema.py +304 -0
- notionary/data_source/query/validator.py +73 -0
- notionary/data_source/schemas.py +27 -0
- notionary/data_source/service.py +353 -0
- notionary/database/client.py +30 -135
- notionary/database/database_metadata_update_client.py +19 -0
- notionary/database/schemas.py +29 -0
- notionary/database/service.py +169 -0
- notionary/exceptions/__init__.py +33 -0
- notionary/exceptions/api.py +41 -0
- notionary/exceptions/base.py +2 -0
- notionary/exceptions/block_parsing.py +16 -0
- notionary/exceptions/data_source/__init__.py +6 -0
- notionary/exceptions/data_source/builder.py +182 -0
- notionary/exceptions/data_source/properties.py +34 -0
- notionary/exceptions/properties.py +58 -0
- notionary/exceptions/search.py +33 -0
- notionary/file_upload/client.py +18 -30
- notionary/file_upload/models.py +7 -8
- notionary/file_upload/{notion_file_upload.py → service.py} +29 -64
- notionary/http/client.py +205 -0
- notionary/http/models.py +49 -0
- notionary/page/blocks/client.py +1 -0
- notionary/page/content/factory.py +68 -0
- notionary/page/content/markdown/__init__.py +5 -0
- notionary/page/content/markdown/builder.py +304 -0
- notionary/page/content/markdown/nodes/__init__.py +54 -0
- notionary/page/content/markdown/nodes/audio.py +23 -0
- notionary/page/content/markdown/nodes/base.py +12 -0
- notionary/page/content/markdown/nodes/bookmark.py +25 -0
- notionary/page/content/markdown/nodes/breadcrumb.py +14 -0
- notionary/page/content/markdown/nodes/bulleted_list.py +18 -0
- notionary/page/content/markdown/nodes/callout.py +32 -0
- notionary/page/content/markdown/nodes/code.py +30 -0
- notionary/page/content/markdown/nodes/columns.py +51 -0
- notionary/page/content/markdown/nodes/divider.py +14 -0
- notionary/page/content/markdown/nodes/embed.py +23 -0
- notionary/page/content/markdown/nodes/equation.py +19 -0
- notionary/page/content/markdown/nodes/file.py +23 -0
- notionary/page/content/markdown/nodes/heading.py +16 -0
- notionary/page/content/markdown/nodes/image.py +23 -0
- notionary/page/content/markdown/nodes/mixins/caption.py +12 -0
- notionary/page/content/markdown/nodes/numbered_list.py +15 -0
- notionary/page/content/markdown/nodes/paragraph.py +14 -0
- notionary/page/content/markdown/nodes/pdf.py +23 -0
- notionary/page/content/markdown/nodes/quote.py +15 -0
- notionary/page/content/markdown/nodes/space.py +14 -0
- notionary/page/content/markdown/nodes/table.py +45 -0
- notionary/page/content/markdown/nodes/table_of_contents.py +14 -0
- notionary/page/content/markdown/nodes/todo.py +22 -0
- notionary/page/content/markdown/nodes/toggle.py +28 -0
- notionary/page/content/markdown/nodes/toggleable_heading.py +35 -0
- notionary/page/content/markdown/nodes/video.py +23 -0
- notionary/page/content/parser/context.py +49 -0
- notionary/page/content/parser/factory.py +219 -0
- notionary/page/content/parser/parsers/__init__.py +60 -0
- notionary/page/content/parser/parsers/audio.py +40 -0
- notionary/page/content/parser/parsers/base.py +30 -0
- notionary/page/content/parser/parsers/bookmark.py +33 -0
- notionary/page/content/parser/parsers/breadcrumb.py +33 -0
- notionary/page/content/parser/parsers/bulleted_list.py +41 -0
- notionary/page/content/parser/parsers/callout.py +129 -0
- notionary/page/content/parser/parsers/caption.py +55 -0
- notionary/page/content/parser/parsers/code.py +81 -0
- notionary/page/content/parser/parsers/column.py +117 -0
- notionary/page/content/parser/parsers/column_list.py +81 -0
- notionary/page/content/parser/parsers/divider.py +33 -0
- notionary/page/content/parser/parsers/embed.py +33 -0
- notionary/page/content/parser/parsers/equation.py +65 -0
- notionary/page/content/parser/parsers/file.py +42 -0
- notionary/page/content/parser/parsers/heading.py +58 -0
- notionary/page/content/parser/parsers/image.py +42 -0
- notionary/page/content/parser/parsers/numbered_list.py +45 -0
- notionary/page/content/parser/parsers/paragraph.py +36 -0
- notionary/page/content/parser/parsers/pdf.py +42 -0
- notionary/page/content/parser/parsers/quote.py +65 -0
- notionary/page/content/parser/parsers/space.py +35 -0
- notionary/page/content/parser/parsers/table.py +144 -0
- notionary/page/content/parser/parsers/table_of_contents.py +32 -0
- notionary/page/content/parser/parsers/todo.py +58 -0
- notionary/page/content/parser/parsers/toggle.py +127 -0
- notionary/page/content/parser/parsers/toggleable_heading.py +150 -0
- notionary/page/content/parser/parsers/video.py +42 -0
- notionary/page/content/parser/post_processing/handlers/__init__.py +5 -0
- notionary/page/content/parser/post_processing/handlers/rich_text_length.py +93 -0
- notionary/page/content/parser/post_processing/handlers/rich_text_length_truncation.py +93 -0
- notionary/page/content/parser/post_processing/port.py +9 -0
- notionary/page/content/parser/post_processing/service.py +16 -0
- notionary/page/content/parser/pre_processsing/handlers/__init__.py +9 -0
- notionary/page/content/parser/pre_processsing/handlers/column_syntax.py +80 -0
- notionary/page/content/parser/pre_processsing/handlers/port.py +7 -0
- notionary/page/content/parser/pre_processsing/handlers/whitespace.py +68 -0
- notionary/page/content/parser/pre_processsing/service.py +15 -0
- notionary/page/content/parser/service.py +69 -0
- notionary/page/content/renderer/context.py +48 -0
- notionary/page/content/renderer/factory.py +240 -0
- notionary/page/content/renderer/post_processing/handlers/__init__.py +5 -0
- notionary/page/content/renderer/post_processing/handlers/numbered_list_placeholdere.py +62 -0
- notionary/page/content/renderer/post_processing/port.py +7 -0
- notionary/page/content/renderer/post_processing/service.py +15 -0
- notionary/page/content/renderer/renderers/__init__.py +57 -0
- notionary/page/content/renderer/renderers/audio.py +31 -0
- notionary/page/content/renderer/renderers/base.py +31 -0
- notionary/page/content/renderer/renderers/bookmark.py +25 -0
- notionary/page/content/renderer/renderers/breadcrumb.py +21 -0
- notionary/page/content/renderer/renderers/bulleted_list.py +48 -0
- notionary/page/content/renderer/renderers/callout.py +65 -0
- notionary/page/content/renderer/renderers/captioned_block.py +58 -0
- notionary/page/content/renderer/renderers/code.py +34 -0
- notionary/page/content/renderer/renderers/column.py +44 -0
- notionary/page/content/renderer/renderers/column_list.py +31 -0
- notionary/page/content/renderer/renderers/divider.py +22 -0
- notionary/page/content/renderer/renderers/embed.py +25 -0
- notionary/page/content/renderer/renderers/equation.py +37 -0
- notionary/page/content/renderer/renderers/fallback.py +24 -0
- notionary/page/content/renderer/renderers/file.py +40 -0
- notionary/page/content/renderer/renderers/heading.py +69 -0
- notionary/page/content/renderer/renderers/image.py +31 -0
- notionary/page/content/renderer/renderers/numbered_list.py +41 -0
- notionary/page/content/renderer/renderers/paragraph.py +40 -0
- notionary/page/content/renderer/renderers/pdf.py +31 -0
- notionary/page/content/renderer/renderers/quote.py +49 -0
- notionary/page/content/renderer/renderers/table.py +115 -0
- notionary/page/content/renderer/renderers/table_of_contents.py +26 -0
- notionary/page/content/renderer/renderers/table_row.py +17 -0
- notionary/page/content/renderer/renderers/todo.py +56 -0
- notionary/page/content/renderer/renderers/toggle.py +53 -0
- notionary/page/content/renderer/renderers/toggleable_heading.py +78 -0
- notionary/page/content/renderer/renderers/video.py +31 -0
- notionary/page/content/renderer/service.py +50 -0
- notionary/page/content/service.py +65 -0
- notionary/page/content/syntax/models.py +68 -0
- notionary/page/content/syntax/service.py +453 -0
- notionary/page/page_context.py +7 -16
- notionary/page/page_http_client.py +15 -0
- notionary/page/page_metadata_update_client.py +19 -0
- notionary/page/properties/client.py +144 -0
- notionary/page/properties/factory.py +26 -0
- notionary/page/properties/models.py +307 -0
- notionary/page/properties/service.py +257 -0
- notionary/page/schemas.py +13 -0
- notionary/page/service.py +222 -0
- notionary/shared/entity/client.py +29 -0
- notionary/shared/entity/dto_parsers.py +53 -0
- notionary/shared/entity/entity_metadata_update_client.py +41 -0
- notionary/shared/entity/schemas.py +45 -0
- notionary/shared/entity/service.py +171 -0
- notionary/shared/models/cover.py +20 -0
- notionary/shared/models/file.py +21 -0
- notionary/shared/models/icon.py +28 -0
- notionary/shared/models/parent.py +41 -0
- notionary/shared/properties/type.py +30 -0
- notionary/user/__init__.py +4 -8
- notionary/user/base.py +89 -0
- notionary/user/bot.py +70 -0
- notionary/user/client.py +22 -111
- notionary/user/person.py +41 -0
- notionary/user/schemas.py +67 -0
- notionary/user/service.py +65 -0
- notionary/utils/async_retry.py +39 -0
- notionary/utils/date.py +51 -0
- notionary/utils/fuzzy.py +56 -0
- notionary/{util/logging_mixin.py → utils/mixins/logging.py} +4 -16
- notionary/utils/pagination.py +50 -0
- notionary/utils/singleton.py +13 -0
- notionary/utils/uuid_utils.py +20 -0
- notionary/workspace/__init__.py +3 -0
- notionary/workspace/client.py +62 -0
- notionary/workspace/query/builder.py +60 -0
- notionary/workspace/query/models.py +60 -0
- notionary/workspace/query/service.py +93 -0
- notionary/workspace/schemas.py +21 -0
- notionary/workspace/service.py +116 -0
- {notionary-0.2.27.dist-info → notionary-0.2.28.dist-info}/METADATA +54 -49
- notionary-0.2.28.dist-info/RECORD +200 -0
- {notionary-0.2.27.dist-info → notionary-0.2.28.dist-info}/WHEEL +1 -1
- {notionary-0.2.27.dist-info → notionary-0.2.28.dist-info/licenses}/LICENSE +9 -9
- notionary/base_notion_client.py +0 -219
- notionary/blocks/__init__.py +0 -5
- notionary/blocks/_bootstrap.py +0 -271
- notionary/blocks/audio/__init__.py +0 -11
- notionary/blocks/audio/audio_element.py +0 -158
- notionary/blocks/audio/audio_markdown_node.py +0 -24
- notionary/blocks/audio/audio_models.py +0 -10
- notionary/blocks/base_block_element.py +0 -42
- notionary/blocks/bookmark/__init__.py +0 -12
- notionary/blocks/bookmark/bookmark_element.py +0 -83
- notionary/blocks/bookmark/bookmark_markdown_node.py +0 -28
- notionary/blocks/bookmark/bookmark_models.py +0 -15
- notionary/blocks/breadcrumbs/__init__.py +0 -15
- notionary/blocks/breadcrumbs/breadcrumb_element.py +0 -39
- notionary/blocks/breadcrumbs/breadcrumb_markdown_node.py +0 -13
- notionary/blocks/breadcrumbs/breadcrumb_models.py +0 -12
- notionary/blocks/bulleted_list/__init__.py +0 -15
- notionary/blocks/bulleted_list/bulleted_list_element.py +0 -74
- notionary/blocks/bulleted_list/bulleted_list_markdown_node.py +0 -20
- notionary/blocks/bulleted_list/bulleted_list_models.py +0 -17
- notionary/blocks/callout/__init__.py +0 -12
- notionary/blocks/callout/callout_element.py +0 -99
- notionary/blocks/callout/callout_markdown_node.py +0 -19
- notionary/blocks/callout/callout_models.py +0 -33
- notionary/blocks/child_database/__init__.py +0 -14
- notionary/blocks/child_database/child_database_element.py +0 -59
- notionary/blocks/child_database/child_database_models.py +0 -12
- notionary/blocks/child_page/__init__.py +0 -9
- notionary/blocks/child_page/child_page_element.py +0 -94
- notionary/blocks/child_page/child_page_models.py +0 -12
- notionary/blocks/code/__init__.py +0 -11
- notionary/blocks/code/code_element.py +0 -149
- notionary/blocks/code/code_markdown_node.py +0 -80
- notionary/blocks/code/code_models.py +0 -94
- notionary/blocks/column/__init__.py +0 -25
- notionary/blocks/column/column_element.py +0 -65
- notionary/blocks/column/column_list_element.py +0 -52
- notionary/blocks/column/column_list_markdown_node.py +0 -34
- notionary/blocks/column/column_markdown_node.py +0 -42
- notionary/blocks/column/column_models.py +0 -26
- notionary/blocks/divider/__init__.py +0 -12
- notionary/blocks/divider/divider_element.py +0 -41
- notionary/blocks/divider/divider_markdown_node.py +0 -11
- notionary/blocks/divider/divider_models.py +0 -12
- notionary/blocks/embed/__init__.py +0 -12
- notionary/blocks/embed/embed_element.py +0 -98
- notionary/blocks/embed/embed_markdown_node.py +0 -19
- notionary/blocks/embed/embed_models.py +0 -14
- notionary/blocks/equation/__init__.py +0 -13
- notionary/blocks/equation/equation_element.py +0 -133
- notionary/blocks/equation/equation_element_markdown_node.py +0 -23
- notionary/blocks/equation/equation_models.py +0 -11
- notionary/blocks/file/__init__.py +0 -23
- notionary/blocks/file/file_element.py +0 -133
- notionary/blocks/file/file_element_markdown_node.py +0 -24
- notionary/blocks/file/file_element_models.py +0 -39
- notionary/blocks/heading/__init__.py +0 -19
- notionary/blocks/heading/heading_element.py +0 -112
- notionary/blocks/heading/heading_markdown_node.py +0 -16
- notionary/blocks/heading/heading_models.py +0 -29
- notionary/blocks/image_block/__init__.py +0 -11
- notionary/blocks/image_block/image_element.py +0 -130
- notionary/blocks/image_block/image_markdown_node.py +0 -25
- notionary/blocks/image_block/image_models.py +0 -10
- notionary/blocks/markdown/markdown_builder.py +0 -525
- notionary/blocks/markdown/markdown_document_model.py +0 -0
- notionary/blocks/markdown/markdown_node.py +0 -25
- notionary/blocks/mixins/captions/__init__.py +0 -4
- notionary/blocks/mixins/captions/caption_markdown_node_mixin.py +0 -31
- notionary/blocks/mixins/captions/caption_mixin.py +0 -92
- notionary/blocks/mixins/file_upload/__init__.py +0 -3
- notionary/blocks/mixins/file_upload/file_upload_mixin.py +0 -320
- notionary/blocks/models.py +0 -174
- notionary/blocks/numbered_list/__init__.py +0 -16
- notionary/blocks/numbered_list/numbered_list_element.py +0 -65
- notionary/blocks/numbered_list/numbered_list_markdown_node.py +0 -17
- notionary/blocks/numbered_list/numbered_list_models.py +0 -17
- notionary/blocks/paragraph/__init__.py +0 -15
- notionary/blocks/paragraph/paragraph_element.py +0 -58
- notionary/blocks/paragraph/paragraph_markdown_node.py +0 -16
- notionary/blocks/paragraph/paragraph_models.py +0 -16
- notionary/blocks/pdf/__init__.py +0 -11
- notionary/blocks/pdf/pdf_element.py +0 -146
- notionary/blocks/pdf/pdf_markdown_node.py +0 -24
- notionary/blocks/pdf/pdf_models.py +0 -11
- notionary/blocks/quote/__init__.py +0 -14
- notionary/blocks/quote/quote_element.py +0 -75
- notionary/blocks/quote/quote_markdown_node.py +0 -16
- notionary/blocks/quote/quote_models.py +0 -18
- notionary/blocks/registry/__init__.py +0 -3
- notionary/blocks/registry/block_registry.py +0 -150
- notionary/blocks/rich_text/__init__.py +0 -33
- notionary/blocks/rich_text/rich_text_models.py +0 -221
- notionary/blocks/rich_text/text_inline_formatter.py +0 -456
- notionary/blocks/syntax_prompt_builder.py +0 -137
- notionary/blocks/table/__init__.py +0 -19
- notionary/blocks/table/table_element.py +0 -225
- notionary/blocks/table/table_markdown_node.py +0 -42
- notionary/blocks/table/table_models.py +0 -28
- notionary/blocks/table_of_contents/__init__.py +0 -17
- notionary/blocks/table_of_contents/table_of_contents_element.py +0 -80
- notionary/blocks/table_of_contents/table_of_contents_markdown_node.py +0 -21
- notionary/blocks/table_of_contents/table_of_contents_models.py +0 -18
- notionary/blocks/todo/__init__.py +0 -12
- notionary/blocks/todo/todo_element.py +0 -81
- notionary/blocks/todo/todo_markdown_node.py +0 -21
- notionary/blocks/todo/todo_models.py +0 -18
- notionary/blocks/toggle/__init__.py +0 -12
- notionary/blocks/toggle/toggle_element.py +0 -112
- notionary/blocks/toggle/toggle_markdown_node.py +0 -31
- notionary/blocks/toggle/toggle_models.py +0 -17
- notionary/blocks/toggleable_heading/__init__.py +0 -11
- notionary/blocks/toggleable_heading/toggleable_heading_element.py +0 -115
- notionary/blocks/toggleable_heading/toggleable_heading_markdown_node.py +0 -34
- notionary/blocks/types.py +0 -130
- notionary/blocks/video/__init__.py +0 -11
- notionary/blocks/video/video_element.py +0 -187
- notionary/blocks/video/video_element_models.py +0 -10
- notionary/blocks/video/video_markdown_node.py +0 -26
- notionary/comments/__init__.py +0 -26
- notionary/database/__init__.py +0 -4
- notionary/database/database.py +0 -480
- notionary/database/database_filter_builder.py +0 -173
- notionary/database/database_provider.py +0 -227
- notionary/database/exceptions.py +0 -13
- notionary/database/factory.py +0 -0
- notionary/database/models.py +0 -337
- notionary/database/notion_database.py +0 -487
- notionary/file_upload/__init__.py +0 -7
- notionary/page/client.py +0 -124
- notionary/page/markdown_whitespace_processor.py +0 -129
- notionary/page/models.py +0 -322
- notionary/page/notion_page.py +0 -712
- notionary/page/page_content_deleting_service.py +0 -117
- notionary/page/page_content_writer.py +0 -80
- notionary/page/property_formatter.py +0 -99
- notionary/page/reader/handler/__init__.py +0 -19
- notionary/page/reader/handler/base_block_renderer.py +0 -44
- notionary/page/reader/handler/block_processing_context.py +0 -35
- notionary/page/reader/handler/block_rendering_context.py +0 -48
- notionary/page/reader/handler/column_list_renderer.py +0 -51
- notionary/page/reader/handler/column_renderer.py +0 -60
- notionary/page/reader/handler/equation_renderer.py +0 -0
- notionary/page/reader/handler/line_renderer.py +0 -73
- notionary/page/reader/handler/numbered_list_renderer.py +0 -85
- notionary/page/reader/handler/toggle_renderer.py +0 -69
- notionary/page/reader/handler/toggleable_heading_renderer.py +0 -89
- notionary/page/reader/page_content_retriever.py +0 -81
- notionary/page/search_filter_builder.py +0 -132
- notionary/page/utils.py +0 -60
- notionary/page/writer/handler/__init__.py +0 -24
- notionary/page/writer/handler/code_handler.py +0 -72
- notionary/page/writer/handler/column_handler.py +0 -141
- notionary/page/writer/handler/column_list_handler.py +0 -139
- notionary/page/writer/handler/equation_handler.py +0 -74
- notionary/page/writer/handler/line_handler.py +0 -35
- notionary/page/writer/handler/line_processing_context.py +0 -54
- notionary/page/writer/handler/regular_line_handler.py +0 -86
- notionary/page/writer/handler/table_handler.py +0 -66
- notionary/page/writer/handler/toggle_handler.py +0 -159
- notionary/page/writer/handler/toggleable_heading_handler.py +0 -174
- notionary/page/writer/markdown_to_notion_converter.py +0 -139
- notionary/page/writer/markdown_to_notion_converter_context.py +0 -30
- notionary/page/writer/markdown_to_notion_text_length_post_processor.py +0 -0
- notionary/page/writer/notion_text_length_processor.py +0 -150
- notionary/schemas/__init__.py +0 -3
- notionary/schemas/base.py +0 -73
- notionary/shared/__init__.py +0 -3
- notionary/shared/name_to_id_resolver.py +0 -203
- notionary/telemetry/__init__.py +0 -19
- notionary/telemetry/service.py +0 -136
- notionary/telemetry/views.py +0 -73
- notionary/user/base_notion_user.py +0 -53
- notionary/user/models.py +0 -84
- notionary/user/notion_bot_user.py +0 -226
- notionary/user/notion_user.py +0 -255
- notionary/user/notion_user_manager.py +0 -101
- notionary/util/__init__.py +0 -15
- notionary/util/concurrency_limiter.py +0 -0
- notionary/util/factory_decorator.py +0 -0
- notionary/util/factory_only.py +0 -37
- notionary/util/fuzzy.py +0 -75
- notionary/util/page_id_utils.py +0 -27
- notionary/util/singleton.py +0 -18
- notionary/util/singleton_metaclass.py +0 -22
- notionary/workspace.py +0 -105
- notionary-0.2.27.dist-info/RECORD +0 -202
@@ -1,39 +0,0 @@
|
|
1
|
-
from __future__ import annotations
|
2
|
-
|
3
|
-
import re
|
4
|
-
from typing import Optional
|
5
|
-
|
6
|
-
from notionary.blocks.base_block_element import BaseBlockElement
|
7
|
-
from notionary.blocks.breadcrumbs.breadcrumb_models import (
|
8
|
-
BreadcrumbBlock,
|
9
|
-
CreateBreadcrumbBlock,
|
10
|
-
)
|
11
|
-
from notionary.blocks.models import Block, BlockCreateResult, BlockType
|
12
|
-
|
13
|
-
|
14
|
-
class BreadcrumbElement(BaseBlockElement):
|
15
|
-
"""
|
16
|
-
Handles conversion between Markdown breadcrumb marker and Notion breadcrumb blocks.
|
17
|
-
|
18
|
-
Markdown syntax:
|
19
|
-
[breadcrumb]
|
20
|
-
"""
|
21
|
-
|
22
|
-
BREADCRUMB_MARKER = "[breadcrumb]"
|
23
|
-
PATTERN = re.compile(r"^\[breadcrumb\]\s*$", re.IGNORECASE)
|
24
|
-
|
25
|
-
@classmethod
|
26
|
-
def match_notion(cls, block: Block) -> bool:
|
27
|
-
# Kein extra Payload – nur Typ prüfen
|
28
|
-
return block.type == BlockType.BREADCRUMB and block.breadcrumb
|
29
|
-
|
30
|
-
@classmethod
|
31
|
-
async def markdown_to_notion(cls, text: str) -> BlockCreateResult:
|
32
|
-
if not cls.PATTERN.match(text.strip()):
|
33
|
-
return None
|
34
|
-
return CreateBreadcrumbBlock(breadcrumb=BreadcrumbBlock())
|
35
|
-
|
36
|
-
@classmethod
|
37
|
-
async def notion_to_markdown(cls, block: Block) -> Optional[str]:
|
38
|
-
if block.type == BlockType.BREADCRUMB and block.breadcrumb:
|
39
|
-
return cls.BREADCRUMB_MARKER
|
@@ -1,13 +0,0 @@
|
|
1
|
-
from notionary.blocks.markdown.markdown_node import MarkdownNode
|
2
|
-
|
3
|
-
|
4
|
-
class BreadcrumbMarkdownNode(MarkdownNode):
|
5
|
-
"""
|
6
|
-
Enhanced Breadcrumb node with Pydantic integration.
|
7
|
-
Programmatic interface for creating Markdown breadcrumb blocks.
|
8
|
-
Example:
|
9
|
-
[breadcrumb]
|
10
|
-
"""
|
11
|
-
|
12
|
-
def to_markdown(self) -> str:
|
13
|
-
return "[breadcrumb]"
|
@@ -1,15 +0,0 @@
|
|
1
|
-
from notionary.blocks.bulleted_list.bulleted_list_element import BulletedListElement
|
2
|
-
from notionary.blocks.bulleted_list.bulleted_list_markdown_node import (
|
3
|
-
BulletedListMarkdownNode,
|
4
|
-
)
|
5
|
-
from notionary.blocks.bulleted_list.bulleted_list_models import (
|
6
|
-
BulletedListItemBlock,
|
7
|
-
CreateBulletedListItemBlock,
|
8
|
-
)
|
9
|
-
|
10
|
-
__all__ = [
|
11
|
-
"BulletedListElement",
|
12
|
-
"BulletedListItemBlock",
|
13
|
-
"CreateBulletedListItemBlock",
|
14
|
-
"BulletedListMarkdownNode",
|
15
|
-
]
|
@@ -1,74 +0,0 @@
|
|
1
|
-
from __future__ import annotations
|
2
|
-
|
3
|
-
import re
|
4
|
-
from typing import Optional
|
5
|
-
|
6
|
-
from notionary.blocks.base_block_element import BaseBlockElement
|
7
|
-
from notionary.blocks.bulleted_list.bulleted_list_models import (
|
8
|
-
BulletedListItemBlock,
|
9
|
-
CreateBulletedListItemBlock,
|
10
|
-
)
|
11
|
-
from notionary.blocks.syntax_prompt_builder import BlockElementMarkdownInformation
|
12
|
-
from notionary.blocks.models import Block, BlockCreateResult, BlockType
|
13
|
-
from notionary.blocks.rich_text.text_inline_formatter import TextInlineFormatter
|
14
|
-
|
15
|
-
|
16
|
-
class BulletedListElement(BaseBlockElement):
|
17
|
-
"""Class for converting between Markdown bullet lists and Notion bulleted list items."""
|
18
|
-
|
19
|
-
# Regex for markdown bullets (excluding todo items [ ] or [x])
|
20
|
-
PATTERN = re.compile(r"^(\s*)[*\-+]\s+(?!\[[ x]\])(.+)$")
|
21
|
-
|
22
|
-
@classmethod
|
23
|
-
def match_notion(cls, block: Block) -> bool:
|
24
|
-
"""Check if this element can handle the given Notion block."""
|
25
|
-
return block.type == BlockType.BULLETED_LIST_ITEM and block.bulleted_list_item
|
26
|
-
|
27
|
-
@classmethod
|
28
|
-
async def markdown_to_notion(cls, text: str) -> BlockCreateResult:
|
29
|
-
"""
|
30
|
-
Convert a markdown bulleted list item into a Notion BulletedListItemBlock.
|
31
|
-
"""
|
32
|
-
if not (match := cls.PATTERN.match(text.strip())):
|
33
|
-
return None
|
34
|
-
|
35
|
-
# Extract the content part (second capture group)
|
36
|
-
content = match.group(2)
|
37
|
-
|
38
|
-
# Parse inline markdown formatting into RichTextObject list
|
39
|
-
rich_text = await TextInlineFormatter.parse_inline_formatting(content)
|
40
|
-
|
41
|
-
# Return a properly typed Notion block
|
42
|
-
bulleted_list_content = BulletedListItemBlock(
|
43
|
-
rich_text=rich_text, color="default"
|
44
|
-
)
|
45
|
-
return CreateBulletedListItemBlock(bulleted_list_item=bulleted_list_content)
|
46
|
-
|
47
|
-
@classmethod
|
48
|
-
async def notion_to_markdown(cls, block: Block) -> Optional[str]:
|
49
|
-
"""Convert Notion bulleted_list_item block to Markdown."""
|
50
|
-
if block.type != BlockType.BULLETED_LIST_ITEM or not block.bulleted_list_item:
|
51
|
-
return None
|
52
|
-
|
53
|
-
rich_list = block.bulleted_list_item.rich_text
|
54
|
-
if not rich_list:
|
55
|
-
return "-"
|
56
|
-
|
57
|
-
text = await TextInlineFormatter.extract_text_with_formatting(rich_list)
|
58
|
-
return f"- {text}"
|
59
|
-
|
60
|
-
@classmethod
|
61
|
-
def get_system_prompt_information(cls) -> Optional[BlockElementMarkdownInformation]:
|
62
|
-
"""Get system prompt information for bulleted list blocks."""
|
63
|
-
return BlockElementMarkdownInformation(
|
64
|
-
block_type=cls.__name__,
|
65
|
-
description="Bulleted list items create unordered lists with bullet points",
|
66
|
-
syntax_examples=[
|
67
|
-
"- First item",
|
68
|
-
"* Second item",
|
69
|
-
"+ Third item",
|
70
|
-
"- Item with **bold text**",
|
71
|
-
"- Item with *italic text*",
|
72
|
-
],
|
73
|
-
usage_guidelines="Use -, *, or + to create bullet points. Supports inline formatting like bold, italic, and links. Do not use for todo items (use [ ] or [x] for those).",
|
74
|
-
)
|
@@ -1,20 +0,0 @@
|
|
1
|
-
from notionary.blocks.markdown.markdown_node import MarkdownNode
|
2
|
-
|
3
|
-
|
4
|
-
class BulletedListMarkdownNode(MarkdownNode):
|
5
|
-
"""
|
6
|
-
Enhanced BulletedList node with Pydantic integration.
|
7
|
-
Programmatic interface for creating Markdown bulleted list items.
|
8
|
-
Example:
|
9
|
-
- First item
|
10
|
-
- Second item
|
11
|
-
- Third item
|
12
|
-
"""
|
13
|
-
|
14
|
-
texts: list[str]
|
15
|
-
|
16
|
-
def to_markdown(self) -> str:
|
17
|
-
result = []
|
18
|
-
for text in self.texts:
|
19
|
-
result.append(f"- {text}")
|
20
|
-
return "\n".join(result)
|
@@ -1,17 +0,0 @@
|
|
1
|
-
from typing import Literal
|
2
|
-
|
3
|
-
from pydantic import BaseModel, Field
|
4
|
-
|
5
|
-
from notionary.blocks.models import Block
|
6
|
-
from notionary.blocks.rich_text import RichTextObject
|
7
|
-
from notionary.blocks.types import BlockColor
|
8
|
-
|
9
|
-
|
10
|
-
class BulletedListItemBlock(BaseModel):
|
11
|
-
rich_text: list[RichTextObject]
|
12
|
-
color: BlockColor = BlockColor.DEFAULT
|
13
|
-
|
14
|
-
|
15
|
-
class CreateBulletedListItemBlock(BaseModel):
|
16
|
-
type: Literal["bulleted_list_item"] = "bulleted_list_item"
|
17
|
-
bulleted_list_item: BulletedListItemBlock
|
@@ -1,12 +0,0 @@
|
|
1
|
-
from notionary.blocks.callout.callout_element import CalloutElement
|
2
|
-
from notionary.blocks.callout.callout_markdown_node import (
|
3
|
-
CalloutMarkdownNode,
|
4
|
-
)
|
5
|
-
from notionary.blocks.callout.callout_models import CalloutBlock, CreateCalloutBlock
|
6
|
-
|
7
|
-
__all__ = [
|
8
|
-
"CalloutElement",
|
9
|
-
"CalloutBlock",
|
10
|
-
"CreateCalloutBlock",
|
11
|
-
"CalloutMarkdownNode",
|
12
|
-
]
|
@@ -1,99 +0,0 @@
|
|
1
|
-
from __future__ import annotations
|
2
|
-
|
3
|
-
import re
|
4
|
-
from typing import Optional
|
5
|
-
|
6
|
-
from notionary.blocks.base_block_element import BaseBlockElement
|
7
|
-
from notionary.blocks.callout.callout_models import (
|
8
|
-
CalloutBlock,
|
9
|
-
CreateCalloutBlock,
|
10
|
-
EmojiIcon,
|
11
|
-
IconObject,
|
12
|
-
)
|
13
|
-
from notionary.blocks.syntax_prompt_builder import BlockElementMarkdownInformation
|
14
|
-
from notionary.blocks.models import Block, BlockCreateResult, BlockType
|
15
|
-
from notionary.blocks.rich_text.text_inline_formatter import TextInlineFormatter
|
16
|
-
|
17
|
-
|
18
|
-
class CalloutElement(BaseBlockElement):
|
19
|
-
"""
|
20
|
-
Handles conversion between Markdown callouts and Notion callout blocks.
|
21
|
-
|
22
|
-
Markdown callout syntax:
|
23
|
-
- [callout](Text) - Simple callout with default emoji
|
24
|
-
- [callout](Text "emoji") - Callout with custom emoji
|
25
|
-
|
26
|
-
Where:
|
27
|
-
- Text is the required callout content
|
28
|
-
- emoji is an optional emoji character (enclosed in quotes)
|
29
|
-
"""
|
30
|
-
|
31
|
-
PATTERN = re.compile(
|
32
|
-
r"^\[callout\]\(" # prefix
|
33
|
-
r"([^\"]+?)" # content
|
34
|
-
r"(?:\s+\"([^\"]+)\")?" # optional emoji
|
35
|
-
r"\)$"
|
36
|
-
)
|
37
|
-
|
38
|
-
DEFAULT_EMOJI = "💡"
|
39
|
-
DEFAULT_COLOR = "gray_background"
|
40
|
-
|
41
|
-
@classmethod
|
42
|
-
def match_notion(cls, block: Block) -> bool:
|
43
|
-
return block.type == BlockType.CALLOUT and block.callout
|
44
|
-
|
45
|
-
@classmethod
|
46
|
-
async def markdown_to_notion(cls, text: str) -> BlockCreateResult:
|
47
|
-
"""Convert a markdown callout into a Notion CalloutBlock."""
|
48
|
-
match = cls.PATTERN.match(text.strip())
|
49
|
-
if not match:
|
50
|
-
return None
|
51
|
-
|
52
|
-
content, emoji = match.group(1), match.group(2)
|
53
|
-
if not content:
|
54
|
-
return None
|
55
|
-
|
56
|
-
if not emoji:
|
57
|
-
emoji = cls.DEFAULT_EMOJI
|
58
|
-
|
59
|
-
rich_text = await TextInlineFormatter.parse_inline_formatting(content.strip())
|
60
|
-
|
61
|
-
callout_content = CalloutBlock(
|
62
|
-
rich_text=rich_text,
|
63
|
-
icon=EmojiIcon(emoji=emoji),
|
64
|
-
color=cls.DEFAULT_COLOR,
|
65
|
-
)
|
66
|
-
return CreateCalloutBlock(callout=callout_content)
|
67
|
-
|
68
|
-
@classmethod
|
69
|
-
async def notion_to_markdown(cls, block: Block) -> Optional[str]:
|
70
|
-
if block.type != BlockType.CALLOUT or not block.callout:
|
71
|
-
return None
|
72
|
-
|
73
|
-
data = block.callout
|
74
|
-
|
75
|
-
content = await TextInlineFormatter.extract_text_with_formatting(data.rich_text)
|
76
|
-
if not content:
|
77
|
-
return None
|
78
|
-
|
79
|
-
icon: Optional[IconObject] = block.callout.icon
|
80
|
-
emoji_char = icon.emoji if isinstance(icon, EmojiIcon) else cls.DEFAULT_EMOJI
|
81
|
-
|
82
|
-
if emoji_char and emoji_char != cls.DEFAULT_EMOJI:
|
83
|
-
return f'[callout]({content} "{emoji_char}")'
|
84
|
-
return f"[callout]({content})"
|
85
|
-
|
86
|
-
@classmethod
|
87
|
-
def get_system_prompt_information(cls) -> Optional[BlockElementMarkdownInformation]:
|
88
|
-
"""Get system prompt information for callout blocks."""
|
89
|
-
return BlockElementMarkdownInformation(
|
90
|
-
block_type=cls.__name__,
|
91
|
-
description="Callout blocks create highlighted text boxes with optional custom emojis for emphasis",
|
92
|
-
syntax_examples=[
|
93
|
-
"[callout](This is important information)",
|
94
|
-
'[callout](Warning message "⚠️")',
|
95
|
-
'[callout](Success message "✅")',
|
96
|
-
"[callout](Note with default emoji)",
|
97
|
-
],
|
98
|
-
usage_guidelines="Use for highlighting important information, warnings, tips, or notes. Default emoji is 💡. Custom emoji should be provided in quotes after the text content.",
|
99
|
-
)
|
@@ -1,19 +0,0 @@
|
|
1
|
-
from typing import Optional
|
2
|
-
from notionary.blocks.markdown.markdown_node import MarkdownNode
|
3
|
-
|
4
|
-
|
5
|
-
class CalloutMarkdownNode(MarkdownNode):
|
6
|
-
"""
|
7
|
-
Enhanced Callout node with Pydantic integration.
|
8
|
-
Programmatic interface for creating Notion-style callout Markdown blocks.
|
9
|
-
Example: [callout](This is important "⚠️")
|
10
|
-
"""
|
11
|
-
|
12
|
-
text: str
|
13
|
-
emoji: Optional[str] = None
|
14
|
-
|
15
|
-
def to_markdown(self) -> str:
|
16
|
-
if self.emoji and self.emoji != "💡":
|
17
|
-
return f'[callout]({self.text} "{self.emoji}")'
|
18
|
-
else:
|
19
|
-
return f"[callout]({self.text})"
|
@@ -1,33 +0,0 @@
|
|
1
|
-
from typing import Literal, Optional, Union
|
2
|
-
|
3
|
-
from pydantic import BaseModel, Field, model_serializer
|
4
|
-
|
5
|
-
from notionary.blocks.file.file_element_models import FileBlock
|
6
|
-
from notionary.blocks.models import Block
|
7
|
-
from notionary.blocks.rich_text.rich_text_models import RichTextObject
|
8
|
-
from notionary.blocks.types import BlockColor
|
9
|
-
|
10
|
-
|
11
|
-
class EmojiIcon(BaseModel):
|
12
|
-
type: Literal["emoji"] = "emoji"
|
13
|
-
emoji: str
|
14
|
-
|
15
|
-
|
16
|
-
class FileIcon(BaseModel):
|
17
|
-
type: Literal["file"] = "file"
|
18
|
-
file: FileBlock
|
19
|
-
|
20
|
-
|
21
|
-
IconObject = Union[EmojiIcon, FileIcon]
|
22
|
-
|
23
|
-
|
24
|
-
class CalloutBlock(BaseModel):
|
25
|
-
rich_text: list[RichTextObject]
|
26
|
-
color: BlockColor = BlockColor.DEFAULT
|
27
|
-
icon: Optional[IconObject] = None
|
28
|
-
children: Optional[list[Block]] = None
|
29
|
-
|
30
|
-
|
31
|
-
class CreateCalloutBlock(BaseModel):
|
32
|
-
type: Literal["callout"] = "callout"
|
33
|
-
callout: CalloutBlock
|
@@ -1,14 +0,0 @@
|
|
1
|
-
"""
|
2
|
-
Child Database Block Module
|
3
|
-
|
4
|
-
This module provides functionality for handling Notion child database blocks.
|
5
|
-
"""
|
6
|
-
|
7
|
-
from .child_database_element import ChildDatabaseElement
|
8
|
-
from .child_database_models import ChildDatabaseBlock, CreateChildDatabaseBlock
|
9
|
-
|
10
|
-
__all__ = [
|
11
|
-
"ChildDatabaseElement",
|
12
|
-
"ChildDatabaseBlock",
|
13
|
-
"CreateChildDatabaseBlock",
|
14
|
-
]
|
@@ -1,59 +0,0 @@
|
|
1
|
-
from __future__ import annotations
|
2
|
-
|
3
|
-
import re
|
4
|
-
from typing import Optional
|
5
|
-
|
6
|
-
from notionary.blocks.base_block_element import BaseBlockElement
|
7
|
-
from notionary.blocks.syntax_prompt_builder import BlockElementMarkdownInformation
|
8
|
-
from notionary.blocks.models import Block, BlockType
|
9
|
-
from notionary.util import LoggingMixin
|
10
|
-
|
11
|
-
|
12
|
-
class ChildDatabaseElement(BaseBlockElement, LoggingMixin):
|
13
|
-
"""
|
14
|
-
Handles conversion between Markdown database references and Notion child database blocks.
|
15
|
-
|
16
|
-
Creates new databases when converting from markdown.
|
17
|
-
"""
|
18
|
-
|
19
|
-
PATTERN_BRACKET = re.compile(r"^\[database:\s*(.+)\]$", re.IGNORECASE)
|
20
|
-
PATTERN_EMOJI = re.compile(r"^📊\s*(.+)$")
|
21
|
-
|
22
|
-
@classmethod
|
23
|
-
def match_notion(cls, block: Block) -> bool:
|
24
|
-
return block.type == BlockType.CHILD_DATABASE and block.child_database
|
25
|
-
|
26
|
-
@classmethod
|
27
|
-
async def markdown_to_notion(cls, text: str) -> Optional[str]:
|
28
|
-
"""
|
29
|
-
Convert markdown database syntax to actual Notion database.
|
30
|
-
Returns the database_id if successful, None otherwise.
|
31
|
-
"""
|
32
|
-
return None
|
33
|
-
|
34
|
-
@classmethod
|
35
|
-
async def notion_to_markdown(cls, block: Block) -> Optional[str]:
|
36
|
-
if block.type != BlockType.CHILD_DATABASE or not block.child_database:
|
37
|
-
return None
|
38
|
-
|
39
|
-
title = block.child_database.title
|
40
|
-
if not title or not title.strip():
|
41
|
-
return None
|
42
|
-
|
43
|
-
# Use bracket syntax for output
|
44
|
-
return f"[database: {title.strip()}]"
|
45
|
-
|
46
|
-
@classmethod
|
47
|
-
def get_system_prompt_information(cls) -> Optional[BlockElementMarkdownInformation]:
|
48
|
-
"""Get system prompt information for child database blocks."""
|
49
|
-
return BlockElementMarkdownInformation(
|
50
|
-
block_type=cls.__name__,
|
51
|
-
description="Creates new embedded databases within a Notion page",
|
52
|
-
syntax_examples=[
|
53
|
-
"[database: Project Tasks]",
|
54
|
-
"[database: Customer Information]",
|
55
|
-
"📊 Sales Pipeline",
|
56
|
-
"📊 Team Directory",
|
57
|
-
],
|
58
|
-
usage_guidelines="Use to create new databases that will be embedded in the page. The database will be created with a basic 'Name' property and can be customized later.",
|
59
|
-
)
|
@@ -1,12 +0,0 @@
|
|
1
|
-
from typing import Literal
|
2
|
-
|
3
|
-
from pydantic import BaseModel
|
4
|
-
|
5
|
-
|
6
|
-
class ChildDatabaseBlock(BaseModel):
|
7
|
-
title: str
|
8
|
-
|
9
|
-
|
10
|
-
class CreateChildDatabaseBlock(BaseModel):
|
11
|
-
type: Literal["child_database"] = "child_database"
|
12
|
-
child_database: ChildDatabaseBlock
|
@@ -1,94 +0,0 @@
|
|
1
|
-
from __future__ import annotations
|
2
|
-
|
3
|
-
import re
|
4
|
-
from typing import Optional
|
5
|
-
|
6
|
-
from notionary.blocks.base_block_element import BaseBlockElement
|
7
|
-
from notionary.blocks.syntax_prompt_builder import BlockElementMarkdownInformation
|
8
|
-
from notionary.blocks.models import Block, BlockCreateResult, BlockType
|
9
|
-
from notionary.page.page_context import get_page_context
|
10
|
-
|
11
|
-
|
12
|
-
class ChildPageElement(BaseBlockElement):
|
13
|
-
"""
|
14
|
-
Handles conversion between Markdown page references and Notion child page blocks.
|
15
|
-
|
16
|
-
Creates new pages when converting from markdown.
|
17
|
-
"""
|
18
|
-
|
19
|
-
PATTERN_BRACKET = re.compile(r"^\[page:\s*(.+)\]$", re.IGNORECASE)
|
20
|
-
PATTERN_EMOJI = re.compile(r"^[📝📄]\s*(.+)$")
|
21
|
-
|
22
|
-
@classmethod
|
23
|
-
def match_notion(cls, block: Block) -> bool:
|
24
|
-
return block.type == BlockType.CHILD_PAGE and getattr(block, "child_page", None)
|
25
|
-
|
26
|
-
@classmethod
|
27
|
-
async def markdown_to_notion(cls, text: str) -> Optional[BlockCreateResult]:
|
28
|
-
"""
|
29
|
-
Convert markdown page syntax to an actual Notion page.
|
30
|
-
Returns None since child_page blocks are created implicitly via Pages API (not Blocks API).
|
31
|
-
"""
|
32
|
-
context = get_page_context()
|
33
|
-
|
34
|
-
text = text.strip()
|
35
|
-
|
36
|
-
match = cls.PATTERN_BRACKET.match(text)
|
37
|
-
if not match:
|
38
|
-
match = cls.PATTERN_EMOJI.match(text)
|
39
|
-
|
40
|
-
if not match:
|
41
|
-
return None
|
42
|
-
|
43
|
-
title = match.group(1).strip()
|
44
|
-
if not title:
|
45
|
-
return None
|
46
|
-
|
47
|
-
# Reject multiline titles
|
48
|
-
if "\n" in title or "\r" in title:
|
49
|
-
return None
|
50
|
-
|
51
|
-
try:
|
52
|
-
# Create the actual page using context
|
53
|
-
await context.page_client.create_page(
|
54
|
-
title=title,
|
55
|
-
parent_page_id=context.page_id,
|
56
|
-
)
|
57
|
-
# Return None as per BaseBlockElement convention:
|
58
|
-
# child_page blocks cannot be written through the Blocks API directly.
|
59
|
-
# Creating a page under the parent page will automatically insert a child_page block.
|
60
|
-
return None
|
61
|
-
|
62
|
-
except Exception as e:
|
63
|
-
print(f"Failed to create page '{title}': {e}")
|
64
|
-
return None
|
65
|
-
|
66
|
-
@classmethod
|
67
|
-
async def notion_to_markdown(cls, block: Block) -> Optional[str]:
|
68
|
-
if block.type != BlockType.CHILD_PAGE or not getattr(block, "child_page", None):
|
69
|
-
return None
|
70
|
-
|
71
|
-
title = block.child_page.title
|
72
|
-
if not title or not title.strip():
|
73
|
-
return None
|
74
|
-
|
75
|
-
# Use bracket syntax for output
|
76
|
-
return f"[page: {title.strip()}]"
|
77
|
-
|
78
|
-
@classmethod
|
79
|
-
def get_system_prompt_information(cls) -> Optional[BlockElementMarkdownInformation]:
|
80
|
-
"""Get system prompt information for child page blocks."""
|
81
|
-
return BlockElementMarkdownInformation(
|
82
|
-
block_type=cls.__name__,
|
83
|
-
description="Creates new sub-pages within a Notion page.",
|
84
|
-
syntax_examples=[
|
85
|
-
"[page: Meeting Notes]",
|
86
|
-
"[page: Ideas]",
|
87
|
-
"📝 Project Overview",
|
88
|
-
"📄 Research Log",
|
89
|
-
],
|
90
|
-
usage_guidelines=(
|
91
|
-
"Use to create new pages that will appear as child_page blocks in the current page. "
|
92
|
-
"Pages are created via the Pages API with the current page as parent."
|
93
|
-
),
|
94
|
-
)
|
@@ -1,11 +0,0 @@
|
|
1
|
-
from notionary.blocks.code.code_element import CodeElement
|
2
|
-
from notionary.blocks.code.code_markdown_node import CodeMarkdownNode
|
3
|
-
from notionary.blocks.code.code_models import CodeBlock, CodeLanguage, CreateCodeBlock
|
4
|
-
|
5
|
-
__all__ = [
|
6
|
-
"CodeElement",
|
7
|
-
"CodeBlock",
|
8
|
-
"CodeLanguage",
|
9
|
-
"CreateCodeBlock",
|
10
|
-
"CodeMarkdownNode",
|
11
|
-
]
|