notionary 0.2.22__py3-none-any.whl → 0.2.24__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.
Files changed (105) hide show
  1. notionary/__init__.py +1 -1
  2. notionary/blocks/__init__.py +3 -1
  3. notionary/blocks/audio/__init__.py +0 -2
  4. notionary/blocks/audio/audio_element.py +92 -49
  5. notionary/blocks/audio/audio_markdown_node.py +4 -17
  6. notionary/blocks/bookmark/__init__.py +0 -2
  7. notionary/blocks/bookmark/bookmark_markdown_node.py +5 -21
  8. notionary/blocks/breadcrumbs/__init__.py +0 -2
  9. notionary/blocks/breadcrumbs/breadcrumb_markdown_node.py +2 -21
  10. notionary/blocks/bulleted_list/__init__.py +0 -2
  11. notionary/blocks/bulleted_list/bulleted_list_markdown_node.py +3 -17
  12. notionary/blocks/bulleted_list/bulleted_list_models.py +0 -1
  13. notionary/blocks/callout/__init__.py +0 -2
  14. notionary/blocks/callout/callout_markdown_node.py +4 -18
  15. notionary/blocks/callout/callout_models.py +3 -4
  16. notionary/blocks/child_database/child_database_element.py +2 -4
  17. notionary/blocks/code/code_markdown_node.py +5 -19
  18. notionary/blocks/column/__init__.py +0 -4
  19. notionary/blocks/column/column_list_markdown_node.py +3 -19
  20. notionary/blocks/column/column_markdown_node.py +4 -21
  21. notionary/blocks/divider/__init__.py +0 -2
  22. notionary/blocks/divider/divider_markdown_node.py +2 -16
  23. notionary/blocks/embed/__init__.py +0 -2
  24. notionary/blocks/embed/embed_markdown_node.py +4 -17
  25. notionary/blocks/equation/__init__.py +0 -1
  26. notionary/blocks/equation/equation_element_markdown_node.py +3 -15
  27. notionary/blocks/file/__init__.py +0 -2
  28. notionary/blocks/file/file_element.py +67 -46
  29. notionary/blocks/file/file_element_markdown_node.py +4 -17
  30. notionary/blocks/heading/__init__.py +0 -2
  31. notionary/blocks/heading/heading_markdown_node.py +5 -19
  32. notionary/blocks/heading/heading_models.py +3 -3
  33. notionary/blocks/image_block/__init__.py +0 -2
  34. notionary/blocks/image_block/image_element.py +66 -25
  35. notionary/blocks/image_block/image_markdown_node.py +5 -20
  36. notionary/{markdown → blocks/markdown}/markdown_builder.py +29 -233
  37. notionary/blocks/markdown/markdown_node.py +25 -0
  38. notionary/blocks/mixins/file_upload/__init__.py +3 -0
  39. notionary/blocks/mixins/file_upload/file_upload_mixin.py +320 -0
  40. notionary/blocks/numbered_list/__init__.py +0 -1
  41. notionary/blocks/numbered_list/numbered_list_markdown_node.py +3 -17
  42. notionary/blocks/numbered_list/numbered_list_models.py +3 -3
  43. notionary/blocks/paragraph/__init__.py +0 -2
  44. notionary/blocks/paragraph/paragraph_markdown_node.py +3 -13
  45. notionary/blocks/pdf/__init__.py +0 -2
  46. notionary/blocks/pdf/pdf_element.py +81 -32
  47. notionary/blocks/pdf/pdf_markdown_node.py +5 -18
  48. notionary/blocks/quote/__init__.py +0 -2
  49. notionary/blocks/quote/quote_markdown_node.py +3 -13
  50. notionary/blocks/registry/__init__.py +1 -2
  51. notionary/blocks/registry/block_registry.py +116 -61
  52. notionary/blocks/rich_text/text_inline_formatter.py +1 -1
  53. notionary/blocks/table/__init__.py +0 -2
  54. notionary/blocks/table/table_markdown_node.py +17 -16
  55. notionary/blocks/table_of_contents/__init__.py +0 -2
  56. notionary/blocks/table_of_contents/table_of_contents_element.py +27 -15
  57. notionary/blocks/table_of_contents/table_of_contents_markdown_node.py +3 -17
  58. notionary/blocks/table_of_contents/table_of_contents_models.py +2 -2
  59. notionary/blocks/todo/__init__.py +0 -2
  60. notionary/blocks/todo/todo_markdown_node.py +9 -20
  61. notionary/blocks/todo/todo_models.py +2 -3
  62. notionary/blocks/toggle/__init__.py +0 -2
  63. notionary/blocks/toggle/toggle_markdown_node.py +5 -19
  64. notionary/blocks/toggleable_heading/__init__.py +0 -2
  65. notionary/blocks/toggleable_heading/toggleable_heading_markdown_node.py +6 -23
  66. notionary/blocks/video/__init__.py +0 -2
  67. notionary/blocks/video/video_element.py +110 -34
  68. notionary/blocks/video/video_markdown_node.py +4 -15
  69. notionary/comments/__init__.py +26 -0
  70. notionary/comments/client.py +211 -0
  71. notionary/comments/models.py +129 -0
  72. notionary/file_upload/client.py +3 -2
  73. notionary/file_upload/models.py +10 -1
  74. notionary/file_upload/notion_file_upload.py +5 -5
  75. notionary/page/client.py +1 -6
  76. notionary/page/markdown_whitespace_processor.py +129 -0
  77. notionary/page/notion_page.py +87 -48
  78. notionary/page/page_content_deleting_service.py +1 -1
  79. notionary/page/page_content_writer.py +32 -129
  80. notionary/page/page_context.py +0 -6
  81. notionary/page/reader/handler/column_list_renderer.py +2 -2
  82. notionary/page/reader/handler/column_renderer.py +2 -2
  83. notionary/page/reader/handler/line_renderer.py +2 -2
  84. notionary/page/reader/handler/toggle_renderer.py +2 -2
  85. notionary/page/reader/handler/toggleable_heading_renderer.py +2 -2
  86. notionary/page/writer/handler/toggle_handler.py +8 -4
  87. notionary/page/writer/handler/toggleable_heading_handler.py +3 -2
  88. notionary/page/writer/markdown_to_notion_converter.py +74 -30
  89. notionary/schemas/__init__.py +3 -0
  90. notionary/schemas/base.py +73 -0
  91. notionary/shared/__init__.py +3 -0
  92. notionary/{blocks/rich_text → shared}/name_to_id_resolver.py +0 -2
  93. {notionary-0.2.22.dist-info → notionary-0.2.24.dist-info}/METADATA +15 -2
  94. {notionary-0.2.22.dist-info → notionary-0.2.24.dist-info}/RECORD +97 -95
  95. notionary/blocks/guards.py +0 -22
  96. notionary/blocks/registry/block_registry_builder.py +0 -264
  97. notionary/markdown/makdown_document_model.py +0 -0
  98. notionary/markdown/markdown_document_model.py +0 -228
  99. notionary/markdown/markdown_node.py +0 -30
  100. notionary/models/notion_database_response.py +0 -0
  101. notionary/page/writer/markdown_to_notion_formatting_post_processor.py +0 -73
  102. notionary/page/writer/markdown_to_notion_post_processor.py +0 -0
  103. /notionary/{markdown/___init__.py → blocks/markdown/markdown_document_model.py} +0 -0
  104. {notionary-0.2.22.dist-info → notionary-0.2.24.dist-info}/LICENSE +0 -0
  105. {notionary-0.2.22.dist-info → notionary-0.2.24.dist-info}/WHEEL +0 -0
@@ -12,54 +12,32 @@ from notionary.page.writer.handler import (
12
12
  ToggleableHeadingHandler,
13
13
  ToggleHandler,
14
14
  )
15
- from notionary.page.writer.markdown_to_notion_formatting_post_processor import (
16
- MarkdownToNotionFormattingPostProcessor,
17
- )
18
15
  from notionary.page.writer.notion_text_length_processor import (
19
16
  NotionTextLengthProcessor,
20
17
  )
18
+ from notionary.util.logging_mixin import LoggingMixin
19
+
20
+
21
+ class HandlerOrderValidationError(RuntimeError):
22
+ """Raised when handler chain order is incorrect."""
21
23
 
24
+ pass
22
25
 
23
- class MarkdownToNotionConverter:
26
+
27
+ class MarkdownToNotionConverter(LoggingMixin):
24
28
  """Converts Markdown text to Notion API block format with unified stack-based processing."""
25
29
 
26
30
  def __init__(self, block_registry: BlockRegistry) -> None:
27
31
  self._block_registry = block_registry
28
- self._formatting_post_processor = MarkdownToNotionFormattingPostProcessor()
29
32
  self._text_length_post_processor = NotionTextLengthProcessor()
30
-
31
33
  self._setup_handler_chain()
32
34
 
33
- def _setup_handler_chain(self) -> None:
34
- code_handler = CodeHandler()
35
- equation_handler = EquationHandler()
36
- table_handler = TableHandler()
37
- column_list_handler = ColumnListHandler()
38
- column_handler = ColumnHandler()
39
- toggle_handler = ToggleHandler()
40
- toggleable_heading_handler = ToggleableHeadingHandler()
41
- regular_handler = RegularLineHandler()
42
-
43
- # register more specific elements first
44
- code_handler.set_next(equation_handler).set_next(table_handler).set_next(
45
- column_list_handler
46
- ).set_next(column_handler).set_next(toggleable_heading_handler).set_next(
47
- toggle_handler
48
- ).set_next(
49
- regular_handler
50
- )
51
-
52
- self._handler_chain = code_handler
53
-
54
35
  async def convert(self, markdown_text: str) -> list[BlockCreateRequest]:
55
36
  if not markdown_text.strip():
56
37
  return []
57
38
 
58
39
  all_blocks = await self.process_lines(markdown_text)
59
40
 
60
- # Apply formatting post-processing (empty paragraphs)
61
- all_blocks = self._formatting_post_processor.process(all_blocks)
62
-
63
41
  # Apply text length post-processing (truncation)
64
42
  all_blocks = self._text_length_post_processor.process(all_blocks)
65
43
 
@@ -93,3 +71,69 @@ class MarkdownToNotionConverter:
93
71
  continue
94
72
 
95
73
  return result_blocks
74
+
75
+ def _setup_handler_chain(self) -> None:
76
+ code_handler = CodeHandler()
77
+ equation_handler = EquationHandler()
78
+ table_handler = TableHandler()
79
+ column_list_handler = ColumnListHandler()
80
+ column_handler = ColumnHandler()
81
+ toggle_handler = ToggleHandler()
82
+ toggleable_heading_handler = ToggleableHeadingHandler()
83
+ regular_handler = RegularLineHandler()
84
+
85
+ # Create handler chain
86
+ code_handler.set_next(equation_handler).set_next(table_handler).set_next(
87
+ column_handler
88
+ ).set_next(column_list_handler).set_next(toggleable_heading_handler).set_next(
89
+ toggle_handler
90
+ ).set_next(
91
+ regular_handler
92
+ )
93
+
94
+ self._handler_chain = code_handler
95
+
96
+ # Validate critical order - only log/error if something is wrong
97
+ self._validate_handler_order(
98
+ [
99
+ code_handler,
100
+ equation_handler,
101
+ table_handler,
102
+ column_handler,
103
+ column_list_handler,
104
+ toggleable_heading_handler,
105
+ toggle_handler,
106
+ regular_handler,
107
+ ]
108
+ )
109
+
110
+ def _validate_handler_order(self, handlers) -> None:
111
+ """Validate critical handler positioning rules - only warns/errors when needed."""
112
+ handler_classes = [handler.__class__ for handler in handlers]
113
+
114
+ # Critical: ColumnHandler MUST come before ColumnListHandler
115
+ try:
116
+ column_handler_pos = handler_classes.index(ColumnHandler)
117
+ column_list_handler_pos = handler_classes.index(ColumnListHandler)
118
+
119
+ if column_handler_pos >= column_list_handler_pos:
120
+ error_msg = (
121
+ f"CRITICAL: ColumnHandler must come BEFORE ColumnListHandler. "
122
+ f"Current order: ColumnHandler at {column_handler_pos}, ColumnListHandler at {column_list_handler_pos}. "
123
+ f"Fix: Move ColumnHandler before ColumnListHandler in _setup_handler_chain()"
124
+ )
125
+ self.logger.error(error_msg)
126
+ raise HandlerOrderValidationError(error_msg)
127
+
128
+ except ValueError as e:
129
+ error_msg = f"Missing required handlers in chain: {e}"
130
+ self.logger.error(error_msg)
131
+ raise HandlerOrderValidationError(error_msg)
132
+
133
+ # Critical: RegularLineHandler should be last (fallback)
134
+ if handler_classes[-1] != RegularLineHandler:
135
+ error_msg = (
136
+ f"WARNING: RegularLineHandler should be last handler (fallback), "
137
+ f"but {handler_classes[-1].__name__} is at the end"
138
+ )
139
+ self.logger.warning(error_msg)
@@ -0,0 +1,3 @@
1
+ from .base import NotionContentSchema
2
+
3
+ __all__ = ["NotionContentSchema"]
@@ -0,0 +1,73 @@
1
+ """
2
+ NotionContentSchema Base Class
3
+ =============================
4
+
5
+ Base class for all Notion structured output schemas with injected MarkdownBuilder
6
+ """
7
+
8
+ from pydantic import BaseModel
9
+ from notionary.blocks.markdown.markdown_builder import MarkdownBuilder
10
+
11
+
12
+ class NotionContentSchema(BaseModel):
13
+ """
14
+ Base class for all Notion content schemas.
15
+
16
+ Inherit from this and implement to_notion_content() to create
17
+ schemas that work with LLM structured output.
18
+
19
+ Example usage:
20
+
21
+ class BlogPost(NotionContentSchema):
22
+ title: str = Field(description="Catchy blog post title")
23
+ introduction: str = Field(description="Engaging opening paragraph")
24
+ main_points: List[str] = Field(description="3-5 key takeaways")
25
+ conclusion: str = Field(description="Summary and call-to-action")
26
+
27
+ def to_notion_content(self, builder: MarkdownBuilder) -> str:
28
+ return (builder
29
+ .h1(self.title)
30
+ .paragraph(self.introduction)
31
+ .h2("Key Points")
32
+ .bulleted_list(self.main_points)
33
+ .h2("Conclusion")
34
+ .paragraph(self.conclusion)
35
+ .build()
36
+ )
37
+
38
+ # Usage with LLM:
39
+ llm = ChatOpenAI(model="gpt-4o")
40
+ structured_llm = llm.with_structured_output(BlogPost)
41
+ blog = structured_llm.invoke("Write about Python async/await")
42
+
43
+ # Upload to Notion:
44
+ await blog.append_to_page("My Blog")
45
+ """
46
+
47
+ def to_notion_content(self, builder: MarkdownBuilder) -> str:
48
+ """
49
+ Build Notion content using the provided MarkdownBuilder.
50
+
51
+ Args:
52
+ builder: Empty MarkdownBuilder instance to build content with
53
+
54
+ Returns:
55
+ str: The final markdown string (user should call build() on the builder)
56
+ """
57
+ raise NotImplementedError("Subclasses must implement to_notion_content()")
58
+
59
+ async def append_to_page(self, page_name: str):
60
+ """
61
+ Upload this content directly to a Notion page.
62
+
63
+ Args:
64
+ page_name: Name of the target Notion page
65
+ """
66
+ from notionary import NotionPage
67
+
68
+ # Create fresh builder and let subclass build content
69
+ builder = MarkdownBuilder()
70
+ markdown = self.to_notion_content(builder)
71
+
72
+ page = await NotionPage.from_page_name(page_name)
73
+ await page.append_markdown(markdown)
@@ -0,0 +1,3 @@
1
+ from .name_to_id_resolver import NameIdResolver
2
+
3
+ __all__ = ["NameIdResolver"]
@@ -1,7 +1,5 @@
1
1
  from __future__ import annotations
2
2
 
3
- import logging
4
- from contextlib import contextmanager
5
3
  from typing import Optional
6
4
 
7
5
  from notionary.user.notion_user_manager import NotionUserManager
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: notionary
3
- Version: 0.2.22
3
+ Version: 0.2.24
4
4
  Summary: Python library for programmatic Notion workspace management - databases, pages, and content with advanced Markdown support
5
5
  License: MIT
6
6
  Author: Mathis Arends
@@ -15,7 +15,6 @@ Classifier: Programming Language :: Python :: 3.12
15
15
  Classifier: Programming Language :: Python :: 3.13
16
16
  Requires-Dist: aiofiles (>=24.1.0,<25.0.0)
17
17
  Requires-Dist: httpx (>=0.28.0)
18
- Requires-Dist: isort (>=6.0.1,<7.0.0)
19
18
  Requires-Dist: posthog (>=6.3.1,<7.0.0)
20
19
  Requires-Dist: pydantic (>=2.11.4)
21
20
  Requires-Dist: python-dotenv (>=1.1.0)
@@ -66,6 +65,13 @@ NOTION_SECRET=your_integration_key
66
65
 
67
66
  ### Simple Flow: Find → Create → Update
68
67
 
68
+ <video width="100%" controls>
69
+ <source src="./static/demo.mp4" type="video/mp4">
70
+ Your browser does not support the video tag.
71
+ </video>
72
+
73
+ _Demo: Converting markdown to structured Notion content with callouts, columns, and tables_
74
+
69
75
  ```python
70
76
  import asyncio
71
77
  from notionary import NotionPage, NotionDatabase
@@ -113,6 +119,13 @@ asyncio.run(main())
113
119
 
114
120
  ### Create Rich Database Entries
115
121
 
122
+ <video width="100%" controls>
123
+ <source src="./static/create_page_in_database_demo.mp4" type="video/mp4">
124
+ Your browser does not support the video tag.
125
+ </video>
126
+
127
+ _Demo: Creating a styled project page in a Notion database with properties, content, and rich formatting_
128
+
116
129
  ```python
117
130
  # Work with databases - connect and create styled entries
118
131
  db = await NotionDatabase.from_database_name("Projects")
@@ -1,30 +1,30 @@
1
- notionary/__init__.py,sha256=u6I31uJ8E_lqg17QIzylzz-mnvnLc4hmVuBGvnDwFgI,607
1
+ notionary/__init__.py,sha256=qFQ-hZah6dNnzgDYUfx7ifrkyXWpJoKFk1rwZyVuUSE,614
2
2
  notionary/base_notion_client.py,sha256=EKExy91oeVHdknK-XU2IkKB6SJgN96ZfbblRK05wnV4,7071
3
- notionary/blocks/__init__.py,sha256=CGaDCEmUepqnjkcm7X1OKdxAhtbcIZAu3fxJeySyu6o,76
3
+ notionary/blocks/__init__.py,sha256=-SsbyEnYg4YbrpJgE1zFRTelwIWva-QRqDZZZV2sTkY,85
4
4
  notionary/blocks/_bootstrap.py,sha256=8xs6EDSPdGNr7NsrxmH2pg1dvVjfbghX5N74tRALKog,9450
5
- notionary/blocks/audio/__init__.py,sha256=3158rsK4MIO_vBQV0kfZWIOKd5Cout72bdJljP-f7KM,368
6
- notionary/blocks/audio/audio_element.py,sha256=owVZmgsEulL7NBexp0smMBONXj8uVVesup7970vLfOg,4615
7
- notionary/blocks/audio/audio_markdown_node.py,sha256=xYaKYJq7OZ3ky5BxActwFYESNoPBtw3VjCjmEeD9ep0,1140
5
+ notionary/blocks/audio/__init__.py,sha256=l3mCypwOOJ1HCz4pMANlKrrV5sAWaCoU2qGQryuKOwg,304
6
+ notionary/blocks/audio/audio_element.py,sha256=FjKzdSgy-pid-iBSDb001eR3Pgpgce1PbFZwvFHEA68,6429
7
+ notionary/blocks/audio/audio_markdown_node.py,sha256=dlJWuQNeEYawol-ItdKzp-n3TUe9On0Zyl01DgBWwFM,795
8
8
  notionary/blocks/audio/audio_models.py,sha256=ts281Wgjh0FQBK4a6IKKNGPcG0U18T1euCgo83-JSg4,229
9
9
  notionary/blocks/base_block_element.py,sha256=r9W3EHIwQ2A824x2MlFGTfQpZjMvfB-fUVTI2x3peyc,1546
10
- notionary/blocks/bookmark/__init__.py,sha256=ofLnuXlG-y0C3ex-noLA92iXUFjiej5CyrxVXG_1db4,447
10
+ notionary/blocks/bookmark/__init__.py,sha256=Sln6BmxZBV-7ZaVDOSEWQ8pOL-ZHWHN25EjgqxPbIqQ,377
11
11
  notionary/blocks/bookmark/bookmark_element.py,sha256=y6wkdRor3cn9n5gE1pFnH6bc5B43YYqrwWHTXrC0GPs,3399
12
- notionary/blocks/bookmark/bookmark_markdown_node.py,sha256=5DCTQ8AlGLiJUUl4Z0WGEGF4IrJ127f3KNGFm2ZD-ug,1383
12
+ notionary/blocks/bookmark/bookmark_markdown_node.py,sha256=O9HpnQQpTwZdSYk0eTP0NNw2mL4c8Mob4jl6DmBjnhY,939
13
13
  notionary/blocks/bookmark/bookmark_models.py,sha256=kJTitF93xd0YITvP_FuwpjnBUNLeDMr7fDAXV8MAJrk,375
14
- notionary/blocks/breadcrumbs/__init__.py,sha256=vw7--1u5TAcX4l3J0eu98HbxG6wxsnPrkt7YouT_ESA,498
14
+ notionary/blocks/breadcrumbs/__init__.py,sha256=dcy-EsClgdlUqEDJSKBYvZBEttCGemABaeqZcZp5jKc,424
15
15
  notionary/blocks/breadcrumbs/breadcrumb_element.py,sha256=cVZHiMqaYL4EGphnX1OCh3Inf93TFwFosB-1PGCS2do,1268
16
- notionary/blocks/breadcrumbs/breadcrumb_markdown_node.py,sha256=tbcQOzMHx-dQGa5UAE2jowzPM_wItsb76bCGU4YIKw4,745
16
+ notionary/blocks/breadcrumbs/breadcrumb_markdown_node.py,sha256=XxJoC_2TwfkE0bxeWeisRGCA2Qhg66G27qBxsmiyjGc,359
17
17
  notionary/blocks/breadcrumbs/breadcrumb_models.py,sha256=-XGIIMYiQuGe5iXmW-1Y9Y9Yca0w6u3HbiD1SBue8sI,237
18
- notionary/blocks/bulleted_list/__init__.py,sha256=2EvFm2h-X6KUHGQhQiOYBqh-DvZbL0qT453eokd8eyw,549
18
+ notionary/blocks/bulleted_list/__init__.py,sha256=ypxv5AGCrkiOUCcLni3iVg3-XfWHZB9Ksf5GV6DOlkU,471
19
19
  notionary/blocks/bulleted_list/bulleted_list_element.py,sha256=YY2kOCgFinD7Mk6Ns9KLxm4KlNtlZoT87zcrEpq97HM,3095
20
- notionary/blocks/bulleted_list/bulleted_list_markdown_node.py,sha256=1MmGbQAbkeV3vwPlqC4ItcR-Abw8JymYWyGLEV2-HfI,827
21
- notionary/blocks/bulleted_list/bulleted_list_models.py,sha256=2rOHv8KIfTcx0z4JtK968BnLc4lkCrF8So-e5QL_FEY,561
22
- notionary/blocks/callout/__init__.py,sha256=iDLuJ4szAOY4tCL0NK_bqCzlTC109o51c1cGgDoruZg,431
20
+ notionary/blocks/bulleted_list/bulleted_list_markdown_node.py,sha256=Rnc-zYttdVR4gl7mIkxqoRg7I8LHR7rkd1pmXdcfvLk,523
21
+ notionary/blocks/bulleted_list/bulleted_list_models.py,sha256=QN21PIwAP7MQoIjZeUBwMUKTZrK6-QbDu-8NFSvpjLQ,504
22
+ notionary/blocks/callout/__init__.py,sha256=17rdvOF5W1aPxkp-pk13rLgkx6pIciCsub3ncAv_zXk,363
23
23
  notionary/blocks/callout/callout_element.py,sha256=6Ss1jv1cqAM4GuNGvuy7dCFjpp-dLavf-wXevn3IEmw,3575
24
- notionary/blocks/callout/callout_markdown_node.py,sha256=TMd2wQ0BfoQ0mgHSy5MrqCvpJvovSw7zsLrXnRrJoQs,948
25
- notionary/blocks/callout/callout_models.py,sha256=KabWhRCkW1KmTGqt23QTc5iCeVczIzRHIVevEagcKE0,860
24
+ notionary/blocks/callout/callout_markdown_node.py,sha256=2zZNMwg8uiGBqaMOUVOTlIK8kiq20IQ0Ylv7ZFUm-bc,602
25
+ notionary/blocks/callout/callout_models.py,sha256=E58ko2ujDV80HlI20S9etbCMTm6a_IaSp9waUozWTa8,863
26
26
  notionary/blocks/child_database/__init__.py,sha256=FzjjHOS9Je2oXuxLK9S9Oq56-EDEZRTJBfDzkacFpY0,368
27
- notionary/blocks/child_database/child_database_element.py,sha256=9Sho1ZuA6GA4xZHpj_iaK18WYd9mXLGr0yvkFIKLqGU,2450
27
+ notionary/blocks/child_database/child_database_element.py,sha256=1pxtoB_XTIWorYp984TpsPMZy8A5IdQ15nJALyzme-c,2279
28
28
  notionary/blocks/child_database/child_database_models.py,sha256=SP6S9tKTetKNdCkYY3QCxeXd2lq1DyfdNvDhKlhD22Q,264
29
29
  notionary/blocks/child_page/__init__.py,sha256=qaHvJqF8Bfzj0NVE1Q5uN_4o3Jl4RuNYspMZ6E7bUuk,182
30
30
  notionary/blocks/child_page/child_page_element.py,sha256=iZIJ91CQ9ZztivtSNKKA8-OD6YIGZvGsxeuD8vZ1PLg,3389
@@ -32,91 +32,96 @@ notionary/blocks/child_page/child_page_models.py,sha256=LZhziu2nf-8FopcaQi6dJKOJ
32
32
  notionary/blocks/client.py,sha256=9rhfWM3LNxYrB0bez2RKLGE2gVnBaJbrQa1qu6FSKVE,8692
33
33
  notionary/blocks/code/__init__.py,sha256=8mTDHndNb4kzDByETe2gG7-YHMrt18cf_gmV60JXHOc,345
34
34
  notionary/blocks/code/code_element.py,sha256=-8b63RxD7qJzOkMMF_eLo-z9TdsI33r0JUJc5cyFAzs,5661
35
- notionary/blocks/code/code_markdown_node.py,sha256=r25-n8FkV2alrAionnaZIPVGYLnmEw0zeJ_5HpBTWh8,3050
35
+ notionary/blocks/code/code_markdown_node.py,sha256=ZfZE9JOmBwAvkEua0wA_W9wCAjl52YBq4UrTBVlVjRM,2655
36
36
  notionary/blocks/code/code_models.py,sha256=hK-Ka9whQO-xWASr0sbhRcz-FUc5VY5Pjqa8LPW041o,2178
37
- notionary/blocks/column/__init__.py,sha256=KFza6GKRjVa59ktp0euAVSq1oblK_KXSqAfrOIiT9ps,838
37
+ notionary/blocks/column/__init__.py,sha256=r0XRwU3cEo6Te-4XkiVOPtd_VHlEVchgoI7e-jNQ9Ic,698
38
38
  notionary/blocks/column/column_element.py,sha256=1BtZ5EWq1QpUEAh-OEpvZOTZfeFFDyDKCZCSo8nskJw,2338
39
39
  notionary/blocks/column/column_list_element.py,sha256=gyAZ_Q79g5sEp24IbHHXZvyX8BRmN1jo6ahoVxXxR4E,2398
40
- notionary/blocks/column/column_list_markdown_node.py,sha256=RXwPz-d-vfAb39HZapaXiomuY8eKkUuBBEm7rPyLHl0,1396
41
- notionary/blocks/column/column_markdown_node.py,sha256=Nc7QReXOWZ0CIuUpgE9dhME4bINo18P1luC6bL0bpPA,1632
40
+ notionary/blocks/column/column_list_markdown_node.py,sha256=PW72mCWt2n-IuAYv6DwLbT_nlE0S2ka2pCfQZ9YC6_o,952
41
+ notionary/blocks/column/column_markdown_node.py,sha256=ryedjyw9z_y-SUWb7M8J-LO9-pcdE3DEscETVgIYBPk,1156
42
42
  notionary/blocks/column/column_models.py,sha256=Dv1jBWmuFjjSqyOajkh05jmxEwxF9b-LuDA4Sgw8RJI,664
43
- notionary/blocks/divider/__init__.py,sha256=GX3D_Oksg65Dam4lRGdrOGWuZec35ghuYuvF9HDt_y8,431
43
+ notionary/blocks/divider/__init__.py,sha256=rDbsdRmtXBVh-5LgmgO0Wq4y6jChy7lpxyaUd5WU2wk,363
44
44
  notionary/blocks/divider/divider_element.py,sha256=MHPctdc5-EwxTrcoA4EjEgiFzWnDZqHziKBoz6xZMrQ,1395
45
- notionary/blocks/divider/divider_markdown_node.py,sha256=XMa4txNnzeJPheNKke4poD5t36DE0Fqj963-QZ3gh8M,583
45
+ notionary/blocks/divider/divider_markdown_node.py,sha256=2yZYUMeNNG8ncmwzrn-WDj4JHAhYyaPyb9mQGNk22Cg,314
46
46
  notionary/blocks/divider/divider_models.py,sha256=A7jUBYZnE_yRLTZi-sr9sbDCrWNhAdriFNzCpDEBwGU,219
47
- notionary/blocks/embed/__init__.py,sha256=EgWphqJaJdt3CMjILKEjVexDSTz1KU0NE2rMDNZaCQ0,399
47
+ notionary/blocks/embed/__init__.py,sha256=yQehCntnQpyyP0qS6H0HpZlTg2jdOJo47kb-Gq0O8Ec,335
48
48
  notionary/blocks/embed/embed_element.py,sha256=xzDBA4OS2O4OASXRoy2oFO5WEm3hF4dVEryokGm8bwk,3594
49
- notionary/blocks/embed/embed_markdown_node.py,sha256=8pcLAT4Il1e50wIdCSL11Leq6fnGLOlwNAuKTFY-i98,908
49
+ notionary/blocks/embed/embed_markdown_node.py,sha256=0VJg6THsgVOGxxA7U-GakzNyNHDt7yqC8SJM3kvIO48,563
50
50
  notionary/blocks/embed/embed_models.py,sha256=utXtHlIIK5QA24ZJW7l0XfDtrt12DureH1DugOi9mNw,366
51
- notionary/blocks/equation/__init__.py,sha256=XP4BgCG-CFXoNI9oUBofg7j2ygZasqdJWhVbJG98kyc,455
51
+ notionary/blocks/equation/__init__.py,sha256=-6JSN3DSmf56TgkAeClAkfhH3jtHIx0MPSD2NQBRh7Q,421
52
52
  notionary/blocks/equation/equation_element.py,sha256=EME_KVHjdO9e7xnuFxlmkbzRcL1b8LrEikYzXXZGNMM,4750
53
- notionary/blocks/equation/equation_element_markdown_node.py,sha256=9Hj6S5uNMWbbHWdKRskLZyCvl8Q8B2HpDS__aZsXDmc,911
53
+ notionary/blocks/equation/equation_element_markdown_node.py,sha256=VIPSdhsyh5xhGq5INY4I8dvjNZlW_2536YmdGlfwnqM,612
54
54
  notionary/blocks/equation/equation_models.py,sha256=WIpnqHmwh2rpNTVvt6eFNzkhHejW8XMWDQbwtLIcxKw,245
55
- notionary/blocks/file/__init__.py,sha256=kYPp8iJ-EDWi1BX5E-OkgV_QacQ8ysKn__whyXXEWIw,577
56
- notionary/blocks/file/file_element.py,sha256=ShjPjsUolIrBJyTHm_QORq_aNanQwJQ0ZFNj-0wfuaA,4394
57
- notionary/blocks/file/file_element_markdown_node.py,sha256=YJoMkmlbcz7FsysnDMTc7EGubJKdRr8u1zyUnaUtgsU,1148
55
+ notionary/blocks/file/__init__.py,sha256=J40Bp-eyyzDzOU-OQ51duLHVlBtb_0WkUWumyRXyAUs,517
56
+ notionary/blocks/file/file_element.py,sha256=6B7gtn6wt7w3vnKGFZS4rmzU7FG-I_LYjFsiCtMy7i4,5203
57
+ notionary/blocks/file/file_element_markdown_node.py,sha256=XLEq6nMd5j8BesmPqTIxgdb33Rn3dXZ_YS7siowjgSU,801
58
58
  notionary/blocks/file/file_element_models.py,sha256=1eia1-OamnF52AUYtC3Ru-xi6HHsnjw9hcuslkHKXuI,850
59
- notionary/blocks/guards.py,sha256=WaZLfPWUcoPwLzhBUQ5vvVM07dZpCXnw2ObtF1mM62c,586
60
- notionary/blocks/heading/__init__.py,sha256=dg2hCVsqWv84hvtb6HAb4m1i8b0jyLXokPIYwe5NwZ8,557
59
+ notionary/blocks/heading/__init__.py,sha256=aaHtYkTQwCd7vMS4gaRYMuIS3oBhnwUJHEtMmHIzLkM,489
61
60
  notionary/blocks/heading/heading_element.py,sha256=Hdnlzj94AoYCMYZuVOl91tREn1S6hwolA4vWwMtAFWk,3894
62
- notionary/blocks/heading/heading_markdown_node.py,sha256=I8_9fg_CsZ-iTMA6PV6V8DBxwa5BDcMfF6NS70iKCbo,881
63
- notionary/blocks/heading/heading_models.py,sha256=nOEnb66tYt_653PIt-AqjGaOgefFOK6hKG09epCKSSc,794
64
- notionary/blocks/image_block/__init__.py,sha256=ACOCt1hVFzGm_l9Vb0GVATN7PZNBg7jFp1FymrAi8lw,386
65
- notionary/blocks/image_block/image_element.py,sha256=02Xkvg4IYZhx5Bb8RBQQAfg7I1fwkrFPGwTW-aMAcus,3610
66
- notionary/blocks/image_block/image_markdown_node.py,sha256=KpE2FFetUZh96ppuXkpOfauchgT5eWxqZQmfRotK-qY,1280
61
+ notionary/blocks/heading/heading_markdown_node.py,sha256=F5VLPto88EkBnWV0h8djs3wXhW76N0cq4fx9TWHSuuo,486
62
+ notionary/blocks/heading/heading_models.py,sha256=CBmLRPIsKwoKKQfEEeRqT1lZj_pDa7pkwIxKB-hwuus,784
63
+ notionary/blocks/image_block/__init__.py,sha256=MviMkAqQpTDA8dyooWNRn65XfbWfclRz0PMuGD5BYf0,322
64
+ notionary/blocks/image_block/image_element.py,sha256=_aERfgLksOJPlAIrZ74PvWwJvSn5eMoEebK9KwVPuOk,5263
65
+ notionary/blocks/image_block/image_markdown_node.py,sha256=aqkvNpNshvYKnLCS5aLsQU2slFys7VFKRVJgwnuLdOw,840
67
66
  notionary/blocks/image_block/image_models.py,sha256=vmuGwgq3uP9ojb-6IOdjsEqIKI-9uTa5_0BCMkzJV_A,229
67
+ notionary/blocks/markdown/markdown_builder.py,sha256=alruyT9IbrCjbpLeQ_1pZKdZlWW4NgmzVp4XpVwOG30,17473
68
+ notionary/blocks/markdown/markdown_document_model.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
69
+ notionary/blocks/markdown/markdown_node.py,sha256=I1E6VyIoFiM7za2krikuQHFHu2_YNq9S7Cz36Rj8iSw,699
68
70
  notionary/blocks/mixins/captions/__init__.py,sha256=hGq6UOBiSgnaWB9UXgvtuG2sLPNgs5GAaz-8vrBmh2Q,166
69
71
  notionary/blocks/mixins/captions/caption_markdown_node_mixin.py,sha256=uaT_k7cfJgDhvdAavPmRJJHeEcwVECe21dcawcffHVE,1021
70
72
  notionary/blocks/mixins/captions/caption_mixin.py,sha256=6H69_bkUWSy2vNdW01kEJuOyIopZYoL3fMQ3T7xe6XI,3342
73
+ notionary/blocks/mixins/file_upload/__init__.py,sha256=VUGw4QPs01w6cUMaWMDv5p0htKZZAjiZ9RqFilVszz8,81
74
+ notionary/blocks/mixins/file_upload/file_upload_mixin.py,sha256=hyNSn7NQigSh1__HYWDOYzFQkGt9xuzXhKei_1ZoWlo,10858
71
75
  notionary/blocks/models.py,sha256=cwUgc3wjrKA6MiEnZzCpHS35Y54jPHlIrKRPUNjZm0s,5835
72
- notionary/blocks/numbered_list/__init__.py,sha256=NcHMDTveGoYccNo6SYBgPdrIX_ZEAh37jOVpvWFKa4s,549
76
+ notionary/blocks/numbered_list/__init__.py,sha256=Q6fCQ0j9UAas8hgMiTtXpCP-RxglVnNeRK4naFgDppw,511
73
77
  notionary/blocks/numbered_list/numbered_list_element.py,sha256=ZPoLYCj0xJXeWdjeJImuTeVWd1fqeByLzMj29V4Yf1Y,2755
74
- notionary/blocks/numbered_list/numbered_list_markdown_node.py,sha256=Lf2QyBQql1JGPKrI-55ywpMcNGvoQDgKQelK5XNrSZU,785
75
- notionary/blocks/numbered_list/numbered_list_models.py,sha256=dx2abI0GawwfjGnOKKUCtM5kzMs_fSFiHOZM3vOM3d4,587
76
- notionary/blocks/paragraph/__init__.py,sha256=GjDP9az7qoYeDAaYR0utq6f0F8cFaDb-JhobLhf7ZRY,479
78
+ notionary/blocks/numbered_list/numbered_list_markdown_node.py,sha256=-GrG39S6k1OpoJqzotY9C2NhdP7HcNto0sTtNRDfPsg,481
79
+ notionary/blocks/numbered_list/numbered_list_models.py,sha256=N_h2okhIFtnE8gkTfdUbt_cM9M-6rwbn3lxWtwkLfi4,566
80
+ notionary/blocks/paragraph/__init__.py,sha256=9OSS-ZZFetlnwjCI2PmFDVJo9dV1YIUWUl0CTHJ0mJo,407
77
81
  notionary/blocks/paragraph/paragraph_element.py,sha256=cp90cL0hi9gvIoefmxd-U_xM4z5YiTYt3yO7NQ-Hyvg,2478
78
- notionary/blocks/paragraph/paragraph_markdown_node.py,sha256=PCu_KLDk5iIJ2jqB0QYziYDridrrE-Mg_ajfALh8p2s,669
82
+ notionary/blocks/paragraph/paragraph_markdown_node.py,sha256=aCYJv58EiyKi-DgQEbkwnkZT4NTANHAnWzoOzVQ1cBc,436
79
83
  notionary/blocks/paragraph/paragraph_models.py,sha256=Hm4IXYNrKqNqMy6QUt6SnIiVNZU_4a-27BH7fNBjc0o,429
80
- notionary/blocks/pdf/__init__.py,sha256=NHoP43hIioaAG5GFIkNu5e962oc57xdzax5VdeEklBo,338
81
- notionary/blocks/pdf/pdf_element.py,sha256=AIUe2FFlYnxV_WpcMD9MNI4bFDajYJ9z5hikBE1_p-k,4056
82
- notionary/blocks/pdf/pdf_markdown_node.py,sha256=V1J9egeGlvvo4zBTb1Eyv1vQ1oGuWxdm0rJ1naIMjg0,1156
84
+ notionary/blocks/pdf/__init__.py,sha256=qS6v00Rh9GXTCohnV8-yvhtt6eHmKhCegxUK1Vvl86k,280
85
+ notionary/blocks/pdf/pdf_element.py,sha256=kUBQW0m1GMrKHBt591TJDViiQ-ZLeEIqLRLJWqR-eew,5822
86
+ notionary/blocks/pdf/pdf_markdown_node.py,sha256=wKptmG1I1v9QteP_SoKmbOofSh458lcQ1-8nLKA9aS0,802
83
87
  notionary/blocks/pdf/pdf_models.py,sha256=k3GB01LNDWnvcxj-gtHSMYAwElrDqFdXkw6DFjlpZNY,293
84
- notionary/blocks/quote/__init__.py,sha256=xb5JY4k6naDYkqSQopWvTj2L9YTNMmFOaFingjUbOkU,444
88
+ notionary/blocks/quote/__init__.py,sha256=Hu3v0RfYH-9CSKazI2IcaddaePY8c6Y7o03qsppruZw,380
85
89
  notionary/blocks/quote/quote_element.py,sha256=X7YZrhg94rgvWuRi96hbetbMx_FJbYGsmto1P_Am34I,2795
86
- notionary/blocks/quote/quote_markdown_node.py,sha256=G0539a5xeMMViAzTz5PvN8KYwSZgwrs8itUfXkZ2qlQ,630
90
+ notionary/blocks/quote/quote_markdown_node.py,sha256=o7oe6XY0s1zocC79SVRLGIZ0VoGHv5znXzBtTTN47EQ,405
87
91
  notionary/blocks/quote/quote_models.py,sha256=XT1hDfYw8SZUEg-rPfHiC4_0LNVWK-Vs7J6h9PIGgNE,506
88
- notionary/blocks/registry/__init__.py,sha256=Het-sHkwxg8c0A1GlPvpm6Ca-GwfN-II55YIpLb-__A,156
89
- notionary/blocks/registry/block_registry.py,sha256=B01_6jwrIExvMpgxFHDD8P3mXtrkK0SDriNhV7o7NWY,3195
90
- notionary/blocks/registry/block_registry_builder.py,sha256=a-oID7OpW4b1bEhhsQOOnwK8evlJem-MralvdhaMYno,8866
92
+ notionary/blocks/registry/__init__.py,sha256=NswYfZQLLUlLlR5Gtdg1tAafyO9lXLldbeC5Y7WgLYk,74
93
+ notionary/blocks/registry/block_registry.py,sha256=N26nAWoNxfBlSt4gTWiJ1mqjajkcj2anAt9iDht1vDk,5394
91
94
  notionary/blocks/rich_text/__init__.py,sha256=UuOn0MmGKNqK3fLBnEcH2surwbDkZ4GF8Gpn4TLNwLc,773
92
- notionary/blocks/rich_text/name_to_id_resolver.py,sha256=crAiY1mzE8RZVvWfkGcEPdGGvRmXa51WTDxca10oWA0,6373
93
95
  notionary/blocks/rich_text/rich_text_models.py,sha256=QPCHA-vo8DoH7sLAVzOXervoeeV39JRuJkR-IGVA63Y,6278
94
- notionary/blocks/rich_text/text_inline_formatter.py,sha256=ICvQFiXDBX56EDrrTha8OvE9eao_9QDxybHP6Bex9ls,18409
96
+ notionary/blocks/rich_text/text_inline_formatter.py,sha256=8J8y27OuMLX-IvSJs0Ogmvw0gw1bgQD9n55nRjSldbg,18379
95
97
  notionary/blocks/syntax_prompt_builder.py,sha256=VwvpR8JyyKR13_ni0jUt--F7w6DoD_nzJB2LbwiJXJc,4626
96
- notionary/blocks/table/__init__.py,sha256=Vrs6w_P63cFptV-gVuDpFbU5Rg-bDf3Tf_jUk0n-s-I,511
98
+ notionary/blocks/table/__init__.py,sha256=Z9AJN899NDlGP8M0AnMBBJmy2XqZ5jLz2-EXr-u3YV0,447
97
99
  notionary/blocks/table/table_element.py,sha256=eeqFHlyQ1dG1ZxB3zdrdvF5qXPsLqSEVyNQJ70W9Rwg,8002
98
- notionary/blocks/table/table_markdown_node.py,sha256=9TJj0C380U-1iykAFouMGtlEM00Ig5-u9lmaWa-nPR8,1402
100
+ notionary/blocks/table/table_markdown_node.py,sha256=PJRgcCrChQQd_REuqmxRpYeKqMXQj_fd8o7O69c930A,1330
99
101
  notionary/blocks/table/table_models.py,sha256=P0VUkX8FOE6aFWAyhOVVMVAYGtj_LO0sqSYtlbyCpQA,643
100
- notionary/blocks/table_of_contents/__init__.py,sha256=m79PbE4vhG6UlJ8UFNQDU14_JUHxluLlPGWzgpcGkUo,598
101
- notionary/blocks/table_of_contents/table_of_contents_element.py,sha256=p4bYHB3jvkptdaB_fjKdqw_LTZmxckuXOKVUiikyc5I,2622
102
- notionary/blocks/table_of_contents/table_of_contents_markdown_node.py,sha256=en8NdehkYl6mntphjnIwCZPGXnN2o2XTQm3Q5X-hZ_o,897
103
- notionary/blocks/table_of_contents/table_of_contents_models.py,sha256=ECC5m-q-nDX34XWAqlt5sONxlbQSB0LhLJZpsjpV5xk,531
104
- notionary/blocks/todo/__init__.py,sha256=HBjy9vRu1yEUk_P4-el1aZMw9SRwpJXGcFFtUEp4Xb8,383
102
+ notionary/blocks/table_of_contents/__init__.py,sha256=4kLR62Uqijn7A6sUGoS6H_RewYo3E0-kM9-7RkLaJM4,514
103
+ notionary/blocks/table_of_contents/table_of_contents_element.py,sha256=YRMVPf09sB39kYCocwdGtezBXdPs1-04rm8J4Nln6xQ,3222
104
+ notionary/blocks/table_of_contents/table_of_contents_markdown_node.py,sha256=T4cqadSo0W__WW36Sybh0VVMbx_c9-gGYzLVDVu8XRU,560
105
+ notionary/blocks/table_of_contents/table_of_contents_models.py,sha256=QcxH8EHE4WSOv4lFlpyztpul7IQuc6wdGqNZkAUOZ9s,551
106
+ notionary/blocks/todo/__init__.py,sha256=MDQQ67F7sbKtIYSU8FWgzKCgAiOKpxUfzvH0WTF5-9k,321
105
107
  notionary/blocks/todo/todo_element.py,sha256=8rH84wHH1FEFnVd76AZrT-c-BpkwaN9hLQK7CWMCbBY,3092
106
- notionary/blocks/todo/todo_markdown_node.py,sha256=MBRHtUQBNvJdX0plxY02r-XW7vkzBc_PFZxtW03UrHo,996
107
- notionary/blocks/todo/todo_models.py,sha256=ADM2YEFPn6zXan5paS6-eYKqa9-HQ52FQjfUVInJoBI,530
108
- notionary/blocks/toggle/__init__.py,sha256=kMNpgbKBFoFaOXcfYsNOzHEpBjTZBmYEzXapysbtjNs,415
108
+ notionary/blocks/todo/todo_markdown_node.py,sha256=tvXEoIsc21hnLJh2-ESXWp9p0gVGwHZULhc5JWPHjXQ,733
109
+ notionary/blocks/todo/todo_models.py,sha256=lWzZeQ164tQlwAXWAWCnaRIvKUhOZBnCNCpGwUDyLMo,476
110
+ notionary/blocks/toggle/__init__.py,sha256=g92ihlvQuLGYNDzcYSCexK01WZbAOVNfZBSgOSSbTvA,349
109
111
  notionary/blocks/toggle/toggle_element.py,sha256=O_gv3Xz0vxtJ3-1Hi07xBbrpgLDo9FKZ_OESOhbvpAQ,4618
110
- notionary/blocks/toggle/toggle_markdown_node.py,sha256=EFGSFVsnl7bM6wm-geQ7tUplHyyZrCzZnwVzb-NbcO8,1270
112
+ notionary/blocks/toggle/toggle_markdown_node.py,sha256=qFVZsoksi82t4Iy5WwsUE9nDu4VOb8t35vgkHmkFOmU,862
111
113
  notionary/blocks/toggle/toggle_models.py,sha256=Tkqmz7bzKX7v-T9xWZLy9Eiw_ksGg4UZaacE30uZmwI,521
112
- notionary/blocks/toggleable_heading/__init__.py,sha256=hk43FCDhkSg_QbHEucXSBd96-Gj1tIMwiRxQY-vPREA,412
114
+ notionary/blocks/toggleable_heading/__init__.py,sha256=96BPG37gqHtOxWiBemrubK8AyIBtbTJuRDUn7imEHLY,324
113
115
  notionary/blocks/toggleable_heading/toggleable_heading_element.py,sha256=y3tBDWmi3IeyhFyJEmsFndhlrQls5XhJVUGUVORnXUY,4428
114
- notionary/blocks/toggleable_heading/toggleable_heading_markdown_node.py,sha256=kSo7rnYjX_9PT6kfmCbMCvndwNbtHNnLYdtznXhWXe4,1626
116
+ notionary/blocks/toggleable_heading/toggleable_heading_markdown_node.py,sha256=lqUChE-4NOvtFxhTjg0uRBWT7WQI5hd5arHJ6eBkKno,1056
115
117
  notionary/blocks/types.py,sha256=qAmcxIGQcekrLsbNZVjOcI3HYmvHz5bzFFj8Asuh8JI,3567
116
- notionary/blocks/video/__init__.py,sha256=z_lz1agYtSRv9A9bFRwPlpzmpfgf49w9uJMVkHTTsR0,376
117
- notionary/blocks/video/video_element.py,sha256=nDYcr1HwCZYVBSLPEo1qHuqU9AQ8yzS9OHQTIe3rVyA,4417
118
+ notionary/blocks/video/__init__.py,sha256=eDWiVkZYbsXqgBhdHY2ge9R21ml7-BTAMJ3T3HCajdY,312
119
+ notionary/blocks/video/video_element.py,sha256=D8CrlxKSrgRpBE9O9i1Udir85dFq3r3CYRabSIWWxWI,7149
118
120
  notionary/blocks/video/video_element_models.py,sha256=CYK2tq0qhrOxjO_ctOgRvEHM9hLjQCBXrP7wcTNlUPw,229
119
- notionary/blocks/video/video_markdown_node.py,sha256=u5OaoxLzg10PAdvo70OYgi1d-eFtTK_kUdYLAKQWdtM,1151
121
+ notionary/blocks/video/video_markdown_node.py,sha256=ORbLqVvl_o9YJrDOLUOMk7mnxyl1NSKjbMDwLPbdCSM,844
122
+ notionary/comments/__init__.py,sha256=G0OWsaN2VgbykvhLlNSweL_f0bl16j9NpidH2UNbFcQ,529
123
+ notionary/comments/client.py,sha256=vWjgPFk_TPY7peq10aJc7WTG-b0q6Fn8qirAlzlqLls,7311
124
+ notionary/comments/models.py,sha256=O2-yg-0Xrs8xrzLUa4793FlyNn3HbTRsv4dqaskI6ps,3409
120
125
  notionary/database/__init__.py,sha256=4tdML0fBzkOCpiWT6q-L--5NELFLbTPD0IUA_E8yZno,155
121
126
  notionary/database/client.py,sha256=mN_8XHvIQkRxiWbgBfvncgw4IRiCFX3bVLMLBvtk1Ig,5398
122
127
  notionary/database/database.py,sha256=sdo830KVInR4enaEaeMHaPadNfYnPLy5R3OW2f74w28,16558
@@ -127,33 +132,28 @@ notionary/database/factory.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU
127
132
  notionary/database/models.py,sha256=4LjnsltPLK4xddz_d_L7I-TnmixyCuqmKV5Mapa2i1I,7603
128
133
  notionary/database/notion_database.py,sha256=DNsb_YuMg9Fix8OmKMBBN0FSlCGNWbDbG7GIsrSOgK0,16744
129
134
  notionary/file_upload/__init__.py,sha256=7TNyiIgLMD_IGRXTwRiAmStokF3rLoG4zXPwNb9KQqk,168
130
- notionary/file_upload/client.py,sha256=X3LInvHWuJgiL_phytLRzW6rrocXegm30TmTL0sCcfY,8531
131
- notionary/file_upload/models.py,sha256=bbACznMXdg7WAlAZ6uJ6qVAj7r3GP9LlEv2T5hxcIrI,1621
132
- notionary/file_upload/notion_file_upload.py,sha256=Ul3CMicJpUodUa3SU3ihrkWU_Wa5z36mKOqSVXNc_DM,13173
133
- notionary/markdown/___init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
134
- notionary/markdown/makdown_document_model.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
135
- notionary/markdown/markdown_builder.py,sha256=q9J7FduIxrf8hSPu_5P4ZwYaGVZdvpe-qa0dyaRsBJ0,26379
136
- notionary/markdown/markdown_document_model.py,sha256=i9zMINcTlTwlqpHV9zeQfMVlni2VAl6BMjAdKSdoUeg,6409
137
- notionary/markdown/markdown_node.py,sha256=u8ApehnTCo1KnTFbtYzGuTAyUQrYPc3RSMJaUMyg0LI,717
138
- notionary/models/notion_database_response.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
139
- notionary/page/client.py,sha256=qSXWWeSpi0EnNpUOjqmvgdAMDCyKYvK9AxoMWZpIJzM,4594
135
+ notionary/file_upload/client.py,sha256=yzVCHVPkkQfPWb6Nz2QUC6XO21KJahddili2XnCTmvc,8582
136
+ notionary/file_upload/models.py,sha256=bSNgw5WzkOuotyalqkkcVC_Ue6YRHR-CSJV7nZRV_RY,1768
137
+ notionary/file_upload/notion_file_upload.py,sha256=vOEEh8g8Sj4JedrK9e-NYjJ0HXH3iGdM5N74kkVXVZQ,13221
138
+ notionary/page/client.py,sha256=IOsjWOsmODxOq-7OF0y-gcuC2HUbMIT0SvJZHrH9weQ,4520
139
+ notionary/page/markdown_whitespace_processor.py,sha256=SbWLL6bdeTGds_khDNX2mQe00lGYUFvH6PX8_xpNvBA,4634
140
140
  notionary/page/models.py,sha256=pD8FlK8KtnUrIITTd2jg_yJICakgPE4ysZiS9KiMpr0,7088
141
- notionary/page/notion_page.py,sha256=qgu4Oxfx2asyiXi2a0BmeRE3AOgsfmfVNcXv9kMC_3c,22438
142
- notionary/page/page_content_deleting_service.py,sha256=ZxGUMmT7k85IPLALfZkIJ5oQA3tMHWVW4acjdp5cB0k,4540
143
- notionary/page/page_content_writer.py,sha256=6WMDTbgjYRgJhmCrMnK4XokgVDhRWSRm55_1xceo0CA,6856
144
- notionary/page/page_context.py,sha256=qpy9J5zDdE_v7kHEE4SA14NQJP9Dj8j5gfkqccz23dU,1982
141
+ notionary/page/notion_page.py,sha256=6aQqAqiEg6gb5lISKkV6a2UzIixgOZ-7eivlvXpyHvc,23689
142
+ notionary/page/page_content_deleting_service.py,sha256=G3im6VotG1tgI-SaqoQR-gSnOloF6CEnft1qxLps4as,4546
143
+ notionary/page/page_content_writer.py,sha256=t8N7yfW--ac7szvDmTdecFEfcF5Nz95vyCQ-lpYcOUw,3046
144
+ notionary/page/page_context.py,sha256=27vrTRZP7NsaS4dEp4pBNR30Re2hh00qKlL3xt4YtpI,1773
145
145
  notionary/page/property_formatter.py,sha256=_978ViH83gfcr-XtDscWTfyBI2srGW2hzC-gzgp5NR8,3788
146
146
  notionary/page/reader/handler/__init__.py,sha256=ROMH1KvGGdQ0ANLhmIP_4LtMks9jsTTwnZKP8W0uwls,644
147
147
  notionary/page/reader/handler/base_block_renderer.py,sha256=HZwv727bvu6suT1-uzK4y-4ci54VCdi0FF_yOJYBB1g,1513
148
148
  notionary/page/reader/handler/block_processing_context.py,sha256=eSNpjQ3tpOc7sJgEm-2UAwd1UvCf-B4CtHJLS5B0lZA,1001
149
149
  notionary/page/reader/handler/block_rendering_context.py,sha256=o3ASovI71jtffDeKVtx7hZqg7P6-qXvkWBft7ZqOa_s,1583
150
- notionary/page/reader/handler/column_list_renderer.py,sha256=rYh4lOmr74j-KE8VqddVbqVyXcZ4ZRg2ig_XNJAKmX8,2011
151
- notionary/page/reader/handler/column_renderer.py,sha256=XahgbvWCNqpdKpf0fs9E2yU9_sq7F4_ByUXE8Pi_Q_4,2312
150
+ notionary/page/reader/handler/column_list_renderer.py,sha256=dPp4q13s5Fkn6HAQ1oFZ6e6phepjnqz_fFuFHSMDJ9c,2023
151
+ notionary/page/reader/handler/column_renderer.py,sha256=JkpgS9IbiNkMQozBqfqn341ThmDF71FAv3Rq8ewAa2E,2324
152
152
  notionary/page/reader/handler/equation_renderer.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
153
- notionary/page/reader/handler/line_renderer.py,sha256=TvgLZo1URsRQ4UEcaQtbAU4tGIuAX4uh3Kmemp9aRrA,2905
153
+ notionary/page/reader/handler/line_renderer.py,sha256=4Q4fHRvcWSjuDjTDVPn-My6PF8arfoAjzUqEb2MIg34,2917
154
154
  notionary/page/reader/handler/numbered_list_renderer.py,sha256=tFDfMYxFme1PuNBNi2kbIb13MGNLP5n2-NpLoEklR1E,3480
155
- notionary/page/reader/handler/toggle_renderer.py,sha256=D-kDJc1JbqM9BSGdgJxBsu1Fb8gpKU9ziNFqkS4_Tu8,2593
156
- notionary/page/reader/handler/toggleable_heading_renderer.py,sha256=vw336TY9K0v-JFu_x5xHlovCKylSITtMh2RM0YDt4lk,3374
155
+ notionary/page/reader/handler/toggle_renderer.py,sha256=n-HdxKmD3mwKTbgX-FBe71F-8KmBrYeG-nmjFJUb9Gw,2605
156
+ notionary/page/reader/handler/toggleable_heading_renderer.py,sha256=ZfmUbM0D4AvUI-bJIy5sH3Eer31Frg0Gl-hereT4A1w,3386
157
157
  notionary/page/reader/page_content_retriever.py,sha256=ruzRISReupp5TbVwmVjURBk8wE35YYatNpDFpSpnEEQ,2854
158
158
  notionary/page/search_filter_builder.py,sha256=m8NbFUoxxCEBpcWZIxClyix8NNzeohsOw7D-Fddi-qA,4599
159
159
  notionary/page/utils.py,sha256=2nfBrWeczBdPH13R3q8dKP4OY4MwEdfKbcs2UJ9kg1o,2041
@@ -166,14 +166,16 @@ notionary/page/writer/handler/line_handler.py,sha256=miuU7MXJj1Ae_B_r4a84s9tJaJ8
166
166
  notionary/page/writer/handler/line_processing_context.py,sha256=F2GxDXIOgvZHxiDP-VDe8JUHGcsszMexPG0W9E9y39E,1739
167
167
  notionary/page/writer/handler/regular_line_handler.py,sha256=2T8xOi4ybcugMJL-sPyVvU0KRVQzFSPpvLibrixIJLA,3223
168
168
  notionary/page/writer/handler/table_handler.py,sha256=5r-Uh5Unc0iTbl3PXEDvE6qVCrp6YSprpOP9FRnaLY8,2581
169
- notionary/page/writer/handler/toggle_handler.py,sha256=3ZmaAxGh4PDqk9U0Gq4FhSWdmdU4-qgQRNvv_8vQf_Q,5823
170
- notionary/page/writer/handler/toggleable_heading_handler.py,sha256=ae0Cuzzdd5c-xKBFMYjzqRkj47wErgyFoBOZ9ytd0b4,6858
171
- notionary/page/writer/markdown_to_notion_converter.py,sha256=ENeP7I2ui532rx9hOULrJC6DHwcYELSkItY5epzBWi4,3272
169
+ notionary/page/writer/handler/toggle_handler.py,sha256=619JPGxxyfLJ_wlubTTPGK17t5mULDhXM-egpeBcWqc,6013
170
+ notionary/page/writer/handler/toggleable_heading_handler.py,sha256=ZChU93q1NXFK9eW0oyR4y8wVXmxpuExPvRE2CxkoPOc,6938
171
+ notionary/page/writer/markdown_to_notion_converter.py,sha256=H_VWBBbpYpDzJ-5BkC5vONiyNZ4nHa3BP_8lOry_x9w,5086
172
172
  notionary/page/writer/markdown_to_notion_converter_context.py,sha256=Tys52QEGOzE_zDICI8W6pawCKSFGAjEqOyWTscUUysU,1033
173
- notionary/page/writer/markdown_to_notion_formatting_post_processor.py,sha256=E41t_TQYLbFTmOzREDrGOUy4gGiSu9pAP8No5Qpsi28,2368
174
- notionary/page/writer/markdown_to_notion_post_processor.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
175
173
  notionary/page/writer/markdown_to_notion_text_length_post_processor.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
176
174
  notionary/page/writer/notion_text_length_processor.py,sha256=WfXGouHs2KUFH1ASqloRkV6y7q2jS4vqbiEEMrmd7Qw,5744
175
+ notionary/schemas/__init__.py,sha256=1Wmrf4ZyU08kpvMs6KPFq11WVjSie7eM6b6rwTX9Xgw,76
176
+ notionary/schemas/base.py,sha256=iLccLV2gjGZwHFCC8mzhKKZl7MQwD-virUdFdxuJRpA,2536
177
+ notionary/shared/__init__.py,sha256=RfgVsRZHe1XVB5AjEwPzd_mSyOwpFKaBEfXMCbrXw7o,81
178
+ notionary/shared/name_to_id_resolver.py,sha256=SlxB2vmq1cMIZnL0o3U27wjYQSXeQkKURmKFy-BAqk4,6318
177
179
  notionary/telemetry/__init__.py,sha256=uzPrvkPIpbzPSHCu-tObCTmZA18l3VWqk42L8WLT-XM,511
178
180
  notionary/telemetry/service.py,sha256=FujT1ZuSHzTO0Rxa6oKlycE_Y-Qpe5lc59EGzzDf-jc,4725
179
181
  notionary/telemetry/views.py,sha256=FgFZGYaxP7pRYx-9wg18skMh_MJAwf4W3rCfe9JOZe4,1796
@@ -194,7 +196,7 @@ notionary/util/page_id_utils.py,sha256=AA00kRO-g3Cc50tf_XW_tb5RBuPKLuBxRa0D8LYhL
194
196
  notionary/util/singleton.py,sha256=CKAvykndwPRZsA3n3MAY_XdCR59MBjjKP0vtm2BcvF0,428
195
197
  notionary/util/singleton_metaclass.py,sha256=DMvrh0IbAV8nIG1oX-2Yz57Uk1YHB647DNxoI3pAT3s,809
196
198
  notionary/workspace.py,sha256=QP4WcOIdQnlVr4M7hpGaFT-Fori_QRhsV-SBC2lnwTU,3809
197
- notionary-0.2.22.dist-info/LICENSE,sha256=zOm3cRT1qD49eg7vgw95MI79rpUAZa1kRBFwL2FkAr8,1120
198
- notionary-0.2.22.dist-info/METADATA,sha256=fCrsj7caTmiKxc9Vo-hLyF1yCfxPdX_puiJIzT7DNjU,9116
199
- notionary-0.2.22.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
200
- notionary-0.2.22.dist-info/RECORD,,
199
+ notionary-0.2.24.dist-info/LICENSE,sha256=zOm3cRT1qD49eg7vgw95MI79rpUAZa1kRBFwL2FkAr8,1120
200
+ notionary-0.2.24.dist-info/METADATA,sha256=TAnB9piH5MJLjSJSgv3opZrGb7vVtqT8HFKrJr44ohM,9580
201
+ notionary-0.2.24.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
202
+ notionary-0.2.24.dist-info/RECORD,,
@@ -1,22 +0,0 @@
1
- from typing import Protocol
2
-
3
- from notionary.blocks.models import BlockCreateRequest
4
- from notionary.blocks.rich_text.rich_text_models import RichTextObject
5
-
6
-
7
- class HasRichText(Protocol):
8
- """Protocol for objects that have a rich_text attribute."""
9
-
10
- rich_text: list[RichTextObject]
11
-
12
-
13
- class HasChildren(Protocol):
14
- """Protocol for objects that have children blocks."""
15
-
16
- children: list[BlockCreateRequest]
17
-
18
-
19
- class HasRichTextAndChildren(HasRichText, HasChildren, Protocol):
20
- """Protocol for objects that have both rich_text and children."""
21
-
22
- pass