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.
Files changed (387) hide show
  1. notionary/__init__.py +5 -20
  2. notionary/blocks/client.py +87 -215
  3. notionary/blocks/enums.py +167 -0
  4. notionary/blocks/rich_text/markdown_rich_text_converter.py +266 -0
  5. notionary/blocks/rich_text/models.py +164 -0
  6. notionary/blocks/rich_text/name_id_resolver/__init__.py +11 -0
  7. notionary/blocks/rich_text/name_id_resolver/database.py +31 -0
  8. notionary/blocks/rich_text/name_id_resolver/page.py +34 -0
  9. notionary/blocks/rich_text/name_id_resolver/person.py +37 -0
  10. notionary/blocks/rich_text/name_id_resolver/port.py +11 -0
  11. notionary/blocks/rich_text/rich_text_markdown_converter.py +132 -0
  12. notionary/blocks/rich_text/rich_text_patterns.py +39 -0
  13. notionary/blocks/schemas.py +746 -0
  14. notionary/comments/client.py +52 -187
  15. notionary/comments/factory.py +40 -0
  16. notionary/comments/models.py +5 -127
  17. notionary/comments/schemas.py +240 -0
  18. notionary/comments/service.py +34 -0
  19. notionary/data_source/http/client.py +11 -0
  20. notionary/data_source/http/data_source_instance_client.py +94 -0
  21. notionary/data_source/properties/models.py +406 -0
  22. notionary/data_source/query/builder.py +429 -0
  23. notionary/data_source/query/resolver.py +114 -0
  24. notionary/data_source/query/schema.py +304 -0
  25. notionary/data_source/query/validator.py +73 -0
  26. notionary/data_source/schemas.py +27 -0
  27. notionary/data_source/service.py +353 -0
  28. notionary/database/client.py +30 -135
  29. notionary/database/database_metadata_update_client.py +19 -0
  30. notionary/database/schemas.py +29 -0
  31. notionary/database/service.py +169 -0
  32. notionary/exceptions/__init__.py +33 -0
  33. notionary/exceptions/api.py +41 -0
  34. notionary/exceptions/base.py +2 -0
  35. notionary/exceptions/block_parsing.py +16 -0
  36. notionary/exceptions/data_source/__init__.py +6 -0
  37. notionary/exceptions/data_source/builder.py +182 -0
  38. notionary/exceptions/data_source/properties.py +34 -0
  39. notionary/exceptions/properties.py +58 -0
  40. notionary/exceptions/search.py +33 -0
  41. notionary/file_upload/client.py +18 -30
  42. notionary/file_upload/models.py +7 -8
  43. notionary/file_upload/{notion_file_upload.py → service.py} +29 -64
  44. notionary/http/client.py +205 -0
  45. notionary/http/models.py +49 -0
  46. notionary/page/blocks/client.py +1 -0
  47. notionary/page/content/factory.py +68 -0
  48. notionary/page/content/markdown/__init__.py +5 -0
  49. notionary/page/content/markdown/builder.py +304 -0
  50. notionary/page/content/markdown/nodes/__init__.py +54 -0
  51. notionary/page/content/markdown/nodes/audio.py +23 -0
  52. notionary/page/content/markdown/nodes/base.py +12 -0
  53. notionary/page/content/markdown/nodes/bookmark.py +25 -0
  54. notionary/page/content/markdown/nodes/breadcrumb.py +14 -0
  55. notionary/page/content/markdown/nodes/bulleted_list.py +18 -0
  56. notionary/page/content/markdown/nodes/callout.py +32 -0
  57. notionary/page/content/markdown/nodes/code.py +30 -0
  58. notionary/page/content/markdown/nodes/columns.py +51 -0
  59. notionary/page/content/markdown/nodes/divider.py +14 -0
  60. notionary/page/content/markdown/nodes/embed.py +23 -0
  61. notionary/page/content/markdown/nodes/equation.py +19 -0
  62. notionary/page/content/markdown/nodes/file.py +23 -0
  63. notionary/page/content/markdown/nodes/heading.py +16 -0
  64. notionary/page/content/markdown/nodes/image.py +23 -0
  65. notionary/page/content/markdown/nodes/mixins/caption.py +12 -0
  66. notionary/page/content/markdown/nodes/numbered_list.py +15 -0
  67. notionary/page/content/markdown/nodes/paragraph.py +14 -0
  68. notionary/page/content/markdown/nodes/pdf.py +23 -0
  69. notionary/page/content/markdown/nodes/quote.py +15 -0
  70. notionary/page/content/markdown/nodes/space.py +14 -0
  71. notionary/page/content/markdown/nodes/table.py +45 -0
  72. notionary/page/content/markdown/nodes/table_of_contents.py +14 -0
  73. notionary/page/content/markdown/nodes/todo.py +22 -0
  74. notionary/page/content/markdown/nodes/toggle.py +28 -0
  75. notionary/page/content/markdown/nodes/toggleable_heading.py +35 -0
  76. notionary/page/content/markdown/nodes/video.py +23 -0
  77. notionary/page/content/parser/context.py +49 -0
  78. notionary/page/content/parser/factory.py +219 -0
  79. notionary/page/content/parser/parsers/__init__.py +60 -0
  80. notionary/page/content/parser/parsers/audio.py +40 -0
  81. notionary/page/content/parser/parsers/base.py +30 -0
  82. notionary/page/content/parser/parsers/bookmark.py +33 -0
  83. notionary/page/content/parser/parsers/breadcrumb.py +33 -0
  84. notionary/page/content/parser/parsers/bulleted_list.py +41 -0
  85. notionary/page/content/parser/parsers/callout.py +129 -0
  86. notionary/page/content/parser/parsers/caption.py +55 -0
  87. notionary/page/content/parser/parsers/code.py +81 -0
  88. notionary/page/content/parser/parsers/column.py +117 -0
  89. notionary/page/content/parser/parsers/column_list.py +81 -0
  90. notionary/page/content/parser/parsers/divider.py +33 -0
  91. notionary/page/content/parser/parsers/embed.py +33 -0
  92. notionary/page/content/parser/parsers/equation.py +65 -0
  93. notionary/page/content/parser/parsers/file.py +42 -0
  94. notionary/page/content/parser/parsers/heading.py +58 -0
  95. notionary/page/content/parser/parsers/image.py +42 -0
  96. notionary/page/content/parser/parsers/numbered_list.py +45 -0
  97. notionary/page/content/parser/parsers/paragraph.py +36 -0
  98. notionary/page/content/parser/parsers/pdf.py +42 -0
  99. notionary/page/content/parser/parsers/quote.py +65 -0
  100. notionary/page/content/parser/parsers/space.py +35 -0
  101. notionary/page/content/parser/parsers/table.py +144 -0
  102. notionary/page/content/parser/parsers/table_of_contents.py +32 -0
  103. notionary/page/content/parser/parsers/todo.py +58 -0
  104. notionary/page/content/parser/parsers/toggle.py +127 -0
  105. notionary/page/content/parser/parsers/toggleable_heading.py +150 -0
  106. notionary/page/content/parser/parsers/video.py +42 -0
  107. notionary/page/content/parser/post_processing/handlers/__init__.py +5 -0
  108. notionary/page/content/parser/post_processing/handlers/rich_text_length.py +93 -0
  109. notionary/page/content/parser/post_processing/handlers/rich_text_length_truncation.py +93 -0
  110. notionary/page/content/parser/post_processing/port.py +9 -0
  111. notionary/page/content/parser/post_processing/service.py +16 -0
  112. notionary/page/content/parser/pre_processsing/handlers/__init__.py +9 -0
  113. notionary/page/content/parser/pre_processsing/handlers/column_syntax.py +80 -0
  114. notionary/page/content/parser/pre_processsing/handlers/port.py +7 -0
  115. notionary/page/content/parser/pre_processsing/handlers/whitespace.py +68 -0
  116. notionary/page/content/parser/pre_processsing/service.py +15 -0
  117. notionary/page/content/parser/service.py +69 -0
  118. notionary/page/content/renderer/context.py +48 -0
  119. notionary/page/content/renderer/factory.py +240 -0
  120. notionary/page/content/renderer/post_processing/handlers/__init__.py +5 -0
  121. notionary/page/content/renderer/post_processing/handlers/numbered_list_placeholdere.py +62 -0
  122. notionary/page/content/renderer/post_processing/port.py +7 -0
  123. notionary/page/content/renderer/post_processing/service.py +15 -0
  124. notionary/page/content/renderer/renderers/__init__.py +57 -0
  125. notionary/page/content/renderer/renderers/audio.py +31 -0
  126. notionary/page/content/renderer/renderers/base.py +31 -0
  127. notionary/page/content/renderer/renderers/bookmark.py +25 -0
  128. notionary/page/content/renderer/renderers/breadcrumb.py +21 -0
  129. notionary/page/content/renderer/renderers/bulleted_list.py +48 -0
  130. notionary/page/content/renderer/renderers/callout.py +65 -0
  131. notionary/page/content/renderer/renderers/captioned_block.py +58 -0
  132. notionary/page/content/renderer/renderers/code.py +34 -0
  133. notionary/page/content/renderer/renderers/column.py +44 -0
  134. notionary/page/content/renderer/renderers/column_list.py +31 -0
  135. notionary/page/content/renderer/renderers/divider.py +22 -0
  136. notionary/page/content/renderer/renderers/embed.py +25 -0
  137. notionary/page/content/renderer/renderers/equation.py +37 -0
  138. notionary/page/content/renderer/renderers/fallback.py +24 -0
  139. notionary/page/content/renderer/renderers/file.py +40 -0
  140. notionary/page/content/renderer/renderers/heading.py +69 -0
  141. notionary/page/content/renderer/renderers/image.py +31 -0
  142. notionary/page/content/renderer/renderers/numbered_list.py +41 -0
  143. notionary/page/content/renderer/renderers/paragraph.py +40 -0
  144. notionary/page/content/renderer/renderers/pdf.py +31 -0
  145. notionary/page/content/renderer/renderers/quote.py +49 -0
  146. notionary/page/content/renderer/renderers/table.py +115 -0
  147. notionary/page/content/renderer/renderers/table_of_contents.py +26 -0
  148. notionary/page/content/renderer/renderers/table_row.py +17 -0
  149. notionary/page/content/renderer/renderers/todo.py +56 -0
  150. notionary/page/content/renderer/renderers/toggle.py +53 -0
  151. notionary/page/content/renderer/renderers/toggleable_heading.py +78 -0
  152. notionary/page/content/renderer/renderers/video.py +31 -0
  153. notionary/page/content/renderer/service.py +50 -0
  154. notionary/page/content/service.py +65 -0
  155. notionary/page/content/syntax/models.py +68 -0
  156. notionary/page/content/syntax/service.py +453 -0
  157. notionary/page/page_context.py +7 -16
  158. notionary/page/page_http_client.py +15 -0
  159. notionary/page/page_metadata_update_client.py +19 -0
  160. notionary/page/properties/client.py +144 -0
  161. notionary/page/properties/factory.py +26 -0
  162. notionary/page/properties/models.py +307 -0
  163. notionary/page/properties/service.py +257 -0
  164. notionary/page/schemas.py +13 -0
  165. notionary/page/service.py +222 -0
  166. notionary/shared/entity/client.py +29 -0
  167. notionary/shared/entity/dto_parsers.py +53 -0
  168. notionary/shared/entity/entity_metadata_update_client.py +41 -0
  169. notionary/shared/entity/schemas.py +45 -0
  170. notionary/shared/entity/service.py +171 -0
  171. notionary/shared/models/cover.py +20 -0
  172. notionary/shared/models/file.py +21 -0
  173. notionary/shared/models/icon.py +28 -0
  174. notionary/shared/models/parent.py +41 -0
  175. notionary/shared/properties/type.py +30 -0
  176. notionary/user/__init__.py +4 -8
  177. notionary/user/base.py +89 -0
  178. notionary/user/bot.py +70 -0
  179. notionary/user/client.py +22 -111
  180. notionary/user/person.py +41 -0
  181. notionary/user/schemas.py +67 -0
  182. notionary/user/service.py +65 -0
  183. notionary/utils/async_retry.py +39 -0
  184. notionary/utils/date.py +51 -0
  185. notionary/utils/fuzzy.py +56 -0
  186. notionary/{util/logging_mixin.py → utils/mixins/logging.py} +4 -16
  187. notionary/utils/pagination.py +50 -0
  188. notionary/utils/singleton.py +13 -0
  189. notionary/utils/uuid_utils.py +20 -0
  190. notionary/workspace/__init__.py +3 -0
  191. notionary/workspace/client.py +62 -0
  192. notionary/workspace/query/builder.py +60 -0
  193. notionary/workspace/query/models.py +60 -0
  194. notionary/workspace/query/service.py +93 -0
  195. notionary/workspace/schemas.py +21 -0
  196. notionary/workspace/service.py +116 -0
  197. {notionary-0.2.27.dist-info → notionary-0.2.28.dist-info}/METADATA +54 -49
  198. notionary-0.2.28.dist-info/RECORD +200 -0
  199. {notionary-0.2.27.dist-info → notionary-0.2.28.dist-info}/WHEEL +1 -1
  200. {notionary-0.2.27.dist-info → notionary-0.2.28.dist-info/licenses}/LICENSE +9 -9
  201. notionary/base_notion_client.py +0 -219
  202. notionary/blocks/__init__.py +0 -5
  203. notionary/blocks/_bootstrap.py +0 -271
  204. notionary/blocks/audio/__init__.py +0 -11
  205. notionary/blocks/audio/audio_element.py +0 -158
  206. notionary/blocks/audio/audio_markdown_node.py +0 -24
  207. notionary/blocks/audio/audio_models.py +0 -10
  208. notionary/blocks/base_block_element.py +0 -42
  209. notionary/blocks/bookmark/__init__.py +0 -12
  210. notionary/blocks/bookmark/bookmark_element.py +0 -83
  211. notionary/blocks/bookmark/bookmark_markdown_node.py +0 -28
  212. notionary/blocks/bookmark/bookmark_models.py +0 -15
  213. notionary/blocks/breadcrumbs/__init__.py +0 -15
  214. notionary/blocks/breadcrumbs/breadcrumb_element.py +0 -39
  215. notionary/blocks/breadcrumbs/breadcrumb_markdown_node.py +0 -13
  216. notionary/blocks/breadcrumbs/breadcrumb_models.py +0 -12
  217. notionary/blocks/bulleted_list/__init__.py +0 -15
  218. notionary/blocks/bulleted_list/bulleted_list_element.py +0 -74
  219. notionary/blocks/bulleted_list/bulleted_list_markdown_node.py +0 -20
  220. notionary/blocks/bulleted_list/bulleted_list_models.py +0 -17
  221. notionary/blocks/callout/__init__.py +0 -12
  222. notionary/blocks/callout/callout_element.py +0 -99
  223. notionary/blocks/callout/callout_markdown_node.py +0 -19
  224. notionary/blocks/callout/callout_models.py +0 -33
  225. notionary/blocks/child_database/__init__.py +0 -14
  226. notionary/blocks/child_database/child_database_element.py +0 -59
  227. notionary/blocks/child_database/child_database_models.py +0 -12
  228. notionary/blocks/child_page/__init__.py +0 -9
  229. notionary/blocks/child_page/child_page_element.py +0 -94
  230. notionary/blocks/child_page/child_page_models.py +0 -12
  231. notionary/blocks/code/__init__.py +0 -11
  232. notionary/blocks/code/code_element.py +0 -149
  233. notionary/blocks/code/code_markdown_node.py +0 -80
  234. notionary/blocks/code/code_models.py +0 -94
  235. notionary/blocks/column/__init__.py +0 -25
  236. notionary/blocks/column/column_element.py +0 -65
  237. notionary/blocks/column/column_list_element.py +0 -52
  238. notionary/blocks/column/column_list_markdown_node.py +0 -34
  239. notionary/blocks/column/column_markdown_node.py +0 -42
  240. notionary/blocks/column/column_models.py +0 -26
  241. notionary/blocks/divider/__init__.py +0 -12
  242. notionary/blocks/divider/divider_element.py +0 -41
  243. notionary/blocks/divider/divider_markdown_node.py +0 -11
  244. notionary/blocks/divider/divider_models.py +0 -12
  245. notionary/blocks/embed/__init__.py +0 -12
  246. notionary/blocks/embed/embed_element.py +0 -98
  247. notionary/blocks/embed/embed_markdown_node.py +0 -19
  248. notionary/blocks/embed/embed_models.py +0 -14
  249. notionary/blocks/equation/__init__.py +0 -13
  250. notionary/blocks/equation/equation_element.py +0 -133
  251. notionary/blocks/equation/equation_element_markdown_node.py +0 -23
  252. notionary/blocks/equation/equation_models.py +0 -11
  253. notionary/blocks/file/__init__.py +0 -23
  254. notionary/blocks/file/file_element.py +0 -133
  255. notionary/blocks/file/file_element_markdown_node.py +0 -24
  256. notionary/blocks/file/file_element_models.py +0 -39
  257. notionary/blocks/heading/__init__.py +0 -19
  258. notionary/blocks/heading/heading_element.py +0 -112
  259. notionary/blocks/heading/heading_markdown_node.py +0 -16
  260. notionary/blocks/heading/heading_models.py +0 -29
  261. notionary/blocks/image_block/__init__.py +0 -11
  262. notionary/blocks/image_block/image_element.py +0 -130
  263. notionary/blocks/image_block/image_markdown_node.py +0 -25
  264. notionary/blocks/image_block/image_models.py +0 -10
  265. notionary/blocks/markdown/markdown_builder.py +0 -525
  266. notionary/blocks/markdown/markdown_document_model.py +0 -0
  267. notionary/blocks/markdown/markdown_node.py +0 -25
  268. notionary/blocks/mixins/captions/__init__.py +0 -4
  269. notionary/blocks/mixins/captions/caption_markdown_node_mixin.py +0 -31
  270. notionary/blocks/mixins/captions/caption_mixin.py +0 -92
  271. notionary/blocks/mixins/file_upload/__init__.py +0 -3
  272. notionary/blocks/mixins/file_upload/file_upload_mixin.py +0 -320
  273. notionary/blocks/models.py +0 -174
  274. notionary/blocks/numbered_list/__init__.py +0 -16
  275. notionary/blocks/numbered_list/numbered_list_element.py +0 -65
  276. notionary/blocks/numbered_list/numbered_list_markdown_node.py +0 -17
  277. notionary/blocks/numbered_list/numbered_list_models.py +0 -17
  278. notionary/blocks/paragraph/__init__.py +0 -15
  279. notionary/blocks/paragraph/paragraph_element.py +0 -58
  280. notionary/blocks/paragraph/paragraph_markdown_node.py +0 -16
  281. notionary/blocks/paragraph/paragraph_models.py +0 -16
  282. notionary/blocks/pdf/__init__.py +0 -11
  283. notionary/blocks/pdf/pdf_element.py +0 -146
  284. notionary/blocks/pdf/pdf_markdown_node.py +0 -24
  285. notionary/blocks/pdf/pdf_models.py +0 -11
  286. notionary/blocks/quote/__init__.py +0 -14
  287. notionary/blocks/quote/quote_element.py +0 -75
  288. notionary/blocks/quote/quote_markdown_node.py +0 -16
  289. notionary/blocks/quote/quote_models.py +0 -18
  290. notionary/blocks/registry/__init__.py +0 -3
  291. notionary/blocks/registry/block_registry.py +0 -150
  292. notionary/blocks/rich_text/__init__.py +0 -33
  293. notionary/blocks/rich_text/rich_text_models.py +0 -221
  294. notionary/blocks/rich_text/text_inline_formatter.py +0 -456
  295. notionary/blocks/syntax_prompt_builder.py +0 -137
  296. notionary/blocks/table/__init__.py +0 -19
  297. notionary/blocks/table/table_element.py +0 -225
  298. notionary/blocks/table/table_markdown_node.py +0 -42
  299. notionary/blocks/table/table_models.py +0 -28
  300. notionary/blocks/table_of_contents/__init__.py +0 -17
  301. notionary/blocks/table_of_contents/table_of_contents_element.py +0 -80
  302. notionary/blocks/table_of_contents/table_of_contents_markdown_node.py +0 -21
  303. notionary/blocks/table_of_contents/table_of_contents_models.py +0 -18
  304. notionary/blocks/todo/__init__.py +0 -12
  305. notionary/blocks/todo/todo_element.py +0 -81
  306. notionary/blocks/todo/todo_markdown_node.py +0 -21
  307. notionary/blocks/todo/todo_models.py +0 -18
  308. notionary/blocks/toggle/__init__.py +0 -12
  309. notionary/blocks/toggle/toggle_element.py +0 -112
  310. notionary/blocks/toggle/toggle_markdown_node.py +0 -31
  311. notionary/blocks/toggle/toggle_models.py +0 -17
  312. notionary/blocks/toggleable_heading/__init__.py +0 -11
  313. notionary/blocks/toggleable_heading/toggleable_heading_element.py +0 -115
  314. notionary/blocks/toggleable_heading/toggleable_heading_markdown_node.py +0 -34
  315. notionary/blocks/types.py +0 -130
  316. notionary/blocks/video/__init__.py +0 -11
  317. notionary/blocks/video/video_element.py +0 -187
  318. notionary/blocks/video/video_element_models.py +0 -10
  319. notionary/blocks/video/video_markdown_node.py +0 -26
  320. notionary/comments/__init__.py +0 -26
  321. notionary/database/__init__.py +0 -4
  322. notionary/database/database.py +0 -480
  323. notionary/database/database_filter_builder.py +0 -173
  324. notionary/database/database_provider.py +0 -227
  325. notionary/database/exceptions.py +0 -13
  326. notionary/database/factory.py +0 -0
  327. notionary/database/models.py +0 -337
  328. notionary/database/notion_database.py +0 -487
  329. notionary/file_upload/__init__.py +0 -7
  330. notionary/page/client.py +0 -124
  331. notionary/page/markdown_whitespace_processor.py +0 -129
  332. notionary/page/models.py +0 -322
  333. notionary/page/notion_page.py +0 -712
  334. notionary/page/page_content_deleting_service.py +0 -117
  335. notionary/page/page_content_writer.py +0 -80
  336. notionary/page/property_formatter.py +0 -99
  337. notionary/page/reader/handler/__init__.py +0 -19
  338. notionary/page/reader/handler/base_block_renderer.py +0 -44
  339. notionary/page/reader/handler/block_processing_context.py +0 -35
  340. notionary/page/reader/handler/block_rendering_context.py +0 -48
  341. notionary/page/reader/handler/column_list_renderer.py +0 -51
  342. notionary/page/reader/handler/column_renderer.py +0 -60
  343. notionary/page/reader/handler/equation_renderer.py +0 -0
  344. notionary/page/reader/handler/line_renderer.py +0 -73
  345. notionary/page/reader/handler/numbered_list_renderer.py +0 -85
  346. notionary/page/reader/handler/toggle_renderer.py +0 -69
  347. notionary/page/reader/handler/toggleable_heading_renderer.py +0 -89
  348. notionary/page/reader/page_content_retriever.py +0 -81
  349. notionary/page/search_filter_builder.py +0 -132
  350. notionary/page/utils.py +0 -60
  351. notionary/page/writer/handler/__init__.py +0 -24
  352. notionary/page/writer/handler/code_handler.py +0 -72
  353. notionary/page/writer/handler/column_handler.py +0 -141
  354. notionary/page/writer/handler/column_list_handler.py +0 -139
  355. notionary/page/writer/handler/equation_handler.py +0 -74
  356. notionary/page/writer/handler/line_handler.py +0 -35
  357. notionary/page/writer/handler/line_processing_context.py +0 -54
  358. notionary/page/writer/handler/regular_line_handler.py +0 -86
  359. notionary/page/writer/handler/table_handler.py +0 -66
  360. notionary/page/writer/handler/toggle_handler.py +0 -159
  361. notionary/page/writer/handler/toggleable_heading_handler.py +0 -174
  362. notionary/page/writer/markdown_to_notion_converter.py +0 -139
  363. notionary/page/writer/markdown_to_notion_converter_context.py +0 -30
  364. notionary/page/writer/markdown_to_notion_text_length_post_processor.py +0 -0
  365. notionary/page/writer/notion_text_length_processor.py +0 -150
  366. notionary/schemas/__init__.py +0 -3
  367. notionary/schemas/base.py +0 -73
  368. notionary/shared/__init__.py +0 -3
  369. notionary/shared/name_to_id_resolver.py +0 -203
  370. notionary/telemetry/__init__.py +0 -19
  371. notionary/telemetry/service.py +0 -136
  372. notionary/telemetry/views.py +0 -73
  373. notionary/user/base_notion_user.py +0 -53
  374. notionary/user/models.py +0 -84
  375. notionary/user/notion_bot_user.py +0 -226
  376. notionary/user/notion_user.py +0 -255
  377. notionary/user/notion_user_manager.py +0 -101
  378. notionary/util/__init__.py +0 -15
  379. notionary/util/concurrency_limiter.py +0 -0
  380. notionary/util/factory_decorator.py +0 -0
  381. notionary/util/factory_only.py +0 -37
  382. notionary/util/fuzzy.py +0 -75
  383. notionary/util/page_id_utils.py +0 -27
  384. notionary/util/singleton.py +0 -18
  385. notionary/util/singleton_metaclass.py +0 -22
  386. notionary/workspace.py +0 -105
  387. notionary-0.2.27.dist-info/RECORD +0 -202
@@ -0,0 +1,23 @@
1
+ from typing import override
2
+
3
+ from notionary.page.content.markdown.nodes.base import MarkdownNode
4
+ from notionary.page.content.markdown.nodes.mixins.caption import CaptionMarkdownNodeMixin
5
+ from notionary.page.content.syntax.service import SyntaxRegistry
6
+
7
+
8
+ class EmbedMarkdownNode(MarkdownNode, CaptionMarkdownNodeMixin):
9
+ def __init__(
10
+ self,
11
+ url: str,
12
+ caption: str | None = None,
13
+ syntax_registry: SyntaxRegistry | None = None,
14
+ ) -> None:
15
+ super().__init__(syntax_registry=syntax_registry)
16
+ self.url = url
17
+ self.caption = caption
18
+
19
+ @override
20
+ def to_markdown(self) -> str:
21
+ embed_syntax = self._syntax_registry.get_embed_syntax()
22
+ base_markdown = f"{embed_syntax.start_delimiter}{self.url}{embed_syntax.end_delimiter}"
23
+ return self._append_caption_to_markdown(base_markdown, self.caption)
@@ -0,0 +1,19 @@
1
+ from typing import override
2
+
3
+ from notionary.page.content.markdown.nodes.base import MarkdownNode
4
+ from notionary.page.content.syntax.service import SyntaxRegistry
5
+
6
+
7
+ class EquationMarkdownNode(MarkdownNode):
8
+ def __init__(self, expression: str, syntax_registry: SyntaxRegistry | None = None) -> None:
9
+ super().__init__(syntax_registry=syntax_registry)
10
+ self.expression = expression
11
+
12
+ @override
13
+ def to_markdown(self) -> str:
14
+ expr = self.expression.strip()
15
+ equation_syntax = self._syntax_registry.get_equation_syntax()
16
+ if not expr:
17
+ return f"{equation_syntax.start_delimiter}{equation_syntax.end_delimiter}"
18
+
19
+ return f"{equation_syntax.start_delimiter}{expr}{equation_syntax.end_delimiter}"
@@ -0,0 +1,23 @@
1
+ from typing import override
2
+
3
+ from notionary.page.content.markdown.nodes.base import MarkdownNode
4
+ from notionary.page.content.markdown.nodes.mixins.caption import CaptionMarkdownNodeMixin
5
+ from notionary.page.content.syntax.service import SyntaxRegistry
6
+
7
+
8
+ class FileMarkdownNode(MarkdownNode, CaptionMarkdownNodeMixin):
9
+ def __init__(
10
+ self,
11
+ url: str,
12
+ caption: str | None = None,
13
+ syntax_registry: SyntaxRegistry | None = None,
14
+ ) -> None:
15
+ super().__init__(syntax_registry=syntax_registry)
16
+ self.url = url
17
+ self.caption = caption
18
+
19
+ @override
20
+ def to_markdown(self) -> str:
21
+ file_syntax = self._syntax_registry.get_file_syntax()
22
+ base_markdown = f"{file_syntax.start_delimiter}{self.url}{file_syntax.end_delimiter}"
23
+ return self._append_caption_to_markdown(base_markdown, self.caption)
@@ -0,0 +1,16 @@
1
+ from typing import override
2
+
3
+ from notionary.page.content.markdown.nodes.base import MarkdownNode
4
+ from notionary.page.content.syntax.service import SyntaxRegistry
5
+
6
+
7
+ class HeadingMarkdownNode(MarkdownNode):
8
+ def __init__(self, text: str, level: int = 1, syntax_registry: SyntaxRegistry | None = None) -> None:
9
+ super().__init__(syntax_registry=syntax_registry)
10
+ self.text = text
11
+ self.level = max(1, min(3, level))
12
+
13
+ @override
14
+ def to_markdown(self) -> str:
15
+ heading_syntax = self._syntax_registry.get_heading_syntax()
16
+ return f"{heading_syntax.start_delimiter * self.level} {self.text}"
@@ -0,0 +1,23 @@
1
+ from typing import override
2
+
3
+ from notionary.page.content.markdown.nodes.base import MarkdownNode
4
+ from notionary.page.content.markdown.nodes.mixins.caption import CaptionMarkdownNodeMixin
5
+ from notionary.page.content.syntax.service import SyntaxRegistry
6
+
7
+
8
+ class ImageMarkdownNode(MarkdownNode, CaptionMarkdownNodeMixin):
9
+ def __init__(
10
+ self,
11
+ url: str,
12
+ caption: str | None = None,
13
+ syntax_registry: SyntaxRegistry | None = None,
14
+ ) -> None:
15
+ super().__init__(syntax_registry=syntax_registry)
16
+ self.url = url
17
+ self.caption = caption
18
+
19
+ @override
20
+ def to_markdown(self) -> str:
21
+ image_syntax = self._syntax_registry.get_image_syntax()
22
+ base_markdown = f"{image_syntax.start_delimiter}{self.url}{image_syntax.end_delimiter}"
23
+ return self._append_caption_to_markdown(base_markdown, self.caption)
@@ -0,0 +1,12 @@
1
+ from notionary.page.content.syntax.service import SyntaxRegistry
2
+
3
+
4
+ class CaptionMarkdownNodeMixin:
5
+ _syntax_registry: SyntaxRegistry
6
+
7
+ def _append_caption_to_markdown(self, base_markdown: str, caption: str | None) -> str:
8
+ if not caption:
9
+ return base_markdown
10
+
11
+ caption_syntax = self._syntax_registry.get_caption_syntax()
12
+ return f"{base_markdown}\n{caption_syntax.start_delimiter} {caption}"
@@ -0,0 +1,15 @@
1
+ from typing import override
2
+
3
+ from notionary.page.content.markdown.nodes.base import MarkdownNode
4
+ from notionary.page.content.syntax.service import SyntaxRegistry
5
+
6
+
7
+ class NumberedListMarkdownNode(MarkdownNode):
8
+ def __init__(self, texts: list[str], syntax_registry: SyntaxRegistry | None = None):
9
+ super().__init__(syntax_registry=syntax_registry)
10
+ self.texts = texts
11
+
12
+ @override
13
+ def to_markdown(self) -> str:
14
+ numbered_list_syntax = self._syntax_registry.get_numbered_list_syntax()
15
+ return "\n".join(f"{i + 1}{numbered_list_syntax.end_delimiter} {text}" for i, text in enumerate(self.texts))
@@ -0,0 +1,14 @@
1
+ from typing import override
2
+
3
+ from notionary.page.content.markdown.nodes.base import MarkdownNode
4
+ from notionary.page.content.syntax.service import SyntaxRegistry
5
+
6
+
7
+ class ParagraphMarkdownNode(MarkdownNode):
8
+ def __init__(self, text: str, syntax_registry: SyntaxRegistry | None = None):
9
+ super().__init__(syntax_registry=syntax_registry)
10
+ self.text = text
11
+
12
+ @override
13
+ def to_markdown(self) -> str:
14
+ return self.text
@@ -0,0 +1,23 @@
1
+ from typing import override
2
+
3
+ from notionary.page.content.markdown.nodes.base import MarkdownNode
4
+ from notionary.page.content.markdown.nodes.mixins.caption import CaptionMarkdownNodeMixin
5
+ from notionary.page.content.syntax.service import SyntaxRegistry
6
+
7
+
8
+ class PdfMarkdownNode(MarkdownNode, CaptionMarkdownNodeMixin):
9
+ def __init__(
10
+ self,
11
+ url: str,
12
+ caption: str | None = None,
13
+ syntax_registry: SyntaxRegistry | None = None,
14
+ ) -> None:
15
+ super().__init__(syntax_registry=syntax_registry)
16
+ self.url = url
17
+ self.caption = caption
18
+
19
+ @override
20
+ def to_markdown(self) -> str:
21
+ pdf_syntax = self._syntax_registry.get_pdf_syntax()
22
+ base_markdown = f"{pdf_syntax.start_delimiter}{self.url}{pdf_syntax.end_delimiter}"
23
+ return self._append_caption_to_markdown(base_markdown, self.caption)
@@ -0,0 +1,15 @@
1
+ from typing import override
2
+
3
+ from notionary.page.content.markdown.nodes.base import MarkdownNode
4
+ from notionary.page.content.syntax.service import SyntaxRegistry
5
+
6
+
7
+ class QuoteMarkdownNode(MarkdownNode):
8
+ def __init__(self, text: str, syntax_registry: SyntaxRegistry | None = None) -> None:
9
+ super().__init__(syntax_registry=syntax_registry)
10
+ self.text = text
11
+
12
+ @override
13
+ def to_markdown(self) -> str:
14
+ quote_syntax = self._syntax_registry.get_quote_syntax()
15
+ return f"{quote_syntax.start_delimiter} {self.text}"
@@ -0,0 +1,14 @@
1
+ from typing import override
2
+
3
+ from notionary.page.content.markdown.nodes.base import MarkdownNode
4
+ from notionary.page.content.syntax.service import SyntaxRegistry
5
+
6
+
7
+ class SpaceMarkdownNode(MarkdownNode):
8
+ def __init__(self, syntax_registry: SyntaxRegistry | None = None) -> None:
9
+ super().__init__(syntax_registry=syntax_registry)
10
+
11
+ @override
12
+ def to_markdown(self) -> str:
13
+ space_syntax = self._syntax_registry.get_space_syntax()
14
+ return space_syntax.start_delimiter
@@ -0,0 +1,45 @@
1
+ from typing import override
2
+
3
+ from notionary.page.content.markdown.nodes.base import MarkdownNode
4
+ from notionary.page.content.syntax.service import SyntaxRegistry
5
+
6
+
7
+ class TableMarkdownNode(MarkdownNode):
8
+ def __init__(
9
+ self, headers: list[str], rows: list[list[str]], syntax_registry: SyntaxRegistry | None = None
10
+ ) -> None:
11
+ super().__init__(syntax_registry=syntax_registry)
12
+ self._validate_input(headers, rows)
13
+ self.headers = headers
14
+ self.rows = rows
15
+
16
+ def _validate_input(self, headers: list[str], rows: list[list[str]]) -> None:
17
+ if not headers:
18
+ raise ValueError("headers must not be empty")
19
+ if not all(isinstance(row, list) for row in rows):
20
+ raise ValueError("rows must be a list of lists")
21
+
22
+ @override
23
+ def to_markdown(self) -> str:
24
+ header = self._build_header_row()
25
+ separator = self._build_separator_row()
26
+ data_rows = self._build_data_rows()
27
+ return "\n".join([header, separator, *data_rows])
28
+
29
+ def _build_header_row(self) -> str:
30
+ return self._format_row(self.headers)
31
+
32
+ def _format_row(self, cells: list[str]) -> str:
33
+ table_syntax = self._syntax_registry.get_table_syntax()
34
+ delimiter = table_syntax.start_delimiter
35
+ joined_cells = f" {delimiter} ".join(cells)
36
+ return f"{delimiter} {joined_cells} {delimiter}"
37
+
38
+ def _build_separator_row(self) -> str:
39
+ table_syntax = self._syntax_registry.get_table_syntax()
40
+ col_count = len(self.headers)
41
+ separators = [table_syntax.end_delimiter] * col_count
42
+ return self._format_row(separators)
43
+
44
+ def _build_data_rows(self) -> list[str]:
45
+ return [self._format_row(row) for row in self.rows]
@@ -0,0 +1,14 @@
1
+ from typing import override
2
+
3
+ from notionary.page.content.markdown.nodes.base import MarkdownNode
4
+ from notionary.page.content.syntax.service import SyntaxRegistry
5
+
6
+
7
+ class TableOfContentsMarkdownNode(MarkdownNode):
8
+ def __init__(self, syntax_registry: SyntaxRegistry | None = None) -> None:
9
+ super().__init__(syntax_registry=syntax_registry)
10
+
11
+ @override
12
+ def to_markdown(self) -> str:
13
+ toc_syntax = self._syntax_registry.get_table_of_contents_syntax()
14
+ return toc_syntax.start_delimiter
@@ -0,0 +1,22 @@
1
+ from typing import override
2
+
3
+ from notionary.page.content.markdown.nodes.base import MarkdownNode
4
+ from notionary.page.content.syntax.service import SyntaxRegistry
5
+
6
+
7
+ class TodoMarkdownNode(MarkdownNode):
8
+ def __init__(
9
+ self, text: str, checked: bool = False, marker: str = "-", syntax_registry: SyntaxRegistry | None = None
10
+ ):
11
+ super().__init__(syntax_registry=syntax_registry)
12
+ self.text = text
13
+ self.checked = checked
14
+ self.marker = marker
15
+
16
+ @override
17
+ def to_markdown(self) -> str:
18
+ # Validate marker to ensure it's valid
19
+ valid_marker = self.marker if self.marker in {"-", "*", "+"} else "-"
20
+ todo_syntax = self._syntax_registry.get_todo_syntax()
21
+ checkbox_state = todo_syntax.end_delimiter if self.checked else todo_syntax.start_delimiter
22
+ return f"{valid_marker} {checkbox_state} {self.text}"
@@ -0,0 +1,28 @@
1
+ from typing import override
2
+
3
+ from notionary.page.content.markdown.nodes.base import MarkdownNode
4
+ from notionary.page.content.syntax.service import SyntaxRegistry
5
+
6
+
7
+ class ToggleMarkdownNode(MarkdownNode):
8
+ def __init__(
9
+ self, title: str, children: list[MarkdownNode] | None = None, syntax_registry: SyntaxRegistry | None = None
10
+ ):
11
+ super().__init__(syntax_registry=syntax_registry)
12
+ self.title = title
13
+ self.children = children or []
14
+
15
+ @override
16
+ def to_markdown(self) -> str:
17
+ toggle_syntax = self._syntax_registry.get_toggle_syntax()
18
+ result = f"{toggle_syntax.start_delimiter} {self.title}"
19
+
20
+ if not self.children:
21
+ result += f"\n{toggle_syntax.end_delimiter}"
22
+ return result
23
+
24
+ # Convert children to markdown
25
+ content_parts = [child.to_markdown() for child in self.children]
26
+ content_text = "\n\n".join(content_parts)
27
+
28
+ return result + "\n" + content_text + f"\n{toggle_syntax.end_delimiter}"
@@ -0,0 +1,35 @@
1
+ from typing import override
2
+
3
+ from notionary.page.content.markdown.nodes.base import MarkdownNode
4
+ from notionary.page.content.syntax.service import SyntaxRegistry
5
+
6
+
7
+ class ToggleableHeadingMarkdownNode(MarkdownNode):
8
+ def __init__(
9
+ self,
10
+ text: str,
11
+ level: int,
12
+ children: list[MarkdownNode] | None = None,
13
+ syntax_registry: SyntaxRegistry | None = None,
14
+ ):
15
+ super().__init__(syntax_registry=syntax_registry)
16
+ self.text = text
17
+ self.level = max(1, min(3, level))
18
+ self.children = children or []
19
+
20
+ @override
21
+ def to_markdown(self) -> str:
22
+ toggle_syntax = self._syntax_registry.get_toggle_syntax()
23
+ heading_syntax = self._syntax_registry.get_heading_syntax()
24
+ prefix = toggle_syntax.start_delimiter + (heading_syntax.start_delimiter * self.level)
25
+ result = f"{prefix} {self.text}"
26
+
27
+ if not self.children:
28
+ result += f"\n{toggle_syntax.end_delimiter}"
29
+ return result
30
+
31
+ # Convert children to markdown
32
+ content_parts = [child.to_markdown() for child in self.children]
33
+ content_text = "\n\n".join(content_parts)
34
+
35
+ return result + "\n" + content_text + f"\n{toggle_syntax.end_delimiter}"
@@ -0,0 +1,23 @@
1
+ from typing import override
2
+
3
+ from notionary.page.content.markdown.nodes.base import MarkdownNode
4
+ from notionary.page.content.markdown.nodes.mixins.caption import CaptionMarkdownNodeMixin
5
+ from notionary.page.content.syntax.service import SyntaxRegistry
6
+
7
+
8
+ class VideoMarkdownNode(MarkdownNode, CaptionMarkdownNodeMixin):
9
+ def __init__(
10
+ self,
11
+ url: str,
12
+ caption: str | None = None,
13
+ syntax_registry: SyntaxRegistry | None = None,
14
+ ) -> None:
15
+ super().__init__(syntax_registry=syntax_registry)
16
+ self.url = url
17
+ self.caption = caption
18
+
19
+ @override
20
+ def to_markdown(self) -> str:
21
+ video_syntax = self._syntax_registry.get_video_syntax()
22
+ base_markdown = f"{video_syntax.start_delimiter}{self.url}{video_syntax.end_delimiter}"
23
+ return self._append_caption_to_markdown(base_markdown, self.caption)
@@ -0,0 +1,49 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Awaitable, Callable
4
+ from dataclasses import dataclass, field
5
+
6
+ from notionary.blocks.schemas import BlockCreatePayload
7
+
8
+
9
+ @dataclass
10
+ class ParentBlockContext:
11
+ block: BlockCreatePayload
12
+ child_lines: list[str]
13
+ child_blocks: list[BlockCreatePayload] = field(default_factory=list)
14
+
15
+ def add_child_line(self, content: str) -> None:
16
+ self.child_lines.append(content)
17
+
18
+ def add_child_block(self, block: BlockCreatePayload) -> None:
19
+ self.child_blocks.append(block)
20
+
21
+
22
+ ParseChildrenCallback = Callable[[list[str]], Awaitable[list[BlockCreatePayload]]]
23
+
24
+
25
+ @dataclass
26
+ class BlockParsingContext:
27
+ line: str
28
+ result_blocks: list[BlockCreatePayload]
29
+ parent_stack: list[ParentBlockContext]
30
+
31
+ parse_children_callback: ParseChildrenCallback | None = None
32
+
33
+ all_lines: list[str] | None = None
34
+ current_line_index: int | None = None
35
+ lines_consumed: int = 0
36
+
37
+ async def parse_nested_content(self, nested_lines: list[str]) -> list[BlockCreatePayload]:
38
+ if not self.parse_children_callback or not nested_lines:
39
+ return []
40
+
41
+ return await self.parse_children_callback(nested_lines)
42
+
43
+ def get_remaining_lines(self) -> list[str]:
44
+ if self.all_lines is None or self.current_line_index is None:
45
+ return []
46
+ return self.all_lines[self.current_line_index + 1 :]
47
+
48
+ def is_inside_parent_context(self) -> bool:
49
+ return len(self.parent_stack) > 0
@@ -0,0 +1,219 @@
1
+ from notionary.blocks.rich_text.markdown_rich_text_converter import (
2
+ MarkdownRichTextConverter,
3
+ )
4
+ from notionary.page.content.parser.parsers import (
5
+ AudioParser,
6
+ BookmarkParser,
7
+ BreadcrumbParser,
8
+ BulletedListParser,
9
+ CalloutParser,
10
+ CaptionParser,
11
+ CodeParser,
12
+ ColumnListParser,
13
+ ColumnParser,
14
+ DividerParser,
15
+ EmbedParser,
16
+ EquationParser,
17
+ FileParser,
18
+ HeadingParser,
19
+ ImageParser,
20
+ LineParser,
21
+ NumberedListParser,
22
+ ParagraphParser,
23
+ PdfParser,
24
+ QuoteParser,
25
+ SpaceParser,
26
+ TableOfContentsParser,
27
+ TableParser,
28
+ TodoParser,
29
+ ToggleableHeadingParser,
30
+ ToggleParser,
31
+ VideoParser,
32
+ )
33
+ from notionary.page.content.syntax.service import SyntaxRegistry
34
+
35
+
36
+ class ConverterChainFactory:
37
+ def __init__(
38
+ self,
39
+ rich_text_converter: MarkdownRichTextConverter | None = None,
40
+ syntax_registry: SyntaxRegistry | None = None,
41
+ ) -> None:
42
+ self._rich_text_converter = rich_text_converter or MarkdownRichTextConverter()
43
+ self._syntax_registry = syntax_registry or SyntaxRegistry()
44
+
45
+ def create(self) -> LineParser:
46
+ # multi-line (structural) blocks
47
+ code_parser = self._create_code_parser()
48
+ equation_parser = self._create_equation_parser()
49
+ table_parser = self._create_table_parser()
50
+ column_parser = self._create_column_parser()
51
+ column_list_parser = self._create_column_list_parser()
52
+ toggleable_heading_parser = self._create_toggleable_heading_parser()
53
+ toggle_parser = self._create_toggle_parser()
54
+
55
+ # Single-line blocks
56
+ divider_parser = self._create_divider_parser()
57
+ breadcrumb_parser = self._create_breadcrumb_parser()
58
+ table_of_contents_parser = self._create_table_of_contents_parser()
59
+ space_parser = self._create_space_parser()
60
+ heading_parser = self._create_heading_parser()
61
+ quote_parser = self._create_quote_parser()
62
+ callout_parser = self._create_callout_parser()
63
+ todo_parser = self._create_todo_parser()
64
+ bulleted_list_parser = self._create_bulleted_list_parser()
65
+ numbered_list_parser = self._create_numbered_list_parser()
66
+
67
+ # Media blocks
68
+ bookmark_parser = self._create_bookmark_parser()
69
+ embed_parser = self._create_embed_parser()
70
+ image_parser = self._create_image_parser()
71
+ video_parser = self._create_video_parser()
72
+ audio_parser = self._create_audio_parser()
73
+ file_parser = self._create_file_parser()
74
+ pdf_parser = self._create_pdf_parser()
75
+
76
+ # Caption and Fallback
77
+ caption_parser = self._create_caption_parser()
78
+ paragraph_parser = self._create_paragraph_parser()
79
+
80
+ (
81
+ code_parser.set_next(equation_parser)
82
+ .set_next(table_parser)
83
+ .set_next(column_parser)
84
+ .set_next(column_list_parser)
85
+ .set_next(toggleable_heading_parser)
86
+ .set_next(toggle_parser)
87
+ .set_next(divider_parser)
88
+ .set_next(breadcrumb_parser)
89
+ .set_next(table_of_contents_parser)
90
+ .set_next(space_parser)
91
+ .set_next(heading_parser)
92
+ .set_next(quote_parser)
93
+ .set_next(callout_parser)
94
+ .set_next(todo_parser)
95
+ .set_next(bulleted_list_parser)
96
+ .set_next(numbered_list_parser)
97
+ .set_next(bookmark_parser)
98
+ .set_next(embed_parser)
99
+ .set_next(image_parser)
100
+ .set_next(video_parser)
101
+ .set_next(audio_parser)
102
+ .set_next(file_parser)
103
+ .set_next(pdf_parser)
104
+ .set_next(caption_parser)
105
+ .set_next(paragraph_parser)
106
+ )
107
+
108
+ return code_parser
109
+
110
+ def _create_code_parser(self) -> CodeParser:
111
+ return CodeParser(
112
+ syntax_registry=self._syntax_registry,
113
+ rich_text_converter=self._rich_text_converter,
114
+ )
115
+
116
+ def _create_equation_parser(self) -> EquationParser:
117
+ return EquationParser(syntax_registry=self._syntax_registry)
118
+
119
+ def _create_table_parser(self) -> TableParser:
120
+ return TableParser(
121
+ syntax_registry=self._syntax_registry,
122
+ rich_text_converter=self._rich_text_converter,
123
+ )
124
+
125
+ def _create_column_parser(self) -> ColumnParser:
126
+ return ColumnParser(syntax_registry=self._syntax_registry)
127
+
128
+ def _create_column_list_parser(self) -> ColumnListParser:
129
+ return ColumnListParser(syntax_registry=self._syntax_registry)
130
+
131
+ def _create_toggleable_heading_parser(self) -> ToggleableHeadingParser:
132
+ return ToggleableHeadingParser(
133
+ syntax_registry=self._syntax_registry,
134
+ rich_text_converter=self._rich_text_converter,
135
+ )
136
+
137
+ def _create_toggle_parser(self) -> ToggleParser:
138
+ return ToggleParser(
139
+ syntax_registry=self._syntax_registry,
140
+ rich_text_converter=self._rich_text_converter,
141
+ )
142
+
143
+ def _create_divider_parser(self) -> DividerParser:
144
+ return DividerParser(syntax_registry=self._syntax_registry)
145
+
146
+ def _create_breadcrumb_parser(self) -> BreadcrumbParser:
147
+ return BreadcrumbParser(syntax_registry=self._syntax_registry)
148
+
149
+ def _create_table_of_contents_parser(self) -> TableOfContentsParser:
150
+ return TableOfContentsParser(syntax_registry=self._syntax_registry)
151
+
152
+ def _create_space_parser(self) -> SpaceParser:
153
+ return SpaceParser(syntax_registry=self._syntax_registry)
154
+
155
+ def _create_heading_parser(self) -> HeadingParser:
156
+ return HeadingParser(
157
+ syntax_registry=self._syntax_registry,
158
+ rich_text_converter=self._rich_text_converter,
159
+ )
160
+
161
+ def _create_quote_parser(self) -> QuoteParser:
162
+ return QuoteParser(
163
+ syntax_registry=self._syntax_registry,
164
+ rich_text_converter=self._rich_text_converter,
165
+ )
166
+
167
+ def _create_callout_parser(self) -> CalloutParser:
168
+ return CalloutParser(
169
+ syntax_registry=self._syntax_registry,
170
+ rich_text_converter=self._rich_text_converter,
171
+ )
172
+
173
+ def _create_todo_parser(self) -> TodoParser:
174
+ return TodoParser(
175
+ syntax_registry=self._syntax_registry,
176
+ rich_text_converter=self._rich_text_converter,
177
+ )
178
+
179
+ def _create_bulleted_list_parser(self) -> BulletedListParser:
180
+ return BulletedListParser(
181
+ syntax_registry=self._syntax_registry,
182
+ rich_text_converter=self._rich_text_converter,
183
+ )
184
+
185
+ def _create_numbered_list_parser(self) -> NumberedListParser:
186
+ return NumberedListParser(
187
+ syntax_registry=self._syntax_registry,
188
+ rich_text_converter=self._rich_text_converter,
189
+ )
190
+
191
+ def _create_bookmark_parser(self) -> BookmarkParser:
192
+ return BookmarkParser(syntax_registry=self._syntax_registry)
193
+
194
+ def _create_embed_parser(self) -> EmbedParser:
195
+ return EmbedParser(syntax_registry=self._syntax_registry)
196
+
197
+ def _create_image_parser(self) -> ImageParser:
198
+ return ImageParser(syntax_registry=self._syntax_registry)
199
+
200
+ def _create_video_parser(self) -> VideoParser:
201
+ return VideoParser(syntax_registry=self._syntax_registry)
202
+
203
+ def _create_audio_parser(self) -> AudioParser:
204
+ return AudioParser(syntax_registry=self._syntax_registry)
205
+
206
+ def _create_file_parser(self) -> FileParser:
207
+ return FileParser(syntax_registry=self._syntax_registry)
208
+
209
+ def _create_pdf_parser(self) -> PdfParser:
210
+ return PdfParser(syntax_registry=self._syntax_registry)
211
+
212
+ def _create_caption_parser(self) -> CaptionParser:
213
+ return CaptionParser(
214
+ syntax_registry=self._syntax_registry,
215
+ rich_text_converter=self._rich_text_converter,
216
+ )
217
+
218
+ def _create_paragraph_parser(self) -> ParagraphParser:
219
+ return ParagraphParser(rich_text_converter=self._rich_text_converter)