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
@@ -0,0 +1,778 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Annotated, Literal
4
+
5
+ from pydantic import BaseModel, ConfigDict, Field
6
+
7
+ from notionary.blocks.enums import BlockColor, BlockType, CodingLanguage, FileType
8
+ from notionary.blocks.rich_text.models import RichText
9
+ from notionary.shared.models.icon import Icon
10
+ from notionary.shared.models.parent import Parent
11
+ from notionary.user.schemas import PartialUserDto
12
+
13
+ # ============================================================================
14
+ # File-related models
15
+ # ============================================================================
16
+
17
+
18
+ class ExternalFile(BaseModel):
19
+ model_config = ConfigDict(from_attributes=True)
20
+ url: str
21
+
22
+
23
+ class NotionHostedFile(BaseModel):
24
+ model_config = ConfigDict(from_attributes=True)
25
+ url: str
26
+ expiry_time: str
27
+
28
+
29
+ class FileUploadFile(BaseModel):
30
+ model_config = ConfigDict(from_attributes=True)
31
+ id: str
32
+
33
+
34
+ class FileData(BaseModel):
35
+ model_config = ConfigDict(from_attributes=True)
36
+ caption: list[RichText] = Field(default_factory=list)
37
+ type: FileType
38
+ external: ExternalFile | None = None
39
+ file: NotionHostedFile | None = None
40
+ file_upload: FileUploadFile | None = None
41
+ name: str | None = None
42
+
43
+
44
+ # ============================================================================
45
+ # Base Block
46
+ # ============================================================================
47
+
48
+
49
+ class BaseBlock(BaseModel):
50
+ id: str
51
+ parent: Parent | None = None
52
+ type: BlockType
53
+ created_time: str
54
+ last_edited_time: str
55
+ created_by: PartialUserDto
56
+ last_edited_by: PartialUserDto
57
+ archived: bool = False
58
+ in_trash: bool = False
59
+ has_children: bool = False
60
+ children: list[Block] | None = None
61
+
62
+
63
+ # ============================================================================
64
+ # Audio Block
65
+ # ============================================================================
66
+
67
+
68
+ class AudioData(BaseModel):
69
+ model_config = ConfigDict(from_attributes=True)
70
+ caption: list[RichText] = Field(default_factory=list)
71
+ type: FileType
72
+ external: ExternalFile | None = None
73
+ file: NotionHostedFile | None = None
74
+ file_upload: FileUploadFile | None = None
75
+ name: str | None = None
76
+
77
+
78
+ class AudioBlock(BaseBlock):
79
+ type: Literal[BlockType.AUDIO] = BlockType.AUDIO
80
+ audio: AudioData
81
+
82
+
83
+ class CreateAudioBlock(BaseModel):
84
+ type: Literal[BlockType.AUDIO] = BlockType.AUDIO
85
+ audio: AudioData
86
+
87
+
88
+ # ============================================================================
89
+ # Bookmark Block
90
+ # ============================================================================
91
+
92
+
93
+ class BookmarkData(BaseModel):
94
+ caption: list[RichText] = Field(default_factory=list)
95
+ url: str
96
+
97
+
98
+ class BookmarkBlock(BaseBlock):
99
+ type: Literal[BlockType.BOOKMARK] = BlockType.BOOKMARK
100
+ bookmark: BookmarkData
101
+
102
+
103
+ class CreateBookmarkBlock(BaseModel):
104
+ type: Literal[BlockType.BOOKMARK] = BlockType.BOOKMARK
105
+ bookmark: BookmarkData
106
+
107
+
108
+ # ============================================================================
109
+ # Breadcrumb Block
110
+ # ============================================================================
111
+
112
+
113
+ class BreadcrumbData(BaseModel):
114
+ pass
115
+
116
+
117
+ class BreadcrumbBlock(BaseBlock):
118
+ type: Literal[BlockType.BREADCRUMB] = BlockType.BREADCRUMB
119
+ breadcrumb: BreadcrumbData
120
+
121
+
122
+ class CreateBreadcrumbBlock(BaseModel):
123
+ type: Literal[BlockType.BREADCRUMB] = BlockType.BREADCRUMB
124
+ breadcrumb: BreadcrumbData
125
+
126
+
127
+ # ============================================================================
128
+ # Bulleted List Item Block
129
+ # ============================================================================
130
+
131
+
132
+ class BaseBulletedListItemData(BaseModel):
133
+ rich_text: list[RichText]
134
+ color: BlockColor = BlockColor.DEFAULT
135
+
136
+
137
+ class BulletedListItemData(BaseBulletedListItemData):
138
+ children: list[Block] | None = None
139
+
140
+
141
+ class BulletedListItemBlock(BaseBlock):
142
+ type: Literal[BlockType.BULLETED_LIST_ITEM] = BlockType.BULLETED_LIST_ITEM
143
+ bulleted_list_item: BulletedListItemData
144
+
145
+
146
+ class CreateBulletedListItemData(BaseBulletedListItemData):
147
+ children: list[BlockCreatePayload] | None = None
148
+
149
+
150
+ class CreateBulletedListItemBlock(BaseModel):
151
+ type: Literal[BlockType.BULLETED_LIST_ITEM] = BlockType.BULLETED_LIST_ITEM
152
+ bulleted_list_item: CreateBulletedListItemData
153
+
154
+
155
+ # ============================================================================
156
+ # Callout Block
157
+ # ============================================================================
158
+
159
+
160
+ class BaseCalloutData(BaseModel):
161
+ rich_text: list[RichText]
162
+ color: BlockColor = BlockColor.DEFAULT
163
+ icon: Icon | None = None
164
+
165
+
166
+ class CalloutData(BaseCalloutData):
167
+ children: list[Block] | None = None
168
+
169
+
170
+ class CalloutBlock(BaseBlock):
171
+ type: Literal[BlockType.CALLOUT] = BlockType.CALLOUT
172
+ callout: CalloutData
173
+
174
+
175
+ class CreateCalloutData(BaseCalloutData):
176
+ children: list[BlockCreatePayload] | None = None
177
+
178
+
179
+ class CreateCalloutBlock(BaseModel):
180
+ type: Literal[BlockType.CALLOUT] = BlockType.CALLOUT
181
+ callout: CreateCalloutData
182
+
183
+
184
+ # ============================================================================
185
+ # Child Page Block
186
+ # ============================================================================
187
+
188
+
189
+ class ChildPageData(BaseModel):
190
+ title: str
191
+
192
+
193
+ class ChildPageBlock(BaseBlock):
194
+ type: Literal[BlockType.CHILD_PAGE] = BlockType.CHILD_PAGE
195
+ child_page: ChildPageData
196
+
197
+
198
+ class CreateChildPageBlock(BaseModel):
199
+ type: Literal[BlockType.CHILD_PAGE] = BlockType.CHILD_PAGE
200
+ child_page: ChildPageData
201
+
202
+
203
+ # ============================================================================
204
+ # Child Database Block
205
+ # ============================================================================
206
+
207
+
208
+ class ChildDatabaseData(BaseModel):
209
+ title: str
210
+
211
+
212
+ class ChildDatabaseBlock(BaseBlock):
213
+ type: Literal[BlockType.CHILD_DATABASE] = BlockType.CHILD_DATABASE
214
+ child_database: ChildDatabaseData
215
+
216
+
217
+ class CreateChildDatabaseBlock(BaseModel):
218
+ type: Literal[BlockType.CHILD_DATABASE] = BlockType.CHILD_DATABASE
219
+ child_database: ChildDatabaseData
220
+
221
+
222
+ # ============================================================================
223
+ # Code Block
224
+ # ============================================================================
225
+
226
+
227
+ class CodeData(BaseModel):
228
+ caption: list[RichText] = Field(default_factory=list)
229
+ rich_text: list[RichText]
230
+ language: CodingLanguage = CodingLanguage.PLAIN_TEXT
231
+
232
+ model_config = ConfigDict(arbitrary_types_allowed=True)
233
+
234
+
235
+ class CodeBlock(BaseBlock):
236
+ type: Literal[BlockType.CODE] = BlockType.CODE
237
+ code: CodeData
238
+
239
+
240
+ class CreateCodeBlock(BaseModel):
241
+ type: Literal[BlockType.CODE] = BlockType.CODE
242
+ code: CodeData
243
+
244
+
245
+ # ============================================================================
246
+ # Column and Column List Blocks
247
+ # ============================================================================
248
+
249
+
250
+ class BaseColumnData(BaseModel):
251
+ width_ratio: float | None = None
252
+
253
+
254
+ class ColumnData(BaseColumnData):
255
+ children: list[Block] = Field(default_factory=list)
256
+
257
+
258
+ class ColumnBlock(BaseBlock):
259
+ type: Literal[BlockType.COLUMN] = BlockType.COLUMN
260
+ column: ColumnData
261
+
262
+
263
+ class CreateColumnData(BaseColumnData):
264
+ children: list[BlockCreatePayload] = Field(default_factory=list)
265
+
266
+
267
+ class CreateColumnBlock(BaseModel):
268
+ type: Literal[BlockType.COLUMN] = BlockType.COLUMN
269
+ column: CreateColumnData
270
+
271
+
272
+ class ColumnListData(BaseModel):
273
+ children: list[ColumnBlock] = Field(default_factory=list)
274
+
275
+
276
+ class ColumnListBlock(BaseBlock):
277
+ type: Literal[BlockType.COLUMN_LIST] = BlockType.COLUMN_LIST
278
+ column_list: ColumnListData
279
+
280
+
281
+ class CreateColumnListData(BaseModel):
282
+ children: list[CreateColumnBlock] = Field(default_factory=list)
283
+
284
+
285
+ class CreateColumnListBlock(BaseModel):
286
+ type: Literal[BlockType.COLUMN_LIST] = BlockType.COLUMN_LIST
287
+ column_list: CreateColumnListData
288
+
289
+
290
+ # ============================================================================
291
+ # Divider Block
292
+ # ============================================================================
293
+
294
+
295
+ class DividerData(BaseModel):
296
+ pass
297
+
298
+
299
+ class DividerBlock(BaseBlock):
300
+ type: Literal[BlockType.DIVIDER] = BlockType.DIVIDER
301
+ divider: DividerData
302
+
303
+
304
+ class CreateDividerBlock(BaseModel):
305
+ type: Literal[BlockType.DIVIDER] = BlockType.DIVIDER
306
+ divider: DividerData
307
+
308
+
309
+ # ============================================================================
310
+ # Embed Block
311
+ # ============================================================================
312
+
313
+
314
+ class EmbedData(BaseModel):
315
+ url: str
316
+ caption: list[RichText] = Field(default_factory=list)
317
+
318
+
319
+ class EmbedBlock(BaseBlock):
320
+ type: Literal[BlockType.EMBED] = BlockType.EMBED
321
+ embed: EmbedData
322
+
323
+
324
+ class CreateEmbedBlock(BaseModel):
325
+ type: Literal[BlockType.EMBED] = BlockType.EMBED
326
+ embed: EmbedData
327
+
328
+
329
+ # ============================================================================
330
+ # Equation Block
331
+ # ============================================================================
332
+
333
+
334
+ class EquationData(BaseModel):
335
+ expression: str
336
+
337
+
338
+ class EquationBlock(BaseBlock):
339
+ type: Literal[BlockType.EQUATION] = BlockType.EQUATION
340
+ equation: EquationData
341
+
342
+
343
+ class CreateEquationBlock(BaseModel):
344
+ type: Literal[BlockType.EQUATION] = BlockType.EQUATION
345
+ equation: EquationData
346
+
347
+
348
+ # ============================================================================
349
+ # File Block
350
+ # ============================================================================
351
+
352
+
353
+ class FileBlock(BaseBlock):
354
+ type: Literal[BlockType.FILE] = BlockType.FILE
355
+ file: FileData
356
+
357
+
358
+ class CreateFileBlock(BaseModel):
359
+ type: Literal[BlockType.FILE] = BlockType.FILE
360
+ file: FileData
361
+
362
+
363
+ # ============================================================================
364
+ # Heading Blocks
365
+ # ============================================================================
366
+
367
+
368
+ class BaseHeadingData(BaseModel):
369
+ rich_text: list[RichText]
370
+ color: BlockColor = BlockColor.DEFAULT
371
+ is_toggleable: bool = False
372
+
373
+
374
+ class HeadingData(BaseHeadingData):
375
+ children: list[Block] | None = None
376
+
377
+
378
+ class CreateHeadingData(BaseHeadingData):
379
+ children: list[BlockCreatePayload] | None = None
380
+
381
+
382
+ class Heading1Block(BaseBlock):
383
+ type: Literal[BlockType.HEADING_1] = BlockType.HEADING_1
384
+ heading_1: HeadingData
385
+
386
+
387
+ class Heading2Block(BaseBlock):
388
+ type: Literal[BlockType.HEADING_2] = BlockType.HEADING_2
389
+ heading_2: HeadingData
390
+
391
+
392
+ class Heading3Block(BaseBlock):
393
+ type: Literal[BlockType.HEADING_3] = BlockType.HEADING_3
394
+ heading_3: HeadingData
395
+
396
+
397
+ class CreateHeading1Block(BaseModel):
398
+ type: Literal[BlockType.HEADING_1] = BlockType.HEADING_1
399
+ heading_1: CreateHeadingData
400
+
401
+
402
+ class CreateHeading2Block(BaseModel):
403
+ type: Literal[BlockType.HEADING_2] = BlockType.HEADING_2
404
+ heading_2: CreateHeadingData
405
+
406
+
407
+ class CreateHeading3Block(BaseModel):
408
+ type: Literal[BlockType.HEADING_3] = BlockType.HEADING_3
409
+ heading_3: CreateHeadingData
410
+
411
+
412
+ CreateHeadingBlock = CreateHeading1Block | CreateHeading2Block | CreateHeading3Block
413
+
414
+ # ============================================================================
415
+ # Image Block
416
+ # ============================================================================
417
+
418
+
419
+ class ImageData(BaseModel):
420
+ model_config = ConfigDict(from_attributes=True)
421
+ caption: list[RichText] = Field(default_factory=list)
422
+ type: FileType
423
+ external: ExternalFile | None = None
424
+ file: NotionHostedFile | None = None
425
+ file_upload: FileUploadFile | None = None
426
+ name: str | None = None
427
+
428
+
429
+ class ImageBlock(BaseBlock):
430
+ type: Literal[BlockType.IMAGE] = BlockType.IMAGE
431
+ image: ImageData
432
+
433
+
434
+ class CreateImageBlock(BaseModel):
435
+ type: Literal[BlockType.IMAGE] = BlockType.IMAGE
436
+ image: ImageData
437
+
438
+
439
+ # ============================================================================
440
+ # Numbered List Item Block
441
+ # ============================================================================
442
+
443
+
444
+ class BaseNumberedListItemData(BaseModel):
445
+ rich_text: list[RichText]
446
+ color: BlockColor = BlockColor.DEFAULT
447
+
448
+
449
+ class NumberedListItemData(BaseNumberedListItemData):
450
+ children: list[Block] | None = None
451
+
452
+
453
+ class NumberedListItemBlock(BaseBlock):
454
+ type: Literal[BlockType.NUMBERED_LIST_ITEM] = BlockType.NUMBERED_LIST_ITEM
455
+ numbered_list_item: NumberedListItemData
456
+
457
+
458
+ class CreateNumberedListItemData(BaseNumberedListItemData):
459
+ children: list[BlockCreatePayload] | None = None
460
+
461
+
462
+ class CreateNumberedListItemBlock(BaseModel):
463
+ type: Literal[BlockType.NUMBERED_LIST_ITEM] = BlockType.NUMBERED_LIST_ITEM
464
+ numbered_list_item: CreateNumberedListItemData
465
+
466
+
467
+ # ============================================================================
468
+ # Paragraph Block
469
+ # ============================================================================
470
+
471
+
472
+ class BaseParagraphData(BaseModel):
473
+ rich_text: list[RichText]
474
+ color: BlockColor = BlockColor.DEFAULT
475
+
476
+
477
+ class ParagraphData(BaseParagraphData):
478
+ children: list[Block] | None = None
479
+
480
+
481
+ class ParagraphBlock(BaseBlock):
482
+ type: Literal[BlockType.PARAGRAPH] = BlockType.PARAGRAPH
483
+ paragraph: ParagraphData
484
+
485
+
486
+ class CreateParagraphData(BaseParagraphData):
487
+ children: list[BlockCreatePayload] | None = None
488
+
489
+
490
+ class CreateParagraphBlock(BaseModel):
491
+ type: Literal[BlockType.PARAGRAPH] = BlockType.PARAGRAPH
492
+ paragraph: CreateParagraphData
493
+
494
+
495
+ # ============================================================================
496
+ # PDF Block
497
+ # ============================================================================
498
+
499
+
500
+ class PdfData(BaseModel):
501
+ model_config = ConfigDict(from_attributes=True)
502
+ caption: list[RichText] = Field(default_factory=list)
503
+ type: FileType
504
+ external: ExternalFile | None = None
505
+ file: NotionHostedFile | None = None
506
+ file_upload: FileUploadFile | None = None
507
+ name: str | None = None
508
+
509
+
510
+ class PdfBlock(BaseBlock):
511
+ type: Literal[BlockType.PDF] = BlockType.PDF
512
+ pdf: PdfData
513
+
514
+
515
+ class CreatePdfBlock(BaseModel):
516
+ type: Literal[BlockType.PDF] = BlockType.PDF
517
+ pdf: PdfData
518
+
519
+
520
+ # ============================================================================
521
+ # Quote Block
522
+ # ============================================================================
523
+
524
+
525
+ class BaseQuoteData(BaseModel):
526
+ rich_text: list[RichText]
527
+ color: BlockColor = BlockColor.DEFAULT
528
+
529
+
530
+ class QuoteData(BaseQuoteData):
531
+ children: list[Block] | None = None
532
+
533
+
534
+ class QuoteBlock(BaseBlock):
535
+ type: Literal[BlockType.QUOTE] = BlockType.QUOTE
536
+ quote: QuoteData
537
+
538
+
539
+ class CreateQuoteData(BaseQuoteData):
540
+ children: list[BlockCreatePayload] | None = None
541
+
542
+
543
+ class CreateQuoteBlock(BaseModel):
544
+ type: Literal[BlockType.QUOTE] = BlockType.QUOTE
545
+ quote: CreateQuoteData
546
+
547
+
548
+ # ============================================================================
549
+ # Table and Table Row Blocks
550
+ # ============================================================================
551
+
552
+
553
+ class TableRowData(BaseModel):
554
+ cells: list[list[RichText]]
555
+
556
+
557
+ class TableRowBlock(BaseBlock):
558
+ type: Literal[BlockType.TABLE_ROW] = BlockType.TABLE_ROW
559
+ table_row: TableRowData
560
+
561
+
562
+ class CreateTableRowBlock(BaseModel):
563
+ type: Literal[BlockType.TABLE_ROW] = BlockType.TABLE_ROW
564
+ table_row: TableRowData
565
+
566
+
567
+ class BaseTableData(BaseModel):
568
+ table_width: int
569
+ has_column_header: bool = False
570
+ has_row_header: bool = False
571
+
572
+
573
+ class TableData(BaseTableData):
574
+ children: list[TableRowBlock] = Field(default_factory=list)
575
+
576
+
577
+ class TableBlock(BaseBlock):
578
+ type: Literal[BlockType.TABLE] = BlockType.TABLE
579
+ table: TableData
580
+
581
+
582
+ class CreateTableData(BaseTableData):
583
+ children: list[CreateTableRowBlock] = Field(default_factory=list)
584
+
585
+
586
+ class CreateTableBlock(BaseModel):
587
+ type: Literal[BlockType.TABLE] = BlockType.TABLE
588
+ table: CreateTableData
589
+
590
+
591
+ # ============================================================================
592
+ # Table of Contents Block
593
+ # ============================================================================
594
+
595
+
596
+ class TableOfContentsData(BaseModel):
597
+ color: BlockColor = BlockColor.DEFAULT
598
+
599
+
600
+ class TableOfContentsBlock(BaseBlock):
601
+ type: Literal[BlockType.TABLE_OF_CONTENTS] = BlockType.TABLE_OF_CONTENTS
602
+ table_of_contents: TableOfContentsData
603
+
604
+
605
+ class CreateTableOfContentsBlock(BaseModel):
606
+ type: Literal[BlockType.TABLE_OF_CONTENTS] = BlockType.TABLE_OF_CONTENTS
607
+ table_of_contents: TableOfContentsData
608
+
609
+
610
+ # ============================================================================
611
+ # To Do Block
612
+ # ============================================================================
613
+
614
+
615
+ class BaseToDoData(BaseModel):
616
+ rich_text: list[RichText]
617
+ checked: bool = False
618
+ color: BlockColor = BlockColor.DEFAULT
619
+
620
+
621
+ class ToDoData(BaseToDoData):
622
+ children: list[Block] | None = None
623
+
624
+
625
+ class ToDoBlock(BaseBlock):
626
+ type: Literal[BlockType.TO_DO] = BlockType.TO_DO
627
+ to_do: ToDoData
628
+
629
+
630
+ class CreateToDoData(BaseToDoData):
631
+ children: list[BlockCreatePayload] | None = None
632
+
633
+
634
+ class CreateToDoBlock(BaseModel):
635
+ type: Literal[BlockType.TO_DO] = BlockType.TO_DO
636
+ to_do: CreateToDoData
637
+
638
+
639
+ # ============================================================================
640
+ # Toggle Block
641
+ # ============================================================================
642
+
643
+
644
+ class BaseToggleData(BaseModel):
645
+ rich_text: list[RichText]
646
+ color: BlockColor = BlockColor.DEFAULT
647
+
648
+
649
+ class ToggleData(BaseToggleData):
650
+ children: list[Block] | None = None
651
+
652
+
653
+ class ToggleBlock(BaseBlock):
654
+ type: Literal[BlockType.TOGGLE] = BlockType.TOGGLE
655
+ toggle: ToggleData
656
+
657
+
658
+ class CreateToggleData(BaseToggleData):
659
+ children: list[BlockCreatePayload] | None = None
660
+
661
+
662
+ class CreateToggleBlock(BaseModel):
663
+ type: Literal[BlockType.TOGGLE] = BlockType.TOGGLE
664
+ toggle: CreateToggleData
665
+
666
+
667
+ # ============================================================================
668
+ # Video Block
669
+ # ============================================================================
670
+
671
+
672
+ class VideoData(BaseModel):
673
+ model_config = ConfigDict(from_attributes=True)
674
+ caption: list[RichText] = Field(default_factory=list)
675
+ type: FileType
676
+ external: ExternalFile | None = None
677
+ file: NotionHostedFile | None = None
678
+ file_upload: FileUploadFile | None = None
679
+ name: str | None = None
680
+
681
+
682
+ class VideoBlock(BaseBlock):
683
+ type: Literal[BlockType.VIDEO] = BlockType.VIDEO
684
+ video: VideoData
685
+
686
+
687
+ class CreateVideoBlock(BaseModel):
688
+ type: Literal[BlockType.VIDEO] = BlockType.VIDEO
689
+ video: VideoData
690
+
691
+
692
+ # ============================================================================
693
+ # Block Union Type
694
+ # ============================================================================
695
+
696
+ Block = Annotated[
697
+ (
698
+ AudioBlock
699
+ | BookmarkBlock
700
+ | BreadcrumbBlock
701
+ | BulletedListItemBlock
702
+ | CalloutBlock
703
+ | ChildPageBlock
704
+ | ChildDatabaseBlock
705
+ | CodeBlock
706
+ | ColumnListBlock
707
+ | ColumnBlock
708
+ | DividerBlock
709
+ | EmbedBlock
710
+ | EquationBlock
711
+ | FileBlock
712
+ | Heading1Block
713
+ | Heading2Block
714
+ | Heading3Block
715
+ | ImageBlock
716
+ | NumberedListItemBlock
717
+ | ParagraphBlock
718
+ | PdfBlock
719
+ | QuoteBlock
720
+ | TableBlock
721
+ | TableRowBlock
722
+ | TableOfContentsBlock
723
+ | ToDoBlock
724
+ | ToggleBlock
725
+ | VideoBlock
726
+ ),
727
+ Field(discriminator="type"),
728
+ ]
729
+
730
+
731
+ # ============================================================================
732
+ # Block Response and Request Types
733
+ # ============================================================================
734
+
735
+
736
+ class BlockChildrenResponse(BaseModel):
737
+ object: Literal["list"]
738
+ results: list[Block]
739
+ next_cursor: str | None = None
740
+ has_more: bool
741
+ type: Literal["block"]
742
+ block: dict = {}
743
+ request_id: str
744
+
745
+
746
+ BlockCreatePayload = Annotated[
747
+ (
748
+ CreateAudioBlock
749
+ | CreateBookmarkBlock
750
+ | CreateBreadcrumbBlock
751
+ | CreateBulletedListItemBlock
752
+ | CreateCalloutBlock
753
+ | CreateChildPageBlock
754
+ | CreateChildDatabaseBlock
755
+ | CreateCodeBlock
756
+ | CreateColumnListBlock
757
+ | CreateColumnBlock
758
+ | CreateDividerBlock
759
+ | CreateEmbedBlock
760
+ | CreateEquationBlock
761
+ | CreateFileBlock
762
+ | CreateHeading1Block
763
+ | CreateHeading2Block
764
+ | CreateHeading3Block
765
+ | CreateImageBlock
766
+ | CreateNumberedListItemBlock
767
+ | CreateParagraphBlock
768
+ | CreatePdfBlock
769
+ | CreateQuoteBlock
770
+ | CreateTableBlock
771
+ | CreateTableRowBlock
772
+ | CreateTableOfContentsBlock
773
+ | CreateToDoBlock
774
+ | CreateToggleBlock
775
+ | CreateVideoBlock
776
+ ),
777
+ Field(discriminator="type"),
778
+ ]