notionary 0.2.27__py3-none-any.whl → 0.3.0__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 (395) hide show
  1. notionary/__init__.py +5 -20
  2. notionary/blocks/__init__.py +4 -4
  3. notionary/blocks/client.py +90 -216
  4. notionary/blocks/enums.py +167 -0
  5. notionary/blocks/rich_text/markdown_rich_text_converter.py +280 -0
  6. notionary/blocks/rich_text/models.py +178 -0
  7. notionary/blocks/rich_text/name_id_resolver/__init__.py +13 -0
  8. notionary/blocks/rich_text/name_id_resolver/data_source.py +32 -0
  9. notionary/blocks/rich_text/name_id_resolver/database.py +31 -0
  10. notionary/blocks/rich_text/name_id_resolver/page.py +34 -0
  11. notionary/blocks/rich_text/name_id_resolver/person.py +37 -0
  12. notionary/blocks/rich_text/name_id_resolver/port.py +11 -0
  13. notionary/blocks/rich_text/rich_text_markdown_converter.py +144 -0
  14. notionary/blocks/rich_text/rich_text_patterns.py +42 -0
  15. notionary/blocks/schemas.py +778 -0
  16. notionary/comments/__init__.py +1 -22
  17. notionary/comments/client.py +52 -187
  18. notionary/comments/factory.py +38 -0
  19. notionary/comments/models.py +5 -127
  20. notionary/comments/schemas.py +240 -0
  21. notionary/comments/service.py +34 -0
  22. notionary/data_source/http/client.py +11 -0
  23. notionary/data_source/http/data_source_instance_client.py +104 -0
  24. notionary/data_source/properties/schemas.py +402 -0
  25. notionary/data_source/query/builder.py +448 -0
  26. notionary/data_source/query/resolver.py +114 -0
  27. notionary/data_source/query/schema.py +302 -0
  28. notionary/data_source/query/validator.py +73 -0
  29. notionary/data_source/schema/registry.py +104 -0
  30. notionary/data_source/schema/service.py +136 -0
  31. notionary/data_source/schemas.py +27 -0
  32. notionary/data_source/service.py +377 -0
  33. notionary/database/client.py +30 -135
  34. notionary/database/database_metadata_update_client.py +19 -0
  35. notionary/database/schemas.py +29 -0
  36. notionary/database/service.py +168 -0
  37. notionary/exceptions/__init__.py +33 -0
  38. notionary/exceptions/api.py +41 -0
  39. notionary/exceptions/base.py +2 -0
  40. notionary/exceptions/block_parsing.py +16 -0
  41. notionary/exceptions/data_source/__init__.py +6 -0
  42. notionary/exceptions/data_source/builder.py +182 -0
  43. notionary/exceptions/data_source/properties.py +34 -0
  44. notionary/exceptions/properties.py +58 -0
  45. notionary/exceptions/search.py +57 -0
  46. notionary/file_upload/client.py +18 -30
  47. notionary/file_upload/models.py +7 -8
  48. notionary/file_upload/{notion_file_upload.py → service.py} +29 -64
  49. notionary/http/client.py +204 -0
  50. notionary/http/models.py +50 -0
  51. notionary/page/blocks/client.py +1 -0
  52. notionary/page/content/factory.py +73 -0
  53. notionary/page/content/markdown/__init__.py +5 -0
  54. notionary/page/content/markdown/builder.py +226 -0
  55. notionary/page/content/markdown/nodes/__init__.py +52 -0
  56. notionary/page/content/markdown/nodes/audio.py +23 -0
  57. notionary/page/content/markdown/nodes/base.py +12 -0
  58. notionary/page/content/markdown/nodes/bookmark.py +25 -0
  59. notionary/page/content/markdown/nodes/breadcrumb.py +14 -0
  60. notionary/page/content/markdown/nodes/bulleted_list.py +41 -0
  61. notionary/page/content/markdown/nodes/callout.py +34 -0
  62. notionary/page/content/markdown/nodes/code.py +28 -0
  63. notionary/page/content/markdown/nodes/columns.py +69 -0
  64. notionary/page/content/markdown/nodes/container.py +64 -0
  65. notionary/page/content/markdown/nodes/divider.py +14 -0
  66. notionary/page/content/markdown/nodes/embed.py +23 -0
  67. notionary/page/content/markdown/nodes/equation.py +19 -0
  68. notionary/page/content/markdown/nodes/file.py +23 -0
  69. notionary/page/content/markdown/nodes/heading.py +36 -0
  70. notionary/page/content/markdown/nodes/image.py +23 -0
  71. notionary/page/content/markdown/nodes/mixins/__init__.py +5 -0
  72. notionary/page/content/markdown/nodes/mixins/caption.py +12 -0
  73. notionary/page/content/markdown/nodes/numbered_list.py +38 -0
  74. notionary/page/content/markdown/nodes/paragraph.py +14 -0
  75. notionary/page/content/markdown/nodes/pdf.py +23 -0
  76. notionary/page/content/markdown/nodes/quote.py +27 -0
  77. notionary/page/content/markdown/nodes/space.py +14 -0
  78. notionary/page/content/markdown/nodes/table.py +45 -0
  79. notionary/page/content/markdown/nodes/table_of_contents.py +14 -0
  80. notionary/page/content/markdown/nodes/todo.py +38 -0
  81. notionary/page/content/markdown/nodes/toggle.py +27 -0
  82. notionary/page/content/markdown/nodes/video.py +23 -0
  83. notionary/page/content/parser/context.py +126 -0
  84. notionary/page/content/parser/factory.py +210 -0
  85. notionary/page/content/parser/parsers/__init__.py +58 -0
  86. notionary/page/content/parser/parsers/audio.py +40 -0
  87. notionary/page/content/parser/parsers/base.py +30 -0
  88. notionary/page/content/parser/parsers/bookmark.py +33 -0
  89. notionary/page/content/parser/parsers/breadcrumb.py +33 -0
  90. notionary/page/content/parser/parsers/bulleted_list.py +85 -0
  91. notionary/page/content/parser/parsers/callout.py +100 -0
  92. notionary/page/content/parser/parsers/caption.py +55 -0
  93. notionary/page/content/parser/parsers/code.py +81 -0
  94. notionary/page/content/parser/parsers/column.py +76 -0
  95. notionary/page/content/parser/parsers/column_list.py +81 -0
  96. notionary/page/content/parser/parsers/divider.py +33 -0
  97. notionary/page/content/parser/parsers/embed.py +33 -0
  98. notionary/page/content/parser/parsers/equation.py +65 -0
  99. notionary/page/content/parser/parsers/file.py +42 -0
  100. notionary/page/content/parser/parsers/heading.py +115 -0
  101. notionary/page/content/parser/parsers/image.py +42 -0
  102. notionary/page/content/parser/parsers/numbered_list.py +89 -0
  103. notionary/page/content/parser/parsers/paragraph.py +37 -0
  104. notionary/page/content/parser/parsers/pdf.py +42 -0
  105. notionary/page/content/parser/parsers/quote.py +125 -0
  106. notionary/page/content/parser/parsers/space.py +41 -0
  107. notionary/page/content/parser/parsers/table.py +144 -0
  108. notionary/page/content/parser/parsers/table_of_contents.py +32 -0
  109. notionary/page/content/parser/parsers/todo.py +96 -0
  110. notionary/page/content/parser/parsers/toggle.py +70 -0
  111. notionary/page/content/parser/parsers/video.py +42 -0
  112. notionary/page/content/parser/post_processing/handlers/__init__.py +5 -0
  113. notionary/page/content/parser/post_processing/handlers/rich_text_length.py +95 -0
  114. notionary/page/content/parser/post_processing/handlers/rich_text_length_truncation.py +114 -0
  115. notionary/page/content/parser/post_processing/port.py +9 -0
  116. notionary/page/content/parser/post_processing/service.py +16 -0
  117. notionary/page/content/parser/pre_processsing/handlers/__init__.py +11 -0
  118. notionary/page/content/parser/pre_processsing/handlers/column_syntax.py +130 -0
  119. notionary/page/content/parser/pre_processsing/handlers/indentation.py +84 -0
  120. notionary/page/content/parser/pre_processsing/handlers/port.py +7 -0
  121. notionary/page/content/parser/pre_processsing/handlers/whitespace.py +73 -0
  122. notionary/page/content/parser/pre_processsing/service.py +15 -0
  123. notionary/page/content/parser/service.py +78 -0
  124. notionary/page/content/renderer/context.py +51 -0
  125. notionary/page/content/renderer/factory.py +231 -0
  126. notionary/page/content/renderer/post_processing/handlers/__init__.py +5 -0
  127. notionary/page/content/renderer/post_processing/handlers/numbered_list.py +156 -0
  128. notionary/page/content/renderer/post_processing/port.py +7 -0
  129. notionary/page/content/renderer/post_processing/service.py +15 -0
  130. notionary/page/content/renderer/renderers/__init__.py +55 -0
  131. notionary/page/content/renderer/renderers/audio.py +31 -0
  132. notionary/page/content/renderer/renderers/base.py +31 -0
  133. notionary/page/content/renderer/renderers/bookmark.py +25 -0
  134. notionary/page/content/renderer/renderers/breadcrumb.py +21 -0
  135. notionary/page/content/renderer/renderers/bulleted_list.py +48 -0
  136. notionary/page/content/renderer/renderers/callout.py +50 -0
  137. notionary/page/content/renderer/renderers/captioned_block.py +58 -0
  138. notionary/page/content/renderer/renderers/code.py +34 -0
  139. notionary/page/content/renderer/renderers/column.py +53 -0
  140. notionary/page/content/renderer/renderers/column_list.py +44 -0
  141. notionary/page/content/renderer/renderers/divider.py +22 -0
  142. notionary/page/content/renderer/renderers/embed.py +25 -0
  143. notionary/page/content/renderer/renderers/equation.py +37 -0
  144. notionary/page/content/renderer/renderers/fallback.py +24 -0
  145. notionary/page/content/renderer/renderers/file.py +40 -0
  146. notionary/page/content/renderer/renderers/heading.py +95 -0
  147. notionary/page/content/renderer/renderers/image.py +31 -0
  148. notionary/page/content/renderer/renderers/numbered_list.py +42 -0
  149. notionary/page/content/renderer/renderers/paragraph.py +40 -0
  150. notionary/page/content/renderer/renderers/pdf.py +31 -0
  151. notionary/page/content/renderer/renderers/quote.py +49 -0
  152. notionary/page/content/renderer/renderers/table.py +115 -0
  153. notionary/page/content/renderer/renderers/table_of_contents.py +26 -0
  154. notionary/page/content/renderer/renderers/table_row.py +17 -0
  155. notionary/page/content/renderer/renderers/todo.py +56 -0
  156. notionary/page/content/renderer/renderers/toggle.py +52 -0
  157. notionary/page/content/renderer/renderers/video.py +31 -0
  158. notionary/page/content/renderer/service.py +50 -0
  159. notionary/page/content/service.py +68 -0
  160. notionary/page/content/syntax/__init__.py +4 -0
  161. notionary/page/content/syntax/grammar.py +10 -0
  162. notionary/page/content/syntax/models.py +66 -0
  163. notionary/page/content/syntax/registry.py +393 -0
  164. notionary/page/page_context.py +7 -16
  165. notionary/page/page_http_client.py +15 -0
  166. notionary/page/page_metadata_update_client.py +19 -0
  167. notionary/page/properties/client.py +144 -0
  168. notionary/page/properties/factory.py +26 -0
  169. notionary/page/properties/models.py +308 -0
  170. notionary/page/properties/service.py +261 -0
  171. notionary/page/schemas.py +13 -0
  172. notionary/page/service.py +225 -0
  173. notionary/shared/entity/client.py +29 -0
  174. notionary/shared/entity/dto_parsers.py +53 -0
  175. notionary/shared/entity/entity_metadata_update_client.py +41 -0
  176. notionary/shared/entity/schemas.py +45 -0
  177. notionary/shared/entity/service.py +171 -0
  178. notionary/shared/models/cover.py +20 -0
  179. notionary/shared/models/file.py +21 -0
  180. notionary/shared/models/icon.py +28 -0
  181. notionary/shared/models/parent.py +41 -0
  182. notionary/shared/properties/type.py +30 -0
  183. notionary/shared/typings.py +3 -0
  184. notionary/user/__init__.py +4 -8
  185. notionary/user/base.py +138 -0
  186. notionary/user/bot.py +70 -0
  187. notionary/user/client.py +22 -111
  188. notionary/user/person.py +41 -0
  189. notionary/user/schemas.py +67 -0
  190. notionary/user/service.py +65 -0
  191. notionary/utils/date.py +51 -0
  192. notionary/utils/decorators.py +122 -0
  193. notionary/utils/fuzzy.py +68 -0
  194. notionary/utils/mixins/logging.py +58 -0
  195. notionary/utils/pagination.py +100 -0
  196. notionary/utils/uuid_utils.py +20 -0
  197. notionary/workspace/__init__.py +4 -0
  198. notionary/workspace/client.py +62 -0
  199. notionary/workspace/query/__init__.py +3 -0
  200. notionary/workspace/query/builder.py +60 -0
  201. notionary/workspace/query/models.py +61 -0
  202. notionary/workspace/query/service.py +100 -0
  203. notionary/workspace/schemas.py +21 -0
  204. notionary/workspace/service.py +116 -0
  205. notionary-0.3.0.dist-info/METADATA +201 -0
  206. notionary-0.3.0.dist-info/RECORD +209 -0
  207. {notionary-0.2.27.dist-info → notionary-0.3.0.dist-info}/WHEEL +1 -1
  208. {notionary-0.2.27.dist-info → notionary-0.3.0.dist-info/licenses}/LICENSE +9 -9
  209. notionary/base_notion_client.py +0 -219
  210. notionary/blocks/_bootstrap.py +0 -271
  211. notionary/blocks/audio/__init__.py +0 -11
  212. notionary/blocks/audio/audio_element.py +0 -158
  213. notionary/blocks/audio/audio_markdown_node.py +0 -24
  214. notionary/blocks/audio/audio_models.py +0 -10
  215. notionary/blocks/base_block_element.py +0 -42
  216. notionary/blocks/bookmark/__init__.py +0 -12
  217. notionary/blocks/bookmark/bookmark_element.py +0 -83
  218. notionary/blocks/bookmark/bookmark_markdown_node.py +0 -28
  219. notionary/blocks/bookmark/bookmark_models.py +0 -15
  220. notionary/blocks/breadcrumbs/__init__.py +0 -15
  221. notionary/blocks/breadcrumbs/breadcrumb_element.py +0 -39
  222. notionary/blocks/breadcrumbs/breadcrumb_markdown_node.py +0 -13
  223. notionary/blocks/breadcrumbs/breadcrumb_models.py +0 -12
  224. notionary/blocks/bulleted_list/__init__.py +0 -15
  225. notionary/blocks/bulleted_list/bulleted_list_element.py +0 -74
  226. notionary/blocks/bulleted_list/bulleted_list_markdown_node.py +0 -20
  227. notionary/blocks/bulleted_list/bulleted_list_models.py +0 -17
  228. notionary/blocks/callout/__init__.py +0 -12
  229. notionary/blocks/callout/callout_element.py +0 -99
  230. notionary/blocks/callout/callout_markdown_node.py +0 -19
  231. notionary/blocks/callout/callout_models.py +0 -33
  232. notionary/blocks/child_database/__init__.py +0 -14
  233. notionary/blocks/child_database/child_database_element.py +0 -59
  234. notionary/blocks/child_database/child_database_models.py +0 -12
  235. notionary/blocks/child_page/__init__.py +0 -9
  236. notionary/blocks/child_page/child_page_element.py +0 -94
  237. notionary/blocks/child_page/child_page_models.py +0 -12
  238. notionary/blocks/code/__init__.py +0 -11
  239. notionary/blocks/code/code_element.py +0 -149
  240. notionary/blocks/code/code_markdown_node.py +0 -80
  241. notionary/blocks/code/code_models.py +0 -94
  242. notionary/blocks/column/__init__.py +0 -25
  243. notionary/blocks/column/column_element.py +0 -65
  244. notionary/blocks/column/column_list_element.py +0 -52
  245. notionary/blocks/column/column_list_markdown_node.py +0 -34
  246. notionary/blocks/column/column_markdown_node.py +0 -42
  247. notionary/blocks/column/column_models.py +0 -26
  248. notionary/blocks/divider/__init__.py +0 -12
  249. notionary/blocks/divider/divider_element.py +0 -41
  250. notionary/blocks/divider/divider_markdown_node.py +0 -11
  251. notionary/blocks/divider/divider_models.py +0 -12
  252. notionary/blocks/embed/__init__.py +0 -12
  253. notionary/blocks/embed/embed_element.py +0 -98
  254. notionary/blocks/embed/embed_markdown_node.py +0 -19
  255. notionary/blocks/embed/embed_models.py +0 -14
  256. notionary/blocks/equation/__init__.py +0 -13
  257. notionary/blocks/equation/equation_element.py +0 -133
  258. notionary/blocks/equation/equation_element_markdown_node.py +0 -23
  259. notionary/blocks/equation/equation_models.py +0 -11
  260. notionary/blocks/file/__init__.py +0 -23
  261. notionary/blocks/file/file_element.py +0 -133
  262. notionary/blocks/file/file_element_markdown_node.py +0 -24
  263. notionary/blocks/file/file_element_models.py +0 -39
  264. notionary/blocks/heading/__init__.py +0 -19
  265. notionary/blocks/heading/heading_element.py +0 -112
  266. notionary/blocks/heading/heading_markdown_node.py +0 -16
  267. notionary/blocks/heading/heading_models.py +0 -29
  268. notionary/blocks/image_block/__init__.py +0 -11
  269. notionary/blocks/image_block/image_element.py +0 -130
  270. notionary/blocks/image_block/image_markdown_node.py +0 -25
  271. notionary/blocks/image_block/image_models.py +0 -10
  272. notionary/blocks/markdown/markdown_builder.py +0 -525
  273. notionary/blocks/markdown/markdown_document_model.py +0 -0
  274. notionary/blocks/markdown/markdown_node.py +0 -25
  275. notionary/blocks/mixins/captions/__init__.py +0 -4
  276. notionary/blocks/mixins/captions/caption_markdown_node_mixin.py +0 -31
  277. notionary/blocks/mixins/captions/caption_mixin.py +0 -92
  278. notionary/blocks/mixins/file_upload/__init__.py +0 -3
  279. notionary/blocks/mixins/file_upload/file_upload_mixin.py +0 -320
  280. notionary/blocks/models.py +0 -174
  281. notionary/blocks/numbered_list/__init__.py +0 -16
  282. notionary/blocks/numbered_list/numbered_list_element.py +0 -65
  283. notionary/blocks/numbered_list/numbered_list_markdown_node.py +0 -17
  284. notionary/blocks/numbered_list/numbered_list_models.py +0 -17
  285. notionary/blocks/paragraph/__init__.py +0 -15
  286. notionary/blocks/paragraph/paragraph_element.py +0 -58
  287. notionary/blocks/paragraph/paragraph_markdown_node.py +0 -16
  288. notionary/blocks/paragraph/paragraph_models.py +0 -16
  289. notionary/blocks/pdf/__init__.py +0 -11
  290. notionary/blocks/pdf/pdf_element.py +0 -146
  291. notionary/blocks/pdf/pdf_markdown_node.py +0 -24
  292. notionary/blocks/pdf/pdf_models.py +0 -11
  293. notionary/blocks/quote/__init__.py +0 -14
  294. notionary/blocks/quote/quote_element.py +0 -75
  295. notionary/blocks/quote/quote_markdown_node.py +0 -16
  296. notionary/blocks/quote/quote_models.py +0 -18
  297. notionary/blocks/registry/__init__.py +0 -3
  298. notionary/blocks/registry/block_registry.py +0 -150
  299. notionary/blocks/rich_text/__init__.py +0 -33
  300. notionary/blocks/rich_text/rich_text_models.py +0 -221
  301. notionary/blocks/rich_text/text_inline_formatter.py +0 -456
  302. notionary/blocks/syntax_prompt_builder.py +0 -137
  303. notionary/blocks/table/__init__.py +0 -19
  304. notionary/blocks/table/table_element.py +0 -225
  305. notionary/blocks/table/table_markdown_node.py +0 -42
  306. notionary/blocks/table/table_models.py +0 -28
  307. notionary/blocks/table_of_contents/__init__.py +0 -17
  308. notionary/blocks/table_of_contents/table_of_contents_element.py +0 -80
  309. notionary/blocks/table_of_contents/table_of_contents_markdown_node.py +0 -21
  310. notionary/blocks/table_of_contents/table_of_contents_models.py +0 -18
  311. notionary/blocks/todo/__init__.py +0 -12
  312. notionary/blocks/todo/todo_element.py +0 -81
  313. notionary/blocks/todo/todo_markdown_node.py +0 -21
  314. notionary/blocks/todo/todo_models.py +0 -18
  315. notionary/blocks/toggle/__init__.py +0 -12
  316. notionary/blocks/toggle/toggle_element.py +0 -112
  317. notionary/blocks/toggle/toggle_markdown_node.py +0 -31
  318. notionary/blocks/toggle/toggle_models.py +0 -17
  319. notionary/blocks/toggleable_heading/__init__.py +0 -11
  320. notionary/blocks/toggleable_heading/toggleable_heading_element.py +0 -115
  321. notionary/blocks/toggleable_heading/toggleable_heading_markdown_node.py +0 -34
  322. notionary/blocks/types.py +0 -130
  323. notionary/blocks/video/__init__.py +0 -11
  324. notionary/blocks/video/video_element.py +0 -187
  325. notionary/blocks/video/video_element_models.py +0 -10
  326. notionary/blocks/video/video_markdown_node.py +0 -26
  327. notionary/database/__init__.py +0 -4
  328. notionary/database/database.py +0 -480
  329. notionary/database/database_filter_builder.py +0 -173
  330. notionary/database/database_provider.py +0 -227
  331. notionary/database/exceptions.py +0 -13
  332. notionary/database/models.py +0 -337
  333. notionary/database/notion_database.py +0 -487
  334. notionary/file_upload/__init__.py +0 -7
  335. notionary/page/client.py +0 -124
  336. notionary/page/markdown_whitespace_processor.py +0 -129
  337. notionary/page/models.py +0 -322
  338. notionary/page/notion_page.py +0 -712
  339. notionary/page/page_content_deleting_service.py +0 -117
  340. notionary/page/page_content_writer.py +0 -80
  341. notionary/page/property_formatter.py +0 -99
  342. notionary/page/reader/handler/__init__.py +0 -19
  343. notionary/page/reader/handler/base_block_renderer.py +0 -44
  344. notionary/page/reader/handler/block_processing_context.py +0 -35
  345. notionary/page/reader/handler/block_rendering_context.py +0 -48
  346. notionary/page/reader/handler/column_list_renderer.py +0 -51
  347. notionary/page/reader/handler/column_renderer.py +0 -60
  348. notionary/page/reader/handler/equation_renderer.py +0 -0
  349. notionary/page/reader/handler/line_renderer.py +0 -73
  350. notionary/page/reader/handler/numbered_list_renderer.py +0 -85
  351. notionary/page/reader/handler/toggle_renderer.py +0 -69
  352. notionary/page/reader/handler/toggleable_heading_renderer.py +0 -89
  353. notionary/page/reader/page_content_retriever.py +0 -81
  354. notionary/page/search_filter_builder.py +0 -132
  355. notionary/page/utils.py +0 -60
  356. notionary/page/writer/handler/__init__.py +0 -24
  357. notionary/page/writer/handler/code_handler.py +0 -72
  358. notionary/page/writer/handler/column_handler.py +0 -141
  359. notionary/page/writer/handler/column_list_handler.py +0 -139
  360. notionary/page/writer/handler/equation_handler.py +0 -74
  361. notionary/page/writer/handler/line_handler.py +0 -35
  362. notionary/page/writer/handler/line_processing_context.py +0 -54
  363. notionary/page/writer/handler/regular_line_handler.py +0 -86
  364. notionary/page/writer/handler/table_handler.py +0 -66
  365. notionary/page/writer/handler/toggle_handler.py +0 -159
  366. notionary/page/writer/handler/toggleable_heading_handler.py +0 -174
  367. notionary/page/writer/markdown_to_notion_converter.py +0 -139
  368. notionary/page/writer/markdown_to_notion_converter_context.py +0 -30
  369. notionary/page/writer/markdown_to_notion_text_length_post_processor.py +0 -0
  370. notionary/page/writer/notion_text_length_processor.py +0 -150
  371. notionary/schemas/__init__.py +0 -3
  372. notionary/schemas/base.py +0 -73
  373. notionary/shared/__init__.py +0 -3
  374. notionary/shared/name_to_id_resolver.py +0 -203
  375. notionary/telemetry/__init__.py +0 -19
  376. notionary/telemetry/service.py +0 -136
  377. notionary/telemetry/views.py +0 -73
  378. notionary/user/base_notion_user.py +0 -53
  379. notionary/user/models.py +0 -84
  380. notionary/user/notion_bot_user.py +0 -226
  381. notionary/user/notion_user.py +0 -255
  382. notionary/user/notion_user_manager.py +0 -101
  383. notionary/util/__init__.py +0 -15
  384. notionary/util/concurrency_limiter.py +0 -0
  385. notionary/util/factory_decorator.py +0 -0
  386. notionary/util/factory_only.py +0 -37
  387. notionary/util/fuzzy.py +0 -75
  388. notionary/util/logging_mixin.py +0 -59
  389. notionary/util/page_id_utils.py +0 -27
  390. notionary/util/singleton.py +0 -18
  391. notionary/util/singleton_metaclass.py +0 -22
  392. notionary/workspace.py +0 -105
  393. notionary-0.2.27.dist-info/METADATA +0 -270
  394. notionary-0.2.27.dist-info/RECORD +0 -202
  395. /notionary/{database → user}/factory.py +0 -0
@@ -1,42 +0,0 @@
1
- from __future__ import annotations
2
-
3
- from abc import ABC
4
- from typing import Optional
5
-
6
- from notionary.blocks.syntax_prompt_builder import BlockElementMarkdownInformation
7
- from notionary.blocks.models import Block, BlockCreateResult
8
-
9
-
10
- class BaseBlockElement(ABC):
11
- """Base class for elements that can be converted between Markdown and Notion."""
12
-
13
- @classmethod
14
- async def markdown_to_notion(cls, text: str) -> BlockCreateResult:
15
- """
16
- Convert markdown to Notion block content.
17
-
18
- Returns:
19
- - BlockContent: Single block content (e.g., ToDoBlock, ParagraphBlock)
20
- - list[BlockContent]: Multiple block contents
21
- - None: Cannot convert this markdown
22
- """
23
-
24
- @classmethod
25
- async def notion_to_markdown(cls, block: Block) -> Optional[str]:
26
- """Convert Notion block to markdown."""
27
-
28
- @classmethod
29
- def match_notion(cls, block: Block) -> bool:
30
- """Check if this element can handle the given Notion block."""
31
- # Default implementation - subclasses should override this method
32
- # Cannot call async notion_to_markdown here
33
- return False
34
-
35
- @classmethod
36
- def get_system_prompt_information(cls) -> Optional[BlockElementMarkdownInformation]:
37
- """Get system prompt information for this block element.
38
-
39
- Subclasses should override this method to provide their specific information.
40
- Return None if the element should not be included in documentation.
41
- """
42
- return None
@@ -1,12 +0,0 @@
1
- from notionary.blocks.bookmark.bookmark_element import BookmarkElement
2
- from notionary.blocks.bookmark.bookmark_markdown_node import (
3
- BookmarkMarkdownNode,
4
- )
5
- from notionary.blocks.bookmark.bookmark_models import BookmarkBlock, CreateBookmarkBlock
6
-
7
- __all__ = [
8
- "BookmarkElement",
9
- "BookmarkBlock",
10
- "CreateBookmarkBlock",
11
- "BookmarkMarkdownNode",
12
- ]
@@ -1,83 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import re
4
- from typing import Optional
5
-
6
- from notionary.blocks.base_block_element import BaseBlockElement
7
- from notionary.blocks.bookmark.bookmark_models import BookmarkBlock, CreateBookmarkBlock
8
- from notionary.blocks.mixins.captions import CaptionMixin
9
- from notionary.blocks.syntax_prompt_builder import BlockElementMarkdownInformation
10
- from notionary.blocks.models import Block, BlockCreateResult, BlockType
11
-
12
-
13
- class BookmarkElement(BaseBlockElement, CaptionMixin):
14
- """
15
- Handles conversion between Markdown bookmarks and Notion bookmark blocks.
16
-
17
- Markdown bookmark syntax:
18
- - [bookmark](https://example.com) - URL only
19
- - [bookmark](https://example.com)(caption:This is a caption) - URL with caption
20
- - (caption:This is a caption)[bookmark](https://example.com) - caption before URL
21
- """
22
-
23
- # Flexible pattern that can handle caption in any position
24
- BOOKMARK_PATTERN = re.compile(r"\[bookmark\]\((https?://[^\s\"]+)\)")
25
-
26
- @classmethod
27
- def match_notion(cls, block: Block) -> bool:
28
- return block.type == BlockType.BOOKMARK and block.bookmark
29
-
30
- @classmethod
31
- async def markdown_to_notion(cls, text: str) -> BlockCreateResult:
32
- """
33
- Convert a markdown bookmark into a Notion BookmarkBlock.
34
- """
35
- # First remove captions to get clean text for URL extraction
36
- clean_text = cls.remove_caption(text.strip())
37
-
38
- # Use our own regex to find the bookmark URL
39
- bookmark_match = cls.BOOKMARK_PATTERN.search(clean_text)
40
- if not bookmark_match:
41
- return None
42
-
43
- url = bookmark_match.group(1)
44
-
45
- caption_text = cls.extract_caption(text.strip())
46
- caption_rich_text = cls.build_caption_rich_text(caption_text or "")
47
-
48
- bookmark_data = BookmarkBlock(url=url, caption=caption_rich_text)
49
- return CreateBookmarkBlock(bookmark=bookmark_data)
50
-
51
- @classmethod
52
- async def notion_to_markdown(cls, block: Block) -> Optional[str]:
53
- if block.type != BlockType.BOOKMARK or block.bookmark is None:
54
- return None
55
-
56
- bm = block.bookmark
57
- url = bm.url
58
- if not url:
59
- return None
60
-
61
- result = f"[bookmark]({url})"
62
-
63
- # Add caption if present
64
- caption_markdown = await cls.format_caption_for_markdown(bm.caption or [])
65
- if caption_markdown:
66
- result += caption_markdown
67
-
68
- return result
69
-
70
- @classmethod
71
- def get_system_prompt_information(cls) -> Optional[BlockElementMarkdownInformation]:
72
- """Get system prompt information for bookmark blocks."""
73
- return BlockElementMarkdownInformation(
74
- block_type=cls.__name__,
75
- description="Bookmark blocks create previews of web pages with optional captions",
76
- syntax_examples=[
77
- "[bookmark](https://example.com)",
78
- "[bookmark](https://example.com)(caption:This is a caption)",
79
- "(caption:Check out this repository)[bookmark](https://github.com/user/repo)",
80
- "[bookmark](https://github.com/user/repo)(caption:Check out this awesome repository)",
81
- ],
82
- usage_guidelines="Use for linking to external websites with rich previews. URL is required. Caption supports rich text formatting and is optional.",
83
- )
@@ -1,28 +0,0 @@
1
- from typing import Optional
2
-
3
- from notionary.blocks.markdown.markdown_node import MarkdownNode
4
- from notionary.blocks.mixins.captions import CaptionMarkdownNodeMixin
5
-
6
-
7
- class BookmarkMarkdownNode(MarkdownNode, CaptionMarkdownNodeMixin):
8
- """
9
- Enhanced Bookmark node with Pydantic integration.
10
- Programmatic interface for creating Notion-style bookmark Markdown blocks.
11
- """
12
-
13
- url: str
14
- title: Optional[str] = None
15
- caption: Optional[str] = None
16
-
17
- def to_markdown(self) -> str:
18
- """Return the Markdown representation.
19
-
20
- Examples:
21
- - [bookmark](https://example.com)
22
- - [bookmark](https://example.com)(caption:Some caption)
23
- """
24
- # Use simple bookmark syntax like BookmarkElement
25
- base_markdown = f"[bookmark]({self.url})"
26
-
27
- # Append caption using mixin helper
28
- return self.append_caption_to_markdown(base_markdown, self.caption)
@@ -1,15 +0,0 @@
1
- from typing import Literal
2
-
3
- from pydantic import BaseModel, Field
4
-
5
- from notionary.blocks.rich_text.rich_text_models import RichTextObject
6
-
7
-
8
- class BookmarkBlock(BaseModel):
9
- caption: list[RichTextObject] = Field(default_factory=list)
10
- url: str
11
-
12
-
13
- class CreateBookmarkBlock(BaseModel):
14
- type: Literal["bookmark"] = "bookmark"
15
- bookmark: BookmarkBlock
@@ -1,15 +0,0 @@
1
- from notionary.blocks.breadcrumbs.breadcrumb_element import BreadcrumbElement
2
- from notionary.blocks.breadcrumbs.breadcrumb_markdown_node import (
3
- BreadcrumbMarkdownNode,
4
- )
5
- from notionary.blocks.breadcrumbs.breadcrumb_models import (
6
- BreadcrumbBlock,
7
- CreateBreadcrumbBlock,
8
- )
9
-
10
- __all__ = [
11
- "BreadcrumbElement",
12
- "BreadcrumbBlock",
13
- "CreateBreadcrumbBlock",
14
- "BreadcrumbMarkdownNode",
15
- ]
@@ -1,39 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import re
4
- from typing import Optional
5
-
6
- from notionary.blocks.base_block_element import BaseBlockElement
7
- from notionary.blocks.breadcrumbs.breadcrumb_models import (
8
- BreadcrumbBlock,
9
- CreateBreadcrumbBlock,
10
- )
11
- from notionary.blocks.models import Block, BlockCreateResult, BlockType
12
-
13
-
14
- class BreadcrumbElement(BaseBlockElement):
15
- """
16
- Handles conversion between Markdown breadcrumb marker and Notion breadcrumb blocks.
17
-
18
- Markdown syntax:
19
- [breadcrumb]
20
- """
21
-
22
- BREADCRUMB_MARKER = "[breadcrumb]"
23
- PATTERN = re.compile(r"^\[breadcrumb\]\s*$", re.IGNORECASE)
24
-
25
- @classmethod
26
- def match_notion(cls, block: Block) -> bool:
27
- # Kein extra Payload – nur Typ prüfen
28
- return block.type == BlockType.BREADCRUMB and block.breadcrumb
29
-
30
- @classmethod
31
- async def markdown_to_notion(cls, text: str) -> BlockCreateResult:
32
- if not cls.PATTERN.match(text.strip()):
33
- return None
34
- return CreateBreadcrumbBlock(breadcrumb=BreadcrumbBlock())
35
-
36
- @classmethod
37
- async def notion_to_markdown(cls, block: Block) -> Optional[str]:
38
- if block.type == BlockType.BREADCRUMB and block.breadcrumb:
39
- return cls.BREADCRUMB_MARKER
@@ -1,13 +0,0 @@
1
- from notionary.blocks.markdown.markdown_node import MarkdownNode
2
-
3
-
4
- class BreadcrumbMarkdownNode(MarkdownNode):
5
- """
6
- Enhanced Breadcrumb node with Pydantic integration.
7
- Programmatic interface for creating Markdown breadcrumb blocks.
8
- Example:
9
- [breadcrumb]
10
- """
11
-
12
- def to_markdown(self) -> str:
13
- return "[breadcrumb]"
@@ -1,12 +0,0 @@
1
- from typing import Literal
2
-
3
- from pydantic import BaseModel
4
-
5
-
6
- class BreadcrumbBlock(BaseModel):
7
- pass
8
-
9
-
10
- class CreateBreadcrumbBlock(BaseModel):
11
- type: Literal["breadcrumb"] = "breadcrumb"
12
- breadcrumb: BreadcrumbBlock
@@ -1,15 +0,0 @@
1
- from notionary.blocks.bulleted_list.bulleted_list_element import BulletedListElement
2
- from notionary.blocks.bulleted_list.bulleted_list_markdown_node import (
3
- BulletedListMarkdownNode,
4
- )
5
- from notionary.blocks.bulleted_list.bulleted_list_models import (
6
- BulletedListItemBlock,
7
- CreateBulletedListItemBlock,
8
- )
9
-
10
- __all__ = [
11
- "BulletedListElement",
12
- "BulletedListItemBlock",
13
- "CreateBulletedListItemBlock",
14
- "BulletedListMarkdownNode",
15
- ]
@@ -1,74 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import re
4
- from typing import Optional
5
-
6
- from notionary.blocks.base_block_element import BaseBlockElement
7
- from notionary.blocks.bulleted_list.bulleted_list_models import (
8
- BulletedListItemBlock,
9
- CreateBulletedListItemBlock,
10
- )
11
- from notionary.blocks.syntax_prompt_builder import BlockElementMarkdownInformation
12
- from notionary.blocks.models import Block, BlockCreateResult, BlockType
13
- from notionary.blocks.rich_text.text_inline_formatter import TextInlineFormatter
14
-
15
-
16
- class BulletedListElement(BaseBlockElement):
17
- """Class for converting between Markdown bullet lists and Notion bulleted list items."""
18
-
19
- # Regex for markdown bullets (excluding todo items [ ] or [x])
20
- PATTERN = re.compile(r"^(\s*)[*\-+]\s+(?!\[[ x]\])(.+)$")
21
-
22
- @classmethod
23
- def match_notion(cls, block: Block) -> bool:
24
- """Check if this element can handle the given Notion block."""
25
- return block.type == BlockType.BULLETED_LIST_ITEM and block.bulleted_list_item
26
-
27
- @classmethod
28
- async def markdown_to_notion(cls, text: str) -> BlockCreateResult:
29
- """
30
- Convert a markdown bulleted list item into a Notion BulletedListItemBlock.
31
- """
32
- if not (match := cls.PATTERN.match(text.strip())):
33
- return None
34
-
35
- # Extract the content part (second capture group)
36
- content = match.group(2)
37
-
38
- # Parse inline markdown formatting into RichTextObject list
39
- rich_text = await TextInlineFormatter.parse_inline_formatting(content)
40
-
41
- # Return a properly typed Notion block
42
- bulleted_list_content = BulletedListItemBlock(
43
- rich_text=rich_text, color="default"
44
- )
45
- return CreateBulletedListItemBlock(bulleted_list_item=bulleted_list_content)
46
-
47
- @classmethod
48
- async def notion_to_markdown(cls, block: Block) -> Optional[str]:
49
- """Convert Notion bulleted_list_item block to Markdown."""
50
- if block.type != BlockType.BULLETED_LIST_ITEM or not block.bulleted_list_item:
51
- return None
52
-
53
- rich_list = block.bulleted_list_item.rich_text
54
- if not rich_list:
55
- return "-"
56
-
57
- text = await TextInlineFormatter.extract_text_with_formatting(rich_list)
58
- return f"- {text}"
59
-
60
- @classmethod
61
- def get_system_prompt_information(cls) -> Optional[BlockElementMarkdownInformation]:
62
- """Get system prompt information for bulleted list blocks."""
63
- return BlockElementMarkdownInformation(
64
- block_type=cls.__name__,
65
- description="Bulleted list items create unordered lists with bullet points",
66
- syntax_examples=[
67
- "- First item",
68
- "* Second item",
69
- "+ Third item",
70
- "- Item with **bold text**",
71
- "- Item with *italic text*",
72
- ],
73
- usage_guidelines="Use -, *, or + to create bullet points. Supports inline formatting like bold, italic, and links. Do not use for todo items (use [ ] or [x] for those).",
74
- )
@@ -1,20 +0,0 @@
1
- from notionary.blocks.markdown.markdown_node import MarkdownNode
2
-
3
-
4
- class BulletedListMarkdownNode(MarkdownNode):
5
- """
6
- Enhanced BulletedList node with Pydantic integration.
7
- Programmatic interface for creating Markdown bulleted list items.
8
- Example:
9
- - First item
10
- - Second item
11
- - Third item
12
- """
13
-
14
- texts: list[str]
15
-
16
- def to_markdown(self) -> str:
17
- result = []
18
- for text in self.texts:
19
- result.append(f"- {text}")
20
- return "\n".join(result)
@@ -1,17 +0,0 @@
1
- from typing import Literal
2
-
3
- from pydantic import BaseModel, Field
4
-
5
- from notionary.blocks.models import Block
6
- from notionary.blocks.rich_text import RichTextObject
7
- from notionary.blocks.types import BlockColor
8
-
9
-
10
- class BulletedListItemBlock(BaseModel):
11
- rich_text: list[RichTextObject]
12
- color: BlockColor = BlockColor.DEFAULT
13
-
14
-
15
- class CreateBulletedListItemBlock(BaseModel):
16
- type: Literal["bulleted_list_item"] = "bulleted_list_item"
17
- bulleted_list_item: BulletedListItemBlock
@@ -1,12 +0,0 @@
1
- from notionary.blocks.callout.callout_element import CalloutElement
2
- from notionary.blocks.callout.callout_markdown_node import (
3
- CalloutMarkdownNode,
4
- )
5
- from notionary.blocks.callout.callout_models import CalloutBlock, CreateCalloutBlock
6
-
7
- __all__ = [
8
- "CalloutElement",
9
- "CalloutBlock",
10
- "CreateCalloutBlock",
11
- "CalloutMarkdownNode",
12
- ]
@@ -1,99 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import re
4
- from typing import Optional
5
-
6
- from notionary.blocks.base_block_element import BaseBlockElement
7
- from notionary.blocks.callout.callout_models import (
8
- CalloutBlock,
9
- CreateCalloutBlock,
10
- EmojiIcon,
11
- IconObject,
12
- )
13
- from notionary.blocks.syntax_prompt_builder import BlockElementMarkdownInformation
14
- from notionary.blocks.models import Block, BlockCreateResult, BlockType
15
- from notionary.blocks.rich_text.text_inline_formatter import TextInlineFormatter
16
-
17
-
18
- class CalloutElement(BaseBlockElement):
19
- """
20
- Handles conversion between Markdown callouts and Notion callout blocks.
21
-
22
- Markdown callout syntax:
23
- - [callout](Text) - Simple callout with default emoji
24
- - [callout](Text "emoji") - Callout with custom emoji
25
-
26
- Where:
27
- - Text is the required callout content
28
- - emoji is an optional emoji character (enclosed in quotes)
29
- """
30
-
31
- PATTERN = re.compile(
32
- r"^\[callout\]\(" # prefix
33
- r"([^\"]+?)" # content
34
- r"(?:\s+\"([^\"]+)\")?" # optional emoji
35
- r"\)$"
36
- )
37
-
38
- DEFAULT_EMOJI = "💡"
39
- DEFAULT_COLOR = "gray_background"
40
-
41
- @classmethod
42
- def match_notion(cls, block: Block) -> bool:
43
- return block.type == BlockType.CALLOUT and block.callout
44
-
45
- @classmethod
46
- async def markdown_to_notion(cls, text: str) -> BlockCreateResult:
47
- """Convert a markdown callout into a Notion CalloutBlock."""
48
- match = cls.PATTERN.match(text.strip())
49
- if not match:
50
- return None
51
-
52
- content, emoji = match.group(1), match.group(2)
53
- if not content:
54
- return None
55
-
56
- if not emoji:
57
- emoji = cls.DEFAULT_EMOJI
58
-
59
- rich_text = await TextInlineFormatter.parse_inline_formatting(content.strip())
60
-
61
- callout_content = CalloutBlock(
62
- rich_text=rich_text,
63
- icon=EmojiIcon(emoji=emoji),
64
- color=cls.DEFAULT_COLOR,
65
- )
66
- return CreateCalloutBlock(callout=callout_content)
67
-
68
- @classmethod
69
- async def notion_to_markdown(cls, block: Block) -> Optional[str]:
70
- if block.type != BlockType.CALLOUT or not block.callout:
71
- return None
72
-
73
- data = block.callout
74
-
75
- content = await TextInlineFormatter.extract_text_with_formatting(data.rich_text)
76
- if not content:
77
- return None
78
-
79
- icon: Optional[IconObject] = block.callout.icon
80
- emoji_char = icon.emoji if isinstance(icon, EmojiIcon) else cls.DEFAULT_EMOJI
81
-
82
- if emoji_char and emoji_char != cls.DEFAULT_EMOJI:
83
- return f'[callout]({content} "{emoji_char}")'
84
- return f"[callout]({content})"
85
-
86
- @classmethod
87
- def get_system_prompt_information(cls) -> Optional[BlockElementMarkdownInformation]:
88
- """Get system prompt information for callout blocks."""
89
- return BlockElementMarkdownInformation(
90
- block_type=cls.__name__,
91
- description="Callout blocks create highlighted text boxes with optional custom emojis for emphasis",
92
- syntax_examples=[
93
- "[callout](This is important information)",
94
- '[callout](Warning message "⚠️")',
95
- '[callout](Success message "✅")',
96
- "[callout](Note with default emoji)",
97
- ],
98
- usage_guidelines="Use for highlighting important information, warnings, tips, or notes. Default emoji is 💡. Custom emoji should be provided in quotes after the text content.",
99
- )
@@ -1,19 +0,0 @@
1
- from typing import Optional
2
- from notionary.blocks.markdown.markdown_node import MarkdownNode
3
-
4
-
5
- class CalloutMarkdownNode(MarkdownNode):
6
- """
7
- Enhanced Callout node with Pydantic integration.
8
- Programmatic interface for creating Notion-style callout Markdown blocks.
9
- Example: [callout](This is important "⚠️")
10
- """
11
-
12
- text: str
13
- emoji: Optional[str] = None
14
-
15
- def to_markdown(self) -> str:
16
- if self.emoji and self.emoji != "💡":
17
- return f'[callout]({self.text} "{self.emoji}")'
18
- else:
19
- return f"[callout]({self.text})"
@@ -1,33 +0,0 @@
1
- from typing import Literal, Optional, Union
2
-
3
- from pydantic import BaseModel, Field, model_serializer
4
-
5
- from notionary.blocks.file.file_element_models import FileBlock
6
- from notionary.blocks.models import Block
7
- from notionary.blocks.rich_text.rich_text_models import RichTextObject
8
- from notionary.blocks.types import BlockColor
9
-
10
-
11
- class EmojiIcon(BaseModel):
12
- type: Literal["emoji"] = "emoji"
13
- emoji: str
14
-
15
-
16
- class FileIcon(BaseModel):
17
- type: Literal["file"] = "file"
18
- file: FileBlock
19
-
20
-
21
- IconObject = Union[EmojiIcon, FileIcon]
22
-
23
-
24
- class CalloutBlock(BaseModel):
25
- rich_text: list[RichTextObject]
26
- color: BlockColor = BlockColor.DEFAULT
27
- icon: Optional[IconObject] = None
28
- children: Optional[list[Block]] = None
29
-
30
-
31
- class CreateCalloutBlock(BaseModel):
32
- type: Literal["callout"] = "callout"
33
- callout: CalloutBlock
@@ -1,14 +0,0 @@
1
- """
2
- Child Database Block Module
3
-
4
- This module provides functionality for handling Notion child database blocks.
5
- """
6
-
7
- from .child_database_element import ChildDatabaseElement
8
- from .child_database_models import ChildDatabaseBlock, CreateChildDatabaseBlock
9
-
10
- __all__ = [
11
- "ChildDatabaseElement",
12
- "ChildDatabaseBlock",
13
- "CreateChildDatabaseBlock",
14
- ]
@@ -1,59 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import re
4
- from typing import Optional
5
-
6
- from notionary.blocks.base_block_element import BaseBlockElement
7
- from notionary.blocks.syntax_prompt_builder import BlockElementMarkdownInformation
8
- from notionary.blocks.models import Block, BlockType
9
- from notionary.util import LoggingMixin
10
-
11
-
12
- class ChildDatabaseElement(BaseBlockElement, LoggingMixin):
13
- """
14
- Handles conversion between Markdown database references and Notion child database blocks.
15
-
16
- Creates new databases when converting from markdown.
17
- """
18
-
19
- PATTERN_BRACKET = re.compile(r"^\[database:\s*(.+)\]$", re.IGNORECASE)
20
- PATTERN_EMOJI = re.compile(r"^📊\s*(.+)$")
21
-
22
- @classmethod
23
- def match_notion(cls, block: Block) -> bool:
24
- return block.type == BlockType.CHILD_DATABASE and block.child_database
25
-
26
- @classmethod
27
- async def markdown_to_notion(cls, text: str) -> Optional[str]:
28
- """
29
- Convert markdown database syntax to actual Notion database.
30
- Returns the database_id if successful, None otherwise.
31
- """
32
- return None
33
-
34
- @classmethod
35
- async def notion_to_markdown(cls, block: Block) -> Optional[str]:
36
- if block.type != BlockType.CHILD_DATABASE or not block.child_database:
37
- return None
38
-
39
- title = block.child_database.title
40
- if not title or not title.strip():
41
- return None
42
-
43
- # Use bracket syntax for output
44
- return f"[database: {title.strip()}]"
45
-
46
- @classmethod
47
- def get_system_prompt_information(cls) -> Optional[BlockElementMarkdownInformation]:
48
- """Get system prompt information for child database blocks."""
49
- return BlockElementMarkdownInformation(
50
- block_type=cls.__name__,
51
- description="Creates new embedded databases within a Notion page",
52
- syntax_examples=[
53
- "[database: Project Tasks]",
54
- "[database: Customer Information]",
55
- "📊 Sales Pipeline",
56
- "📊 Team Directory",
57
- ],
58
- usage_guidelines="Use to create new databases that will be embedded in the page. The database will be created with a basic 'Name' property and can be customized later.",
59
- )
@@ -1,12 +0,0 @@
1
- from typing import Literal
2
-
3
- from pydantic import BaseModel
4
-
5
-
6
- class ChildDatabaseBlock(BaseModel):
7
- title: str
8
-
9
-
10
- class CreateChildDatabaseBlock(BaseModel):
11
- type: Literal["child_database"] = "child_database"
12
- child_database: ChildDatabaseBlock
@@ -1,9 +0,0 @@
1
- from notionary.blocks.child_page.child_page_models import (
2
- ChildPageBlock,
3
- CreateChildPageBlock,
4
- )
5
-
6
- __all__ = [
7
- "ChildPageBlock",
8
- "CreateChildPageBlock",
9
- ]