notionary 0.2.23__tar.gz → 0.2.25__tar.gz

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 (233) hide show
  1. notionary-0.2.25/PKG-INFO +270 -0
  2. notionary-0.2.25/README.md +246 -0
  3. {notionary-0.2.23 → notionary-0.2.25}/notionary/__init__.py +1 -1
  4. notionary-0.2.25/notionary/blocks/__init__.py +5 -0
  5. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/audio/__init__.py +0 -2
  6. notionary-0.2.25/notionary/blocks/audio/audio_element.py +158 -0
  7. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/audio/audio_markdown_node.py +4 -17
  8. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/bookmark/__init__.py +0 -2
  9. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/bookmark/bookmark_markdown_node.py +5 -21
  10. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/breadcrumbs/__init__.py +0 -2
  11. notionary-0.2.25/notionary/blocks/breadcrumbs/breadcrumb_markdown_node.py +13 -0
  12. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/bulleted_list/__init__.py +0 -2
  13. notionary-0.2.25/notionary/blocks/bulleted_list/bulleted_list_markdown_node.py +20 -0
  14. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/bulleted_list/bulleted_list_models.py +0 -1
  15. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/callout/__init__.py +0 -2
  16. notionary-0.2.25/notionary/blocks/callout/callout_markdown_node.py +19 -0
  17. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/callout/callout_models.py +3 -4
  18. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/code/code_markdown_node.py +5 -19
  19. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/column/__init__.py +0 -4
  20. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/column/column_list_markdown_node.py +3 -19
  21. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/column/column_markdown_node.py +4 -21
  22. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/divider/__init__.py +0 -2
  23. notionary-0.2.25/notionary/blocks/divider/divider_markdown_node.py +11 -0
  24. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/embed/__init__.py +0 -2
  25. notionary-0.2.25/notionary/blocks/embed/embed_markdown_node.py +19 -0
  26. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/equation/__init__.py +0 -1
  27. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/equation/equation_element_markdown_node.py +3 -15
  28. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/file/__init__.py +0 -2
  29. notionary-0.2.25/notionary/blocks/file/file_element.py +133 -0
  30. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/file/file_element_markdown_node.py +4 -17
  31. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/heading/__init__.py +0 -2
  32. notionary-0.2.25/notionary/blocks/heading/heading_markdown_node.py +16 -0
  33. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/heading/heading_models.py +3 -3
  34. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/image_block/__init__.py +0 -2
  35. notionary-0.2.25/notionary/blocks/image_block/image_element.py +130 -0
  36. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/image_block/image_markdown_node.py +5 -20
  37. {notionary-0.2.23/notionary → notionary-0.2.25/notionary/blocks}/markdown/markdown_builder.py +29 -233
  38. notionary-0.2.25/notionary/blocks/markdown/markdown_node.py +25 -0
  39. notionary-0.2.25/notionary/blocks/mixins/file_upload/__init__.py +3 -0
  40. notionary-0.2.25/notionary/blocks/mixins/file_upload/file_upload_mixin.py +320 -0
  41. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/numbered_list/__init__.py +0 -1
  42. notionary-0.2.25/notionary/blocks/numbered_list/numbered_list_markdown_node.py +17 -0
  43. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/numbered_list/numbered_list_models.py +3 -3
  44. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/paragraph/__init__.py +0 -2
  45. notionary-0.2.25/notionary/blocks/paragraph/paragraph_markdown_node.py +16 -0
  46. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/pdf/__init__.py +0 -2
  47. notionary-0.2.25/notionary/blocks/pdf/pdf_element.py +146 -0
  48. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/pdf/pdf_markdown_node.py +5 -18
  49. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/quote/__init__.py +0 -2
  50. notionary-0.2.25/notionary/blocks/quote/quote_markdown_node.py +16 -0
  51. notionary-0.2.25/notionary/blocks/registry/__init__.py +3 -0
  52. notionary-0.2.25/notionary/blocks/registry/block_registry.py +150 -0
  53. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/table/__init__.py +0 -2
  54. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/table/table_markdown_node.py +17 -16
  55. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/table_of_contents/__init__.py +0 -2
  56. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/table_of_contents/table_of_contents_element.py +27 -15
  57. notionary-0.2.25/notionary/blocks/table_of_contents/table_of_contents_markdown_node.py +21 -0
  58. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/table_of_contents/table_of_contents_models.py +2 -2
  59. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/todo/__init__.py +0 -2
  60. notionary-0.2.25/notionary/blocks/todo/todo_markdown_node.py +21 -0
  61. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/todo/todo_models.py +2 -3
  62. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/toggle/__init__.py +0 -2
  63. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/toggle/toggle_markdown_node.py +5 -19
  64. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/toggleable_heading/__init__.py +0 -2
  65. notionary-0.2.25/notionary/blocks/toggleable_heading/toggleable_heading_markdown_node.py +34 -0
  66. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/video/__init__.py +0 -2
  67. notionary-0.2.25/notionary/blocks/video/video_element.py +187 -0
  68. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/video/video_markdown_node.py +4 -15
  69. {notionary-0.2.23 → notionary-0.2.25}/notionary/comments/client.py +1 -1
  70. {notionary-0.2.23 → notionary-0.2.25}/notionary/file_upload/client.py +3 -2
  71. {notionary-0.2.23 → notionary-0.2.25}/notionary/file_upload/models.py +10 -1
  72. {notionary-0.2.23 → notionary-0.2.25}/notionary/file_upload/notion_file_upload.py +5 -5
  73. notionary-0.2.25/notionary/page/markdown_whitespace_processor.py +129 -0
  74. {notionary-0.2.23 → notionary-0.2.25}/notionary/page/notion_page.py +35 -40
  75. {notionary-0.2.23 → notionary-0.2.25}/notionary/page/page_content_deleting_service.py +1 -1
  76. notionary-0.2.25/notionary/page/page_content_writer.py +80 -0
  77. {notionary-0.2.23 → notionary-0.2.25}/notionary/page/page_context.py +0 -5
  78. {notionary-0.2.23 → notionary-0.2.25}/notionary/page/reader/handler/column_list_renderer.py +2 -2
  79. {notionary-0.2.23 → notionary-0.2.25}/notionary/page/reader/handler/column_renderer.py +2 -2
  80. {notionary-0.2.23 → notionary-0.2.25}/notionary/page/reader/handler/line_renderer.py +2 -2
  81. {notionary-0.2.23 → notionary-0.2.25}/notionary/page/reader/handler/toggle_renderer.py +2 -2
  82. {notionary-0.2.23 → notionary-0.2.25}/notionary/page/reader/handler/toggleable_heading_renderer.py +2 -2
  83. {notionary-0.2.23 → notionary-0.2.25}/notionary/page/writer/handler/equation_handler.py +1 -1
  84. {notionary-0.2.23 → notionary-0.2.25}/notionary/page/writer/handler/toggle_handler.py +8 -4
  85. {notionary-0.2.23 → notionary-0.2.25}/notionary/page/writer/handler/toggleable_heading_handler.py +3 -2
  86. {notionary-0.2.23 → notionary-0.2.25}/notionary/page/writer/markdown_to_notion_converter.py +74 -30
  87. notionary-0.2.25/notionary/schemas/__init__.py +3 -0
  88. notionary-0.2.25/notionary/schemas/base.py +73 -0
  89. {notionary-0.2.23 → notionary-0.2.25}/notionary/shared/__init__.py +1 -3
  90. {notionary-0.2.23 → notionary-0.2.25}/pyproject.toml +3 -1
  91. notionary-0.2.23/PKG-INFO +0 -235
  92. notionary-0.2.23/README.md +0 -212
  93. notionary-0.2.23/notionary/blocks/__init__.py +0 -3
  94. notionary-0.2.23/notionary/blocks/audio/audio_element.py +0 -115
  95. notionary-0.2.23/notionary/blocks/breadcrumbs/breadcrumb_markdown_node.py +0 -32
  96. notionary-0.2.23/notionary/blocks/bulleted_list/bulleted_list_markdown_node.py +0 -34
  97. notionary-0.2.23/notionary/blocks/callout/callout_markdown_node.py +0 -33
  98. notionary-0.2.23/notionary/blocks/divider/divider_markdown_node.py +0 -25
  99. notionary-0.2.23/notionary/blocks/embed/embed_markdown_node.py +0 -32
  100. notionary-0.2.23/notionary/blocks/file/file_element.py +0 -112
  101. notionary-0.2.23/notionary/blocks/guards.py +0 -22
  102. notionary-0.2.23/notionary/blocks/heading/heading_markdown_node.py +0 -30
  103. notionary-0.2.23/notionary/blocks/image_block/image_element.py +0 -89
  104. notionary-0.2.23/notionary/blocks/numbered_list/numbered_list_markdown_node.py +0 -31
  105. notionary-0.2.23/notionary/blocks/paragraph/paragraph_markdown_node.py +0 -26
  106. notionary-0.2.23/notionary/blocks/pdf/pdf_element.py +0 -97
  107. notionary-0.2.23/notionary/blocks/quote/quote_markdown_node.py +0 -26
  108. notionary-0.2.23/notionary/blocks/registry/__init__.py +0 -4
  109. notionary-0.2.23/notionary/blocks/registry/block_registry.py +0 -95
  110. notionary-0.2.23/notionary/blocks/registry/block_registry_builder.py +0 -264
  111. notionary-0.2.23/notionary/blocks/table_of_contents/table_of_contents_markdown_node.py +0 -35
  112. notionary-0.2.23/notionary/blocks/todo/todo_markdown_node.py +0 -32
  113. notionary-0.2.23/notionary/blocks/toggleable_heading/toggleable_heading_markdown_node.py +0 -51
  114. notionary-0.2.23/notionary/blocks/video/video_element.py +0 -111
  115. notionary-0.2.23/notionary/markdown/makdown_document_model.py +0 -0
  116. notionary-0.2.23/notionary/markdown/markdown_document_model.py +0 -228
  117. notionary-0.2.23/notionary/markdown/markdown_node.py +0 -30
  118. notionary-0.2.23/notionary/models/notion_database_response.py +0 -0
  119. notionary-0.2.23/notionary/page/page_content_writer.py +0 -177
  120. notionary-0.2.23/notionary/page/writer/markdown_to_notion_formatting_post_processor.py +0 -73
  121. notionary-0.2.23/notionary/page/writer/markdown_to_notion_post_processor.py +0 -0
  122. {notionary-0.2.23 → notionary-0.2.25}/LICENSE +0 -0
  123. {notionary-0.2.23 → notionary-0.2.25}/notionary/base_notion_client.py +0 -0
  124. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/_bootstrap.py +0 -0
  125. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/audio/audio_models.py +0 -0
  126. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/base_block_element.py +0 -0
  127. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/bookmark/bookmark_element.py +0 -0
  128. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/bookmark/bookmark_models.py +0 -0
  129. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/breadcrumbs/breadcrumb_element.py +0 -0
  130. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/breadcrumbs/breadcrumb_models.py +0 -0
  131. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/bulleted_list/bulleted_list_element.py +0 -0
  132. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/callout/callout_element.py +0 -0
  133. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/child_database/__init__.py +0 -0
  134. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/child_database/child_database_element.py +0 -0
  135. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/child_database/child_database_models.py +0 -0
  136. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/child_page/__init__.py +0 -0
  137. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/child_page/child_page_element.py +0 -0
  138. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/child_page/child_page_models.py +0 -0
  139. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/client.py +0 -0
  140. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/code/__init__.py +0 -0
  141. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/code/code_element.py +0 -0
  142. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/code/code_models.py +0 -0
  143. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/column/column_element.py +0 -0
  144. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/column/column_list_element.py +0 -0
  145. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/column/column_models.py +0 -0
  146. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/divider/divider_element.py +0 -0
  147. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/divider/divider_models.py +0 -0
  148. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/embed/embed_element.py +0 -0
  149. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/embed/embed_models.py +0 -0
  150. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/equation/equation_element.py +0 -0
  151. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/equation/equation_models.py +0 -0
  152. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/file/file_element_models.py +0 -0
  153. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/heading/heading_element.py +0 -0
  154. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/image_block/image_models.py +0 -0
  155. /notionary-0.2.23/notionary/database/factory.py → /notionary-0.2.25/notionary/blocks/markdown/markdown_document_model.py +0 -0
  156. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/mixins/captions/__init__.py +0 -0
  157. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/mixins/captions/caption_markdown_node_mixin.py +0 -0
  158. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/mixins/captions/caption_mixin.py +0 -0
  159. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/models.py +0 -0
  160. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/numbered_list/numbered_list_element.py +0 -0
  161. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/paragraph/paragraph_element.py +0 -0
  162. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/paragraph/paragraph_models.py +0 -0
  163. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/pdf/pdf_models.py +0 -0
  164. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/quote/quote_element.py +0 -0
  165. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/quote/quote_models.py +0 -0
  166. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/rich_text/__init__.py +0 -0
  167. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/rich_text/rich_text_models.py +0 -0
  168. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/rich_text/text_inline_formatter.py +0 -0
  169. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/syntax_prompt_builder.py +0 -0
  170. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/table/table_element.py +0 -0
  171. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/table/table_models.py +0 -0
  172. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/todo/todo_element.py +0 -0
  173. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/toggle/toggle_element.py +0 -0
  174. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/toggle/toggle_models.py +0 -0
  175. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/toggleable_heading/toggleable_heading_element.py +0 -0
  176. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/types.py +0 -0
  177. {notionary-0.2.23 → notionary-0.2.25}/notionary/blocks/video/video_element_models.py +0 -0
  178. {notionary-0.2.23 → notionary-0.2.25}/notionary/comments/__init__.py +0 -0
  179. {notionary-0.2.23 → notionary-0.2.25}/notionary/comments/models.py +0 -0
  180. {notionary-0.2.23 → notionary-0.2.25}/notionary/database/__init__.py +0 -0
  181. {notionary-0.2.23 → notionary-0.2.25}/notionary/database/client.py +0 -0
  182. {notionary-0.2.23 → notionary-0.2.25}/notionary/database/database.py +0 -0
  183. {notionary-0.2.23 → notionary-0.2.25}/notionary/database/database_filter_builder.py +0 -0
  184. {notionary-0.2.23 → notionary-0.2.25}/notionary/database/database_provider.py +0 -0
  185. {notionary-0.2.23 → notionary-0.2.25}/notionary/database/exceptions.py +0 -0
  186. /notionary-0.2.23/notionary/markdown/___init__.py → /notionary-0.2.25/notionary/database/factory.py +0 -0
  187. {notionary-0.2.23 → notionary-0.2.25}/notionary/database/models.py +0 -0
  188. {notionary-0.2.23 → notionary-0.2.25}/notionary/database/notion_database.py +0 -0
  189. {notionary-0.2.23 → notionary-0.2.25}/notionary/file_upload/__init__.py +0 -0
  190. {notionary-0.2.23 → notionary-0.2.25}/notionary/page/client.py +0 -0
  191. {notionary-0.2.23 → notionary-0.2.25}/notionary/page/models.py +0 -0
  192. {notionary-0.2.23 → notionary-0.2.25}/notionary/page/property_formatter.py +0 -0
  193. {notionary-0.2.23 → notionary-0.2.25}/notionary/page/reader/handler/__init__.py +0 -0
  194. {notionary-0.2.23 → notionary-0.2.25}/notionary/page/reader/handler/base_block_renderer.py +0 -0
  195. {notionary-0.2.23 → notionary-0.2.25}/notionary/page/reader/handler/block_processing_context.py +0 -0
  196. {notionary-0.2.23 → notionary-0.2.25}/notionary/page/reader/handler/block_rendering_context.py +0 -0
  197. {notionary-0.2.23 → notionary-0.2.25}/notionary/page/reader/handler/equation_renderer.py +0 -0
  198. {notionary-0.2.23 → notionary-0.2.25}/notionary/page/reader/handler/numbered_list_renderer.py +0 -0
  199. {notionary-0.2.23 → notionary-0.2.25}/notionary/page/reader/page_content_retriever.py +0 -0
  200. {notionary-0.2.23 → notionary-0.2.25}/notionary/page/search_filter_builder.py +0 -0
  201. {notionary-0.2.23 → notionary-0.2.25}/notionary/page/utils.py +0 -0
  202. {notionary-0.2.23 → notionary-0.2.25}/notionary/page/writer/handler/__init__.py +0 -0
  203. {notionary-0.2.23 → notionary-0.2.25}/notionary/page/writer/handler/code_handler.py +0 -0
  204. {notionary-0.2.23 → notionary-0.2.25}/notionary/page/writer/handler/column_handler.py +0 -0
  205. {notionary-0.2.23 → notionary-0.2.25}/notionary/page/writer/handler/column_list_handler.py +0 -0
  206. {notionary-0.2.23 → notionary-0.2.25}/notionary/page/writer/handler/line_handler.py +0 -0
  207. {notionary-0.2.23 → notionary-0.2.25}/notionary/page/writer/handler/line_processing_context.py +0 -0
  208. {notionary-0.2.23 → notionary-0.2.25}/notionary/page/writer/handler/regular_line_handler.py +0 -0
  209. {notionary-0.2.23 → notionary-0.2.25}/notionary/page/writer/handler/table_handler.py +0 -0
  210. {notionary-0.2.23 → notionary-0.2.25}/notionary/page/writer/markdown_to_notion_converter_context.py +0 -0
  211. {notionary-0.2.23 → notionary-0.2.25}/notionary/page/writer/markdown_to_notion_text_length_post_processor.py +0 -0
  212. {notionary-0.2.23 → notionary-0.2.25}/notionary/page/writer/notion_text_length_processor.py +0 -0
  213. {notionary-0.2.23 → notionary-0.2.25}/notionary/shared/name_to_id_resolver.py +0 -0
  214. {notionary-0.2.23 → notionary-0.2.25}/notionary/telemetry/__init__.py +0 -0
  215. {notionary-0.2.23 → notionary-0.2.25}/notionary/telemetry/service.py +0 -0
  216. {notionary-0.2.23 → notionary-0.2.25}/notionary/telemetry/views.py +0 -0
  217. {notionary-0.2.23 → notionary-0.2.25}/notionary/user/__init__.py +0 -0
  218. {notionary-0.2.23 → notionary-0.2.25}/notionary/user/base_notion_user.py +0 -0
  219. {notionary-0.2.23 → notionary-0.2.25}/notionary/user/client.py +0 -0
  220. {notionary-0.2.23 → notionary-0.2.25}/notionary/user/models.py +0 -0
  221. {notionary-0.2.23 → notionary-0.2.25}/notionary/user/notion_bot_user.py +0 -0
  222. {notionary-0.2.23 → notionary-0.2.25}/notionary/user/notion_user.py +0 -0
  223. {notionary-0.2.23 → notionary-0.2.25}/notionary/user/notion_user_manager.py +0 -0
  224. {notionary-0.2.23 → notionary-0.2.25}/notionary/util/__init__.py +0 -0
  225. {notionary-0.2.23 → notionary-0.2.25}/notionary/util/concurrency_limiter.py +0 -0
  226. {notionary-0.2.23 → notionary-0.2.25}/notionary/util/factory_decorator.py +0 -0
  227. {notionary-0.2.23 → notionary-0.2.25}/notionary/util/factory_only.py +0 -0
  228. {notionary-0.2.23 → notionary-0.2.25}/notionary/util/fuzzy.py +0 -0
  229. {notionary-0.2.23 → notionary-0.2.25}/notionary/util/logging_mixin.py +0 -0
  230. {notionary-0.2.23 → notionary-0.2.25}/notionary/util/page_id_utils.py +0 -0
  231. {notionary-0.2.23 → notionary-0.2.25}/notionary/util/singleton.py +0 -0
  232. {notionary-0.2.23 → notionary-0.2.25}/notionary/util/singleton_metaclass.py +0 -0
  233. {notionary-0.2.23 → notionary-0.2.25}/notionary/workspace.py +0 -0
@@ -0,0 +1,270 @@
1
+ Metadata-Version: 2.3
2
+ Name: notionary
3
+ Version: 0.2.25
4
+ Summary: Python library for programmatic Notion workspace management - databases, pages, and content with advanced Markdown support
5
+ License: MIT
6
+ Author: Mathis Arends
7
+ Author-email: mathisarends27@gmail.com
8
+ Requires-Python: >=3.9
9
+ Classifier: License :: OSI Approved :: MIT License
10
+ Classifier: Programming Language :: Python :: 3
11
+ Classifier: Programming Language :: Python :: 3.9
12
+ Classifier: Programming Language :: Python :: 3.10
13
+ Classifier: Programming Language :: Python :: 3.11
14
+ Classifier: Programming Language :: Python :: 3.12
15
+ Classifier: Programming Language :: Python :: 3.13
16
+ Requires-Dist: aiofiles (>=24.1.0,<25.0.0)
17
+ Requires-Dist: httpx (>=0.28.0)
18
+ Requires-Dist: posthog (>=6.3.1,<7.0.0)
19
+ Requires-Dist: pydantic (>=2.11.4)
20
+ Requires-Dist: python-dotenv (>=1.1.0)
21
+ Project-URL: Homepage, https://github.com/mathisarends/notionary
22
+ Description-Content-Type: text/markdown
23
+
24
+ <picture>
25
+ <source media="(prefers-color-scheme: dark)" srcset="./static/notionary-dark.png">
26
+ <source media="(prefers-color-scheme: light)" srcset="./static/notionary-light.png">
27
+ <img alt="Notionary logo: dark mode shows a white logo, light mode shows a black logo." src="./static/browser-use.png" width="full">
28
+ </picture>
29
+
30
+ <h1 align="center">The Modern Notion API for Python & AI Agents</h1>
31
+
32
+ <div align="center">
33
+
34
+ [![Python Version](https://img.shields.io/badge/python-3.8%2B-blue.svg)](https://www.python.org/downloads/)
35
+ [![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
36
+ [![Documentation](https://img.shields.io/badge/docs-mathisarends.github.io-blue.svg)](https://mathisarends.github.io/notionary/)
37
+
38
+ **Transform complex Notion API interactions into simple, Pythonic code.**
39
+ Perfect for developers building AI agents, automation workflows, and dynamic content systems.
40
+
41
+ </div>
42
+
43
+ ---
44
+
45
+ ## Why Notionary?
46
+
47
+ - **AI-Native Design** - Built specifically for AI agents with schema-driven markdown syntax
48
+ - **Smart Discovery** - Find pages and databases by name with fuzzy matching—no more hunting for IDs
49
+ - **Extended Markdown** - Rich syntax for toggles, columns, callouts, and media uploads
50
+ - **Async-First** - Modern Python with full async/await support and high performance
51
+ - **Round-Trip** - Read existing content, modify it, and write it back while preserving formatting
52
+ - **Complete Coverage** - Every Notion block type supported with type safety
53
+
54
+ ---
55
+
56
+ ## Installation
57
+
58
+ ```bash
59
+ pip install notionary
60
+ ```
61
+
62
+ Set up your [Notion integration](https://www.notion.so/profile/integrations) and configure your token:
63
+
64
+ ```bash
65
+ export NOTION_SECRET=your_integration_key
66
+ ```
67
+
68
+ ---
69
+
70
+ ## See It in Action
71
+
72
+ ### Creating Rich Database Entries
73
+
74
+ https://github.com/user-attachments/assets/da8b4691-bee4-4b0f-801e-dccacb630398
75
+
76
+ *Create styled project pages with properties, content, and rich formatting*
77
+
78
+ ### Local File Uploads (Videos & Images)
79
+
80
+ https://github.com/user-attachments/assets/a079ec01-bb56-4c65-8260-7b1fca42ac68
81
+
82
+ *Upload videos and images using simple markdown syntax - files are automatically uploaded to Notion*
83
+
84
+ ---
85
+
86
+ ## Quick Start
87
+
88
+ ### Find → Create → Update Flow
89
+
90
+ ```python
91
+ import asyncio
92
+ from notionary import NotionPage, NotionDatabase
93
+
94
+ async def main():
95
+ # Find pages by name - fuzzy matching included!
96
+ page = await NotionPage.from_page_name("Meeting Notes")
97
+
98
+ # Option 1: Direct Extended Markdown
99
+ await page.append_markdown("""
100
+ ## Action Items
101
+ - [x] Review project proposal
102
+ - [ ] Schedule team meeting
103
+ - [ ] Update documentation
104
+
105
+ [callout](Meeting decisions require follow-up "💡")
106
+
107
+ +++ Details
108
+ Additional context and next steps...
109
+ +++
110
+ """)
111
+
112
+ # Option 2: Type-Safe Builder (maps to same markdown internally)
113
+ await page.append_markdown(lambda builder: (
114
+ builder
115
+ .h2("Project Status")
116
+ .callout("Milestone reached!", "🎉")
117
+ .columns(
118
+ lambda col: col.h3("Completed").bulleted_list([
119
+ "API design", "Database setup", "Authentication"
120
+ ]),
121
+ lambda col: col.h3("In Progress").bulleted_list([
122
+ "Frontend UI", "Testing", "Documentation"
123
+ ]),
124
+ width_ratios=[0.6, 0.4]
125
+ )
126
+ .toggle("Budget Details", lambda t: t
127
+ .table(["Item", "Cost", "Status"], [
128
+ ["Development", "$15,000", "Paid"],
129
+ ["Design", "$8,000", "Pending"]
130
+ ])
131
+ )
132
+ ))
133
+
134
+ asyncio.run(main())
135
+ ```
136
+
137
+ ### Complete Block Support
138
+
139
+ Every Notion block type with extended syntax:
140
+
141
+ | Block Type | Markdown Syntax | Use Case |
142
+ |------------|-----------------|----------|
143
+ | **Callouts** | `[callout](Text "🔥")` | Highlighting key information |
144
+ | **Toggles** | `+++ Title\nContent\n+++` | Collapsible sections |
145
+ | **Columns** | `::: columns\n::: column\nContent\n:::\n:::` | Side-by-side layouts |
146
+ | **Tables** | Standard markdown tables | Structured data |
147
+ | **Media** | `[video](./file.mp4)(caption:Description)` | Auto-uploading files |
148
+ | **Code** | Standard code fences with captions | Code snippets |
149
+ | **Equations** | `$LaTeX$` | Mathematical expressions |
150
+ | **TOC** | `[toc](blue_background)` | Auto-generated navigation |
151
+
152
+ ---
153
+
154
+ ## What You Can Build 💡
155
+
156
+ ### **AI Content Systems**
157
+ - **Report Generation**: AI agents that create structured reports, documentation, and analysis
158
+ - **Content Pipelines**: Automated workflows that process data and generate Notion pages
159
+ - **Knowledge Management**: AI-powered documentation systems with smart categorization
160
+
161
+ ### **Workflow Automation**
162
+ - **Project Management**: Sync project status, update timelines, generate progress reports
163
+ - **Data Integration**: Connect external APIs and databases to Notion workspaces
164
+ - **Template Systems**: Dynamic page generation from templates and data sources
165
+
166
+ ### **Content Management**
167
+ - **Bulk Operations**: Mass page updates, content migration, and database management
168
+ - **Media Handling**: Automated image/video uploads with proper organization
169
+ - **Cross-Platform**: Sync content between Notion and other platforms
170
+
171
+ ---
172
+
173
+ ## Key Features
174
+
175
+ <table>
176
+ <tr>
177
+ <td width="50%">
178
+
179
+ ### Smart Discovery
180
+ - Find pages/databases by name
181
+ - Fuzzy matching for approximate searches
182
+ - No more hunting for IDs or URLs
183
+
184
+ ### Extended Markdown
185
+ - Rich syntax beyond standard markdown
186
+ - Callouts, toggles, columns, media uploads
187
+ - Schema provided for AI agent integration
188
+
189
+ ### Modern Python
190
+ - Full async/await support
191
+ - Type hints throughout
192
+ - High-performance batch operations
193
+
194
+ </td>
195
+ <td width="50%">
196
+
197
+ ### Round-Trip Editing
198
+ - Read existing content as markdown
199
+ - Edit and modify preserving formatting
200
+ - Write back to Notion seamlessly
201
+
202
+ ### AI-Ready Architecture
203
+ - Schema-driven syntax for LLM prompts
204
+ - Perfect for AI content generation
205
+ - Handles complex nested structures
206
+
207
+ ### Complete Coverage
208
+ - Every Notion block type supported
209
+ - File uploads with automatic handling
210
+ - Database operations and properties
211
+
212
+ </td>
213
+ </tr>
214
+ </table>
215
+
216
+ ---
217
+
218
+ ## Examples & Documentation
219
+
220
+ ### Full Documentation
221
+ [**mathisarends.github.io/notionary**](https://mathisarends.github.io/notionary/) - Complete API reference, guides, and tutorials
222
+
223
+ ### Quick Links
224
+ - [**Getting Started**](https://mathisarends.github.io/notionary/get-started/) - Setup and first steps
225
+ - [**Page Management**](https://mathisarends.github.io/notionary/page/) - Content and properties
226
+ - [**Database Operations**](https://mathisarends.github.io/notionary/database/) - Queries and management
227
+ - [**Block Types Reference**](https://mathisarends.github.io/notionary/blocks/) - Complete syntax guide
228
+
229
+ ### Hands-On Examples
230
+
231
+ **Core Functionality:**
232
+ - [Page Management](examples/page_example.py) - Create, update, and manage pages
233
+ - [Database Operations](examples/database.py) - Connect and query databases
234
+ - [Workspace Discovery](examples/workspace_discovery.py) - Explore your workspace
235
+
236
+ **Extended Markdown:**
237
+ - [Basic Formatting](examples/markdown/basic.py) - Text, lists, and links
238
+ - [Callouts & Highlights](examples/markdown/callout.py) - Information boxes
239
+ - [Toggle Sections](examples/markdown/toggle.py) - Collapsible content
240
+ - [Multi-Column Layouts](examples/markdown/columns.py) - Side-by-side design
241
+ - [Tables & Data](examples/markdown/table.py) - Structured presentations
242
+
243
+ ---
244
+
245
+ ## Contributing
246
+
247
+ We welcome contributions from the community! Whether you're:
248
+ - **Fixing bugs** - Help improve stability and reliability
249
+ - **Adding features** - Extend functionality for new use cases
250
+ - **Improving docs** - Make the library more accessible
251
+ - **Sharing examples** - Show creative applications and patterns
252
+
253
+ Check our [**Contributing Guide**](https://mathisarends.github.io/notionary/contributing/) to get started.
254
+
255
+ ---
256
+
257
+ <div align="center">
258
+
259
+ **Ready to revolutionize your Notion workflows?**
260
+
261
+ [📖 **Read the Docs**](https://mathisarends.github.io/notionary/) • [🚀 **Getting Started**](https://mathisarends.github.io/notionary/get-started/) • [💻 **Browse Examples**](examples/)
262
+
263
+ *Built with ❤️ for Python developers and AI agents*
264
+
265
+ ---
266
+
267
+ **Transform complex Notion API interactions into simple, powerful code.**
268
+
269
+ </div>
270
+
@@ -0,0 +1,246 @@
1
+ <picture>
2
+ <source media="(prefers-color-scheme: dark)" srcset="./static/notionary-dark.png">
3
+ <source media="(prefers-color-scheme: light)" srcset="./static/notionary-light.png">
4
+ <img alt="Notionary logo: dark mode shows a white logo, light mode shows a black logo." src="./static/browser-use.png" width="full">
5
+ </picture>
6
+
7
+ <h1 align="center">The Modern Notion API for Python & AI Agents</h1>
8
+
9
+ <div align="center">
10
+
11
+ [![Python Version](https://img.shields.io/badge/python-3.8%2B-blue.svg)](https://www.python.org/downloads/)
12
+ [![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
13
+ [![Documentation](https://img.shields.io/badge/docs-mathisarends.github.io-blue.svg)](https://mathisarends.github.io/notionary/)
14
+
15
+ **Transform complex Notion API interactions into simple, Pythonic code.**
16
+ Perfect for developers building AI agents, automation workflows, and dynamic content systems.
17
+
18
+ </div>
19
+
20
+ ---
21
+
22
+ ## Why Notionary?
23
+
24
+ - **AI-Native Design** - Built specifically for AI agents with schema-driven markdown syntax
25
+ - **Smart Discovery** - Find pages and databases by name with fuzzy matching—no more hunting for IDs
26
+ - **Extended Markdown** - Rich syntax for toggles, columns, callouts, and media uploads
27
+ - **Async-First** - Modern Python with full async/await support and high performance
28
+ - **Round-Trip** - Read existing content, modify it, and write it back while preserving formatting
29
+ - **Complete Coverage** - Every Notion block type supported with type safety
30
+
31
+ ---
32
+
33
+ ## Installation
34
+
35
+ ```bash
36
+ pip install notionary
37
+ ```
38
+
39
+ Set up your [Notion integration](https://www.notion.so/profile/integrations) and configure your token:
40
+
41
+ ```bash
42
+ export NOTION_SECRET=your_integration_key
43
+ ```
44
+
45
+ ---
46
+
47
+ ## See It in Action
48
+
49
+ ### Creating Rich Database Entries
50
+
51
+ https://github.com/user-attachments/assets/da8b4691-bee4-4b0f-801e-dccacb630398
52
+
53
+ *Create styled project pages with properties, content, and rich formatting*
54
+
55
+ ### Local File Uploads (Videos & Images)
56
+
57
+ https://github.com/user-attachments/assets/a079ec01-bb56-4c65-8260-7b1fca42ac68
58
+
59
+ *Upload videos and images using simple markdown syntax - files are automatically uploaded to Notion*
60
+
61
+ ---
62
+
63
+ ## Quick Start
64
+
65
+ ### Find → Create → Update Flow
66
+
67
+ ```python
68
+ import asyncio
69
+ from notionary import NotionPage, NotionDatabase
70
+
71
+ async def main():
72
+ # Find pages by name - fuzzy matching included!
73
+ page = await NotionPage.from_page_name("Meeting Notes")
74
+
75
+ # Option 1: Direct Extended Markdown
76
+ await page.append_markdown("""
77
+ ## Action Items
78
+ - [x] Review project proposal
79
+ - [ ] Schedule team meeting
80
+ - [ ] Update documentation
81
+
82
+ [callout](Meeting decisions require follow-up "💡")
83
+
84
+ +++ Details
85
+ Additional context and next steps...
86
+ +++
87
+ """)
88
+
89
+ # Option 2: Type-Safe Builder (maps to same markdown internally)
90
+ await page.append_markdown(lambda builder: (
91
+ builder
92
+ .h2("Project Status")
93
+ .callout("Milestone reached!", "🎉")
94
+ .columns(
95
+ lambda col: col.h3("Completed").bulleted_list([
96
+ "API design", "Database setup", "Authentication"
97
+ ]),
98
+ lambda col: col.h3("In Progress").bulleted_list([
99
+ "Frontend UI", "Testing", "Documentation"
100
+ ]),
101
+ width_ratios=[0.6, 0.4]
102
+ )
103
+ .toggle("Budget Details", lambda t: t
104
+ .table(["Item", "Cost", "Status"], [
105
+ ["Development", "$15,000", "Paid"],
106
+ ["Design", "$8,000", "Pending"]
107
+ ])
108
+ )
109
+ ))
110
+
111
+ asyncio.run(main())
112
+ ```
113
+
114
+ ### Complete Block Support
115
+
116
+ Every Notion block type with extended syntax:
117
+
118
+ | Block Type | Markdown Syntax | Use Case |
119
+ |------------|-----------------|----------|
120
+ | **Callouts** | `[callout](Text "🔥")` | Highlighting key information |
121
+ | **Toggles** | `+++ Title\nContent\n+++` | Collapsible sections |
122
+ | **Columns** | `::: columns\n::: column\nContent\n:::\n:::` | Side-by-side layouts |
123
+ | **Tables** | Standard markdown tables | Structured data |
124
+ | **Media** | `[video](./file.mp4)(caption:Description)` | Auto-uploading files |
125
+ | **Code** | Standard code fences with captions | Code snippets |
126
+ | **Equations** | `$LaTeX$` | Mathematical expressions |
127
+ | **TOC** | `[toc](blue_background)` | Auto-generated navigation |
128
+
129
+ ---
130
+
131
+ ## What You Can Build 💡
132
+
133
+ ### **AI Content Systems**
134
+ - **Report Generation**: AI agents that create structured reports, documentation, and analysis
135
+ - **Content Pipelines**: Automated workflows that process data and generate Notion pages
136
+ - **Knowledge Management**: AI-powered documentation systems with smart categorization
137
+
138
+ ### **Workflow Automation**
139
+ - **Project Management**: Sync project status, update timelines, generate progress reports
140
+ - **Data Integration**: Connect external APIs and databases to Notion workspaces
141
+ - **Template Systems**: Dynamic page generation from templates and data sources
142
+
143
+ ### **Content Management**
144
+ - **Bulk Operations**: Mass page updates, content migration, and database management
145
+ - **Media Handling**: Automated image/video uploads with proper organization
146
+ - **Cross-Platform**: Sync content between Notion and other platforms
147
+
148
+ ---
149
+
150
+ ## Key Features
151
+
152
+ <table>
153
+ <tr>
154
+ <td width="50%">
155
+
156
+ ### Smart Discovery
157
+ - Find pages/databases by name
158
+ - Fuzzy matching for approximate searches
159
+ - No more hunting for IDs or URLs
160
+
161
+ ### Extended Markdown
162
+ - Rich syntax beyond standard markdown
163
+ - Callouts, toggles, columns, media uploads
164
+ - Schema provided for AI agent integration
165
+
166
+ ### Modern Python
167
+ - Full async/await support
168
+ - Type hints throughout
169
+ - High-performance batch operations
170
+
171
+ </td>
172
+ <td width="50%">
173
+
174
+ ### Round-Trip Editing
175
+ - Read existing content as markdown
176
+ - Edit and modify preserving formatting
177
+ - Write back to Notion seamlessly
178
+
179
+ ### AI-Ready Architecture
180
+ - Schema-driven syntax for LLM prompts
181
+ - Perfect for AI content generation
182
+ - Handles complex nested structures
183
+
184
+ ### Complete Coverage
185
+ - Every Notion block type supported
186
+ - File uploads with automatic handling
187
+ - Database operations and properties
188
+
189
+ </td>
190
+ </tr>
191
+ </table>
192
+
193
+ ---
194
+
195
+ ## Examples & Documentation
196
+
197
+ ### Full Documentation
198
+ [**mathisarends.github.io/notionary**](https://mathisarends.github.io/notionary/) - Complete API reference, guides, and tutorials
199
+
200
+ ### Quick Links
201
+ - [**Getting Started**](https://mathisarends.github.io/notionary/get-started/) - Setup and first steps
202
+ - [**Page Management**](https://mathisarends.github.io/notionary/page/) - Content and properties
203
+ - [**Database Operations**](https://mathisarends.github.io/notionary/database/) - Queries and management
204
+ - [**Block Types Reference**](https://mathisarends.github.io/notionary/blocks/) - Complete syntax guide
205
+
206
+ ### Hands-On Examples
207
+
208
+ **Core Functionality:**
209
+ - [Page Management](examples/page_example.py) - Create, update, and manage pages
210
+ - [Database Operations](examples/database.py) - Connect and query databases
211
+ - [Workspace Discovery](examples/workspace_discovery.py) - Explore your workspace
212
+
213
+ **Extended Markdown:**
214
+ - [Basic Formatting](examples/markdown/basic.py) - Text, lists, and links
215
+ - [Callouts & Highlights](examples/markdown/callout.py) - Information boxes
216
+ - [Toggle Sections](examples/markdown/toggle.py) - Collapsible content
217
+ - [Multi-Column Layouts](examples/markdown/columns.py) - Side-by-side design
218
+ - [Tables & Data](examples/markdown/table.py) - Structured presentations
219
+
220
+ ---
221
+
222
+ ## Contributing
223
+
224
+ We welcome contributions from the community! Whether you're:
225
+ - **Fixing bugs** - Help improve stability and reliability
226
+ - **Adding features** - Extend functionality for new use cases
227
+ - **Improving docs** - Make the library more accessible
228
+ - **Sharing examples** - Show creative applications and patterns
229
+
230
+ Check our [**Contributing Guide**](https://mathisarends.github.io/notionary/contributing/) to get started.
231
+
232
+ ---
233
+
234
+ <div align="center">
235
+
236
+ **Ready to revolutionize your Notion workflows?**
237
+
238
+ [📖 **Read the Docs**](https://mathisarends.github.io/notionary/) • [🚀 **Getting Started**](https://mathisarends.github.io/notionary/get-started/) • [💻 **Browse Examples**](examples/)
239
+
240
+ *Built with ❤️ for Python developers and AI agents*
241
+
242
+ ---
243
+
244
+ **Transform complex Notion API interactions into simple, powerful code.**
245
+
246
+ </div>
@@ -4,7 +4,7 @@ bootstrap_blocks()
4
4
 
5
5
  from .database import DatabaseFilterBuilder, NotionDatabase
6
6
  from .file_upload import NotionFileUpload
7
- from .markdown.markdown_builder import MarkdownBuilder
7
+ from .blocks.markdown.markdown_builder import MarkdownBuilder
8
8
  from .page.notion_page import NotionPage
9
9
  from .user import NotionBotUser, NotionUser, NotionUserManager
10
10
  from .workspace import NotionWorkspace
@@ -0,0 +1,5 @@
1
+ from ._bootstrap import bootstrap_blocks
2
+
3
+ __all__ = [
4
+ "bootstrap_blocks",
5
+ ]
@@ -1,6 +1,5 @@
1
1
  from notionary.blocks.audio.audio_element import AudioElement
2
2
  from notionary.blocks.audio.audio_markdown_node import (
3
- AudioMarkdownBlockParams,
4
3
  AudioMarkdownNode,
5
4
  )
6
5
  from notionary.blocks.audio.audio_models import CreateAudioBlock
@@ -9,5 +8,4 @@ __all__ = [
9
8
  "AudioElement",
10
9
  "CreateAudioBlock",
11
10
  "AudioMarkdownNode",
12
- "AudioMarkdownBlockParams",
13
11
  ]