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
@@ -1,129 +0,0 @@
1
- """
2
- Markdown whitespace processing utilities.
3
-
4
- Handles normalization of markdown text while preserving code blocks and their indentation.
5
- """
6
-
7
- from typing import Tuple
8
-
9
-
10
- class MarkdownWhitespaceProcessor:
11
- """
12
- Processes markdown text to normalize whitespace while preserving code block formatting.
13
-
14
- This processor handles:
15
- - Removing leading whitespace from regular lines
16
- - Preserving code block structure and indentation
17
- - Normalizing code block markers
18
- """
19
-
20
- @staticmethod
21
- def process_markdown_whitespace(markdown_text: str) -> str:
22
- """Process markdown text to normalize whitespace while preserving code blocks."""
23
- lines = markdown_text.split("\n")
24
- if not lines:
25
- return ""
26
-
27
- return MarkdownWhitespaceProcessor._process_whitespace_lines(lines)
28
-
29
- @staticmethod
30
- def _process_whitespace_lines(lines: list[str]) -> str:
31
- """Process all lines and return the processed markdown."""
32
- processed_lines = []
33
- in_code_block = False
34
- current_code_block = []
35
-
36
- for line in lines:
37
- processed_lines, in_code_block, current_code_block = (
38
- MarkdownWhitespaceProcessor._process_single_line(
39
- line, processed_lines, in_code_block, current_code_block
40
- )
41
- )
42
-
43
- return "\n".join(processed_lines)
44
-
45
- @staticmethod
46
- def _process_single_line(
47
- line: str,
48
- processed_lines: list[str],
49
- in_code_block: bool,
50
- current_code_block: list[str],
51
- ) -> Tuple[list[str], bool, list[str]]:
52
- """Process a single line and return updated state."""
53
- if MarkdownWhitespaceProcessor._is_code_block_marker(line):
54
- return MarkdownWhitespaceProcessor._handle_code_block_marker(
55
- line, processed_lines, in_code_block, current_code_block
56
- )
57
- if in_code_block:
58
- current_code_block.append(line)
59
- return processed_lines, in_code_block, current_code_block
60
- else:
61
- processed_lines.append(line.lstrip())
62
- return processed_lines, in_code_block, current_code_block
63
-
64
- @staticmethod
65
- def _handle_code_block_marker(
66
- line: str,
67
- processed_lines: list[str],
68
- in_code_block: bool,
69
- current_code_block: list[str],
70
- ) -> Tuple[list[str], bool, list[str]]:
71
- """Handle code block start/end markers."""
72
- if not in_code_block:
73
- return MarkdownWhitespaceProcessor._start_code_block(line, processed_lines)
74
- else:
75
- return MarkdownWhitespaceProcessor._end_code_block(
76
- processed_lines, current_code_block
77
- )
78
-
79
- @staticmethod
80
- def _start_code_block(
81
- line: str, processed_lines: list[str]
82
- ) -> Tuple[list[str], bool, list[str]]:
83
- """Start a new code block."""
84
- processed_lines.append(
85
- MarkdownWhitespaceProcessor._normalize_code_block_start(line)
86
- )
87
- return processed_lines, True, []
88
-
89
- @staticmethod
90
- def _end_code_block(
91
- processed_lines: list[str], current_code_block: list[str]
92
- ) -> Tuple[list[str], bool, list[str]]:
93
- """End the current code block."""
94
- processed_lines.extend(
95
- MarkdownWhitespaceProcessor._normalize_code_block_content(
96
- current_code_block
97
- )
98
- )
99
- processed_lines.append("```")
100
- return processed_lines, False, []
101
-
102
- @staticmethod
103
- def _is_code_block_marker(line: str) -> bool:
104
- """Check if line is a code block marker."""
105
- return line.lstrip().startswith("```")
106
-
107
- @staticmethod
108
- def _normalize_code_block_start(line: str) -> str:
109
- """Normalize code block opening marker."""
110
- language = line.lstrip().replace("```", "", 1).strip()
111
- return "```" + language
112
-
113
- @staticmethod
114
- def _normalize_code_block_content(code_lines: list[str]) -> list[str]:
115
- """Normalize code block indentation."""
116
- if not code_lines:
117
- return []
118
-
119
- # Find minimum indentation from non-empty lines
120
- non_empty_lines = [line for line in code_lines if line.strip()]
121
- if not non_empty_lines:
122
- return [""] * len(code_lines)
123
-
124
- min_indent = min(len(line) - len(line.lstrip()) for line in non_empty_lines)
125
- if min_indent == 0:
126
- return code_lines
127
-
128
- # Remove common indentation
129
- return ["" if not line.strip() else line[min_indent:] for line in code_lines]
notionary/page/models.py DELETED
@@ -1,322 +0,0 @@
1
- from typing import Any, Literal, Optional, Union
2
-
3
- from pydantic import BaseModel, ConfigDict
4
-
5
- from notionary.blocks.models import ParentObject
6
-
7
-
8
- class TextContent(BaseModel):
9
- content: str
10
- link: Optional[str] = None
11
-
12
-
13
- class RichText(BaseModel):
14
- type: str
15
- text: TextContent
16
- plain_text: str
17
- href: Optional[str] = None
18
-
19
-
20
- class User(BaseModel):
21
- object: str
22
- id: str
23
-
24
-
25
- class Parent(BaseModel):
26
- type: Literal["page_id", "workspace", "block_id", "database_id"]
27
- page_id: Optional[str] = None
28
- block_id: Optional[str] = None
29
- database_id: Optional[str] = None
30
-
31
-
32
- # Rich text types for Pydantic models
33
- class TextContentPydantic(BaseModel):
34
- content: str
35
- link: Optional[dict[str, str]] = None
36
-
37
-
38
- class Annotations(BaseModel):
39
- bold: bool
40
- italic: bool
41
- strikethrough: bool
42
- underline: bool
43
- code: bool
44
- color: str
45
-
46
-
47
- class RichTextItemPydantic(BaseModel):
48
- type: str # 'text', 'mention', 'equation'
49
- text: Optional[TextContentPydantic] = None
50
- annotations: Annotations
51
- plain_text: str
52
- href: Optional[str] = None
53
-
54
-
55
- # Cover and Icon types
56
- class ExternalFile(BaseModel):
57
- """Represents an external file, e.g., for cover images."""
58
-
59
- url: str
60
-
61
-
62
- class Cover(BaseModel):
63
- """Cover image for a Notion page."""
64
-
65
- type: str
66
- external: ExternalFile
67
-
68
-
69
- class EmojiIcon(BaseModel):
70
- type: Literal["emoji"]
71
- emoji: str
72
-
73
-
74
- class ExternalIcon(BaseModel):
75
- type: Literal["external"]
76
- external: ExternalFile
77
-
78
-
79
- Icon = Union[EmojiIcon, ExternalIcon]
80
-
81
-
82
- # Database property schema types (these are schema definitions, not values)
83
- class StatusOption(BaseModel):
84
- id: str
85
- name: str
86
- color: str
87
- description: Optional[str] = None
88
-
89
-
90
- class StatusGroup(BaseModel):
91
- id: str
92
- name: str
93
- color: str
94
- option_ids: list[str]
95
-
96
-
97
- class StatusPropertySchema(BaseModel):
98
- options: list[StatusOption]
99
- groups: list[StatusGroup]
100
-
101
-
102
- class DatabaseStatusProperty(BaseModel):
103
- id: str
104
- name: str
105
- type: Literal["status"]
106
- status: StatusPropertySchema
107
-
108
-
109
- class RelationPropertySchema(BaseModel):
110
- database_id: str
111
- type: str # "single_property"
112
- single_property: dict[str, Any]
113
-
114
-
115
- class DatabaseRelationProperty(BaseModel):
116
- id: str
117
- name: str
118
- type: Literal["relation"]
119
- relation: RelationPropertySchema
120
-
121
-
122
- class DatabaseUrlProperty(BaseModel):
123
- id: str
124
- name: str
125
- type: Literal["url"]
126
- url: dict[str, Any] # Usually empty dict
127
-
128
-
129
- class DatabaseRichTextProperty(BaseModel):
130
- id: str
131
- name: str
132
- type: Literal["rich_text"]
133
- rich_text: dict[str, Any] # Usually empty dict
134
-
135
-
136
- class MultiSelectOption(BaseModel):
137
- id: str
138
- name: str
139
- color: str
140
- description: Optional[str] = None
141
-
142
-
143
- class MultiSelectPropertySchema(BaseModel):
144
- options: list[MultiSelectOption]
145
-
146
-
147
- class DatabaseMultiSelectProperty(BaseModel):
148
- id: str
149
- name: str
150
- type: Literal["multi_select"]
151
- multi_select: MultiSelectPropertySchema
152
-
153
-
154
- class DatabaseTitleProperty(BaseModel):
155
- id: str
156
- name: str
157
- type: Literal["title"]
158
- title: dict[str, Any] # Usually empty dict
159
-
160
-
161
- # Generic database property for unknown types
162
- class GenericDatabaseProperty(BaseModel):
163
- id: str
164
- name: str
165
- type: str
166
-
167
- model_config = ConfigDict(extra="allow")
168
-
169
-
170
- # Union of all database property types
171
- DatabaseProperty = Union[
172
- DatabaseStatusProperty,
173
- DatabaseRelationProperty,
174
- DatabaseUrlProperty,
175
- DatabaseRichTextProperty,
176
- DatabaseMultiSelectProperty,
177
- DatabaseTitleProperty,
178
- GenericDatabaseProperty,
179
- ]
180
-
181
-
182
- # Page property value types (these are actual values, not schemas)
183
- class StatusValue(BaseModel):
184
- id: str
185
- name: str
186
- color: str
187
-
188
-
189
- class StatusProperty(BaseModel):
190
- id: str
191
- type: str # 'status'
192
- status: Optional[StatusValue] = None
193
-
194
-
195
- class RelationItem(BaseModel):
196
- id: str
197
-
198
-
199
- class RelationProperty(BaseModel):
200
- id: str
201
- type: str # 'relation'
202
- relation: list[RelationItem]
203
- has_more: bool
204
-
205
-
206
- class UrlProperty(BaseModel):
207
- id: str
208
- type: str # 'url'
209
- url: Optional[str] = None
210
-
211
-
212
- class RichTextProperty(BaseModel):
213
- id: str
214
- type: str # 'rich_text'
215
- rich_text: list[RichTextItemPydantic]
216
-
217
-
218
- class MultiSelectItem(BaseModel):
219
- id: str
220
- name: str
221
- color: str
222
-
223
-
224
- class MultiSelectProperty(BaseModel):
225
- id: str
226
- type: str # 'multi_select'
227
- multi_select: list[MultiSelectItem]
228
-
229
-
230
- class TitleProperty(BaseModel):
231
- id: str
232
- type: str # 'title'
233
- title: list[RichTextItemPydantic]
234
-
235
-
236
- # Cover types
237
- class ExternalCover(BaseModel):
238
- url: str
239
-
240
-
241
- class NotionCover(BaseModel):
242
- type: str # 'external', 'file'
243
- external: Optional[ExternalCover] = None
244
-
245
-
246
- # User type for Pydantic
247
- class NotionUser(BaseModel):
248
- object: str # 'user'
249
- id: str
250
-
251
-
252
- # Database object
253
- class NotionDatabaseResponse(BaseModel):
254
- """
255
- Represents the response from the Notion API when retrieving a database.
256
- """
257
-
258
- object: Literal["database"]
259
- id: str
260
- cover: Optional[Cover] = None
261
- icon: Optional[Icon] = None
262
- created_time: str
263
- last_edited_time: str
264
- created_by: NotionUser
265
- last_edited_by: NotionUser
266
- title: list[RichTextItemPydantic]
267
- description: list[Any]
268
- is_inline: bool
269
- properties: dict[
270
- str, Any
271
- ] # Using Any for flexibility with different property schemas
272
- parent: ParentObject
273
- url: str
274
- public_url: Optional[str] = None
275
- archived: bool
276
- in_trash: bool
277
-
278
-
279
- class NotionPageResponse(BaseModel):
280
- object: Literal["page"]
281
- id: str
282
- created_time: str
283
- last_edited_time: str
284
- created_by: NotionUser
285
- last_edited_by: NotionUser
286
- cover: Optional[NotionCover] = None
287
- icon: Optional[Icon] = None
288
- parent: ParentObject
289
- archived: bool
290
- in_trash: bool
291
- properties: dict[str, Any]
292
- url: str
293
- public_url: Optional[str] = None
294
-
295
-
296
- # Specific response type for database queries (pages only)
297
- class NotionQueryDatabaseResponse(BaseModel):
298
- """
299
- Notion database query response model for querying pages within a database.
300
- """
301
-
302
- object: Literal["list"]
303
- results: list[NotionPageResponse]
304
- next_cursor: Optional[str] = None
305
- has_more: bool
306
- type: Literal["page_or_database"]
307
- page_or_database: dict[str, Any]
308
- request_id: str
309
-
310
-
311
- class NotionDatabaseSearchResponse(BaseModel):
312
- """
313
- Notion search response model for database-only searches.
314
- """
315
-
316
- object: Literal["list"]
317
- results: list[NotionDatabaseResponse]
318
- next_cursor: Optional[str] = None
319
- has_more: bool
320
- type: Literal["page_or_database"]
321
- page_or_database: dict[str, Any]
322
- request_id: str