better-notion 2.1.3__tar.gz → 2.1.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (203) hide show
  1. {better_notion-2.1.3 → better_notion-2.1.4}/PKG-INFO +1 -1
  2. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/utils/agents/schemas.py +4 -4
  3. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/utils/agents/workspace.py +56 -53
  4. {better_notion-2.1.3 → better_notion-2.1.4}/pyproject.toml +1 -1
  5. {better_notion-2.1.3 → better_notion-2.1.4}/.gitignore +0 -0
  6. {better_notion-2.1.3 → better_notion-2.1.4}/LICENSE +0 -0
  7. {better_notion-2.1.3 → better_notion-2.1.4}/README.md +0 -0
  8. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/__init__.py +0 -0
  9. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_api/__init__.py +0 -0
  10. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_api/client.py +0 -0
  11. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_api/collections/__init__.py +0 -0
  12. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_api/collections/blocks.py +0 -0
  13. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_api/collections/comments.py +0 -0
  14. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_api/collections/databases.py +0 -0
  15. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_api/collections/pages.py +0 -0
  16. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_api/collections/users.py +0 -0
  17. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_api/entities/__init__.py +0 -0
  18. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_api/entities/block.py +0 -0
  19. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_api/entities/comment.py +0 -0
  20. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_api/entities/database.py +0 -0
  21. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_api/entities/page.py +0 -0
  22. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_api/entities/user.py +0 -0
  23. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_api/errors.py +0 -0
  24. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_api/oauth.py +0 -0
  25. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_api/properties/__init__.py +0 -0
  26. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_api/properties/base.py +0 -0
  27. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_api/properties/checkbox.py +0 -0
  28. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_api/properties/date.py +0 -0
  29. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_api/properties/email.py +0 -0
  30. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_api/properties/number.py +0 -0
  31. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_api/properties/phone.py +0 -0
  32. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_api/properties/relation.py +0 -0
  33. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_api/properties/rich_text.py +0 -0
  34. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_api/properties/select.py +0 -0
  35. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_api/properties/title.py +0 -0
  36. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_api/properties/url.py +0 -0
  37. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_api/utils/__init__.py +0 -0
  38. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_api/utils/pagination.py +0 -0
  39. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_cli/__init__.py +0 -0
  40. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_cli/async_typer.py +0 -0
  41. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_cli/commands/__init__.py +0 -0
  42. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_cli/commands/auth.py +0 -0
  43. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_cli/commands/blocks.py +0 -0
  44. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_cli/commands/comments.py +0 -0
  45. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_cli/commands/config.py +0 -0
  46. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_cli/commands/databases.py +0 -0
  47. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_cli/commands/pages.py +0 -0
  48. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_cli/commands/plugins.py +0 -0
  49. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_cli/commands/search.py +0 -0
  50. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_cli/commands/update.py +0 -0
  51. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_cli/commands/users.py +0 -0
  52. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_cli/commands/workspace.py +0 -0
  53. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_cli/config.py +0 -0
  54. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_cli/display.py +0 -0
  55. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_cli/docs/__init__.py +0 -0
  56. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_cli/docs/base.py +0 -0
  57. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_cli/docs/formatters.py +0 -0
  58. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_cli/docs/registry.py +0 -0
  59. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_cli/errors.py +0 -0
  60. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_cli/main.py +0 -0
  61. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_cli/markdown.py +0 -0
  62. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_cli/response.py +0 -0
  63. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_cli/utils/__init__.py +0 -0
  64. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/__init__.py +0 -0
  65. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/base/__init__.py +0 -0
  66. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/base/entity.py +0 -0
  67. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/cache/__init__.py +0 -0
  68. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/cache/cache.py +0 -0
  69. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/client.py +0 -0
  70. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/managers/__init__.py +0 -0
  71. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/managers/block_manager.py +0 -0
  72. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/managers/comment_manager.py +0 -0
  73. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/managers/database_manager.py +0 -0
  74. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/managers/page_manager.py +0 -0
  75. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/managers/user_manager.py +0 -0
  76. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/models/__init__.py +0 -0
  77. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/models/block.py +0 -0
  78. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/models/blocks/__init__.py +0 -0
  79. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/models/blocks/audio.py +0 -0
  80. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/models/blocks/bookmark.py +0 -0
  81. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/models/blocks/breadcrumb.py +0 -0
  82. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/models/blocks/bullet.py +0 -0
  83. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/models/blocks/callout.py +0 -0
  84. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/models/blocks/code.py +0 -0
  85. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/models/blocks/column.py +0 -0
  86. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/models/blocks/column_list.py +0 -0
  87. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/models/blocks/divider.py +0 -0
  88. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/models/blocks/embed.py +0 -0
  89. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/models/blocks/equation.py +0 -0
  90. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/models/blocks/file.py +0 -0
  91. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/models/blocks/heading.py +0 -0
  92. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/models/blocks/image.py +0 -0
  93. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/models/blocks/numbered.py +0 -0
  94. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/models/blocks/paragraph.py +0 -0
  95. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/models/blocks/pdf.py +0 -0
  96. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/models/blocks/quote.py +0 -0
  97. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/models/blocks/synced_block.py +0 -0
  98. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/models/blocks/table.py +0 -0
  99. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/models/blocks/table_row.py +0 -0
  100. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/models/blocks/template.py +0 -0
  101. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/models/blocks/todo.py +0 -0
  102. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/models/blocks/toggle.py +0 -0
  103. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/models/blocks/video.py +0 -0
  104. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/models/comment.py +0 -0
  105. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/models/database.py +0 -0
  106. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/models/page.py +0 -0
  107. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/models/user.py +0 -0
  108. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/parents/__init__.py +0 -0
  109. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/plugins.py +0 -0
  110. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/properties/__init__.py +0 -0
  111. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/properties/formula.py +0 -0
  112. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/properties/parsers.py +0 -0
  113. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/properties/relation.py +0 -0
  114. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/query/__init__.py +0 -0
  115. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/query/database_query.py +0 -0
  116. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/_sdk/query/filter_translator.py +0 -0
  117. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/plugins/__init__.py +0 -0
  118. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/plugins/base.py +0 -0
  119. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/plugins/loader.py +0 -0
  120. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/plugins/official/__init__.py +0 -0
  121. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/plugins/official/agents.py +0 -0
  122. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/plugins/official/agents_cli.py +0 -0
  123. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/plugins/official/agents_schema.py +0 -0
  124. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/plugins/official/agents_sdk/__init__.py +0 -0
  125. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/plugins/official/agents_sdk/managers.py +0 -0
  126. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/plugins/official/agents_sdk/models.py +0 -0
  127. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/plugins/official/agents_sdk/plugin.py +0 -0
  128. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/plugins/official/productivity.py +0 -0
  129. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/plugins/state.py +0 -0
  130. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/utils/__init__.py +0 -0
  131. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/utils/agents/__init__.py +0 -0
  132. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/utils/agents/auth.py +0 -0
  133. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/utils/agents/dependency_resolver.py +0 -0
  134. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/utils/agents/metadata.py +0 -0
  135. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/utils/agents/project_context.py +0 -0
  136. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/utils/agents/rbac.py +0 -0
  137. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/utils/agents/state_machine.py +0 -0
  138. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/utils/helpers.py +0 -0
  139. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/utils/retry.py +0 -0
  140. {better_notion-2.1.3 → better_notion-2.1.4}/better_notion/utils/validators.py +0 -0
  141. {better_notion-2.1.3 → better_notion-2.1.4}/tests/_sdk/base/test_entity.py +0 -0
  142. {better_notion-2.1.3 → better_notion-2.1.4}/tests/_sdk/cache/test_cache.py +0 -0
  143. {better_notion-2.1.3 → better_notion-2.1.4}/tests/_sdk/models/__init__.py +0 -0
  144. {better_notion-2.1.3 → better_notion-2.1.4}/tests/_sdk/models/blocks/test_advanced_blocks.py +0 -0
  145. {better_notion-2.1.3 → better_notion-2.1.4}/tests/_sdk/models/test_block.py +0 -0
  146. {better_notion-2.1.3 → better_notion-2.1.4}/tests/_sdk/models/test_database.py +0 -0
  147. {better_notion-2.1.3 → better_notion-2.1.4}/tests/_sdk/models/test_database_bug.py +0 -0
  148. {better_notion-2.1.3 → better_notion-2.1.4}/tests/_sdk/models/test_page.py +0 -0
  149. {better_notion-2.1.3 → better_notion-2.1.4}/tests/_sdk/models/test_user.py +0 -0
  150. {better_notion-2.1.3 → better_notion-2.1.4}/tests/_sdk/properties/test_formula.py +0 -0
  151. {better_notion-2.1.3 → better_notion-2.1.4}/tests/_sdk/properties/test_parsers.py +0 -0
  152. {better_notion-2.1.3 → better_notion-2.1.4}/tests/_sdk/properties/test_relation.py +0 -0
  153. {better_notion-2.1.3 → better_notion-2.1.4}/tests/_sdk/query/test_database_query.py +0 -0
  154. {better_notion-2.1.3 → better_notion-2.1.4}/tests/_sdk/query/test_filter_translator.py +0 -0
  155. {better_notion-2.1.3 → better_notion-2.1.4}/tests/_sdk/test_client.py +0 -0
  156. {better_notion-2.1.3 → better_notion-2.1.4}/tests/_sdk/test_comment.py +0 -0
  157. {better_notion-2.1.3 → better_notion-2.1.4}/tests/agents/__init__.py +0 -0
  158. {better_notion-2.1.3 → better_notion-2.1.4}/tests/agents/test_auth.py +0 -0
  159. {better_notion-2.1.3 → better_notion-2.1.4}/tests/agents/test_dependency_resolver.py +0 -0
  160. {better_notion-2.1.3 → better_notion-2.1.4}/tests/agents/test_plugin.py +0 -0
  161. {better_notion-2.1.3 → better_notion-2.1.4}/tests/agents/test_project_context.py +0 -0
  162. {better_notion-2.1.3 → better_notion-2.1.4}/tests/agents/test_rbac.py +0 -0
  163. {better_notion-2.1.3 → better_notion-2.1.4}/tests/agents/test_schemas.py +0 -0
  164. {better_notion-2.1.3 → better_notion-2.1.4}/tests/agents/test_state_machine.py +0 -0
  165. {better_notion-2.1.3 → better_notion-2.1.4}/tests/agents/test_workspace.py +0 -0
  166. {better_notion-2.1.3 → better_notion-2.1.4}/tests/cli/__init__.py +0 -0
  167. {better_notion-2.1.3 → better_notion-2.1.4}/tests/cli/test_async_typer.py +0 -0
  168. {better_notion-2.1.3 → better_notion-2.1.4}/tests/cli/test_config.py +0 -0
  169. {better_notion-2.1.3 → better_notion-2.1.4}/tests/cli/test_display.py +0 -0
  170. {better_notion-2.1.3 → better_notion-2.1.4}/tests/cli/test_errors.py +0 -0
  171. {better_notion-2.1.3 → better_notion-2.1.4}/tests/cli/test_main.py +0 -0
  172. {better_notion-2.1.3 → better_notion-2.1.4}/tests/cli/test_pages_commands.py +0 -0
  173. {better_notion-2.1.3 → better_notion-2.1.4}/tests/cli/test_response.py +0 -0
  174. {better_notion-2.1.3 → better_notion-2.1.4}/tests/cli/test_update.py +0 -0
  175. {better_notion-2.1.3 → better_notion-2.1.4}/tests/conftest.py +0 -0
  176. {better_notion-2.1.3 → better_notion-2.1.4}/tests/integration/conftest.py +0 -0
  177. {better_notion-2.1.3 → better_notion-2.1.4}/tests/integration/test_blocks.py +0 -0
  178. {better_notion-2.1.3 → better_notion-2.1.4}/tests/integration/test_databases.py +0 -0
  179. {better_notion-2.1.3 → better_notion-2.1.4}/tests/integration/test_pages.py +0 -0
  180. {better_notion-2.1.3 → better_notion-2.1.4}/tests/integration/test_search.py +0 -0
  181. {better_notion-2.1.3 → better_notion-2.1.4}/tests/integration/test_users.py +0 -0
  182. {better_notion-2.1.3 → better_notion-2.1.4}/tests/plugins/__init__.py +0 -0
  183. {better_notion-2.1.3 → better_notion-2.1.4}/tests/plugins/test_agents_cli.py +0 -0
  184. {better_notion-2.1.3 → better_notion-2.1.4}/tests/plugins/test_agents_sdk_integration.py +0 -0
  185. {better_notion-2.1.3 → better_notion-2.1.4}/tests/plugins/test_agents_sdk_managers.py +0 -0
  186. {better_notion-2.1.3 → better_notion-2.1.4}/tests/plugins/test_agents_sdk_models.py +0 -0
  187. {better_notion-2.1.3 → better_notion-2.1.4}/tests/plugins/test_base.py +0 -0
  188. {better_notion-2.1.3 → better_notion-2.1.4}/tests/plugins/test_loader.py +0 -0
  189. {better_notion-2.1.3 → better_notion-2.1.4}/tests/plugins/test_marketplace.py +0 -0
  190. {better_notion-2.1.3 → better_notion-2.1.4}/tests/plugins/test_plugin_commands_state.py +0 -0
  191. {better_notion-2.1.3 → better_notion-2.1.4}/tests/plugins/test_productivity_plugin.py +0 -0
  192. {better_notion-2.1.3 → better_notion-2.1.4}/tests/plugins/test_state.py +0 -0
  193. {better_notion-2.1.3 → better_notion-2.1.4}/tests/sdk/__init__.py +0 -0
  194. {better_notion-2.1.3 → better_notion-2.1.4}/tests/sdk/test_plugin_system.py +0 -0
  195. {better_notion-2.1.3 → better_notion-2.1.4}/tests/test_metadata.py +0 -0
  196. {better_notion-2.1.3 → better_notion-2.1.4}/tests/test_schema_command.py +0 -0
  197. {better_notion-2.1.3 → better_notion-2.1.4}/tests/unit/test_client.py +0 -0
  198. {better_notion-2.1.3 → better_notion-2.1.4}/tests/unit/test_collections.py +0 -0
  199. {better_notion-2.1.3 → better_notion-2.1.4}/tests/unit/test_entities.py +0 -0
  200. {better_notion-2.1.3 → better_notion-2.1.4}/tests/unit/test_errors.py +0 -0
  201. {better_notion-2.1.3 → better_notion-2.1.4}/tests/unit/test_helpers.py +0 -0
  202. {better_notion-2.1.3 → better_notion-2.1.4}/tests/unit/test_properties.py +0 -0
  203. {better_notion-2.1.3 → better_notion-2.1.4}/tests/utils/test_retry.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: better-notion
3
- Version: 2.1.3
3
+ Version: 2.1.4
4
4
  Summary: A high-level Python SDK for the Notion API with developer experience in mind.
5
5
  Project-URL: Homepage, https://github.com/nesalia-inc/better-notion
6
6
  Project-URL: Documentation, https://github.com/nesalia-inc/better-notion#readme
@@ -423,8 +423,10 @@ class TaskSchema:
423
423
  def get_schema() -> Dict[str, Dict[str, Any]]:
424
424
  """Return Notion database schema for Tasks.
425
425
 
426
- Note: "Dependencies" self-referential relation is NOT included here.
427
- It will be added after the database is created via database.update().
426
+ Note: The following properties are NOT included here and will be added
427
+ after database creation via database.update():
428
+ - "Dependencies": Self-referential relation (requires database's own ID)
429
+ - "Related Work Issue": Relation to Work Issues (Work Issues created after Tasks)
428
430
  """
429
431
  return {
430
432
  "Title": PropertyBuilder.title("Title"),
@@ -462,8 +464,6 @@ class TaskSchema:
462
464
  SelectOption.option("Low", "blue"),
463
465
  ],
464
466
  ),
465
- # Related Work Issue: Relation to Work Issues (will be updated after database creation)
466
- "Related Work Issue": PropertyBuilder.relation("Related Work Issue", dual_property=False),
467
467
  "Estimated Hours": PropertyBuilder.number("Estimated Hours"),
468
468
  "Actual Hours": PropertyBuilder.number("Actual Hours"),
469
469
  "Assignee": PropertyBuilder.people("Assignee"),
@@ -169,6 +169,14 @@ class WorkspaceInitializer:
169
169
  # Update cross-database relations that require both databases to exist
170
170
  await self._update_cross_database_relations()
171
171
 
172
+ # Add self-referential Dependencies relation to Tasks database
173
+ if "tasks" in self._database_ids:
174
+ await self._update_relation(
175
+ self._database_ids["tasks"],
176
+ "Dependencies",
177
+ self._database_ids["tasks"] # Self-reference
178
+ )
179
+
172
180
  # Save workspace metadata
173
181
  self.save_database_ids()
174
182
 
@@ -249,7 +257,7 @@ class WorkspaceInitializer:
249
257
  )
250
258
 
251
259
  async def _create_tasks_db(self, parent: Page) -> None:
252
- """Create Tasks database with relations to Versions (self-referencing for dependencies)."""
260
+ """Create Tasks database with relations to Versions."""
253
261
  schema = TaskSchema.get_schema()
254
262
 
255
263
  # Update relations with Versions database ID
@@ -259,8 +267,6 @@ class WorkspaceInitializer:
259
267
  "versions"
260
268
  ]
261
269
 
262
- # Tasks reference themselves for dependencies
263
- # Will be updated after database creation
264
270
  db = await self._client.databases.create(
265
271
  parent=parent,
266
272
  title="Tasks",
@@ -269,9 +275,6 @@ class WorkspaceInitializer:
269
275
 
270
276
  self._database_ids["tasks"] = db.id
271
277
 
272
- # Update self-referential relations
273
- await self._update_self_relations(db.id)
274
-
275
278
  # Update Versions database with reverse relation
276
279
  await self._add_reverse_relation(
277
280
  self._database_ids["versions"],
@@ -397,42 +400,6 @@ class WorkspaceInitializer:
397
400
  logger.warning(f"Failed to delete database {database_id}: {str(e)}")
398
401
  # Continue with other deletions even if this one fails
399
402
 
400
- async def _update_self_relations(self, database_id: str) -> None:
401
- """Add self-referential Dependencies relation to Tasks database.
402
-
403
- The Dependencies property cannot be included in the initial schema
404
- because it requires the database's own ID. This method adds it
405
- after the database is created.
406
-
407
- Args:
408
- database_id: ID of the Tasks database
409
- """
410
- # Get the current database schema
411
- db = await self._client.databases.get(database_id)
412
- schema = db.schema
413
-
414
- # Add the Dependencies self-referential relation
415
- # This creates a relation from Tasks to Tasks itself
416
- schema["Dependencies"] = {
417
- "relation": {
418
- "database_id": database_id, # Self-reference
419
- "type": "dual_property",
420
- "dual_property": {
421
- "synced_property_name": "Dependent Tasks",
422
- "synced_property_type": "relation"
423
- }
424
- }
425
- }
426
-
427
- # Update the database schema via API
428
- await self._client._api._request(
429
- "PATCH",
430
- f"/databases/{database_id}",
431
- json={"properties": schema}
432
- )
433
-
434
- logger.info(f"Added Dependencies self-referential relation to Tasks database {database_id}")
435
-
436
403
  async def _update_cross_database_relations(self) -> None:
437
404
  """Update cross-database relations after all databases are created.
438
405
 
@@ -476,7 +443,7 @@ class WorkspaceInitializer:
476
443
  property_name: str,
477
444
  target_database_id: Optional[str],
478
445
  ) -> None:
479
- """Update a relation property to point to the target database.
446
+ """Add or update a relation property to point to the target database.
480
447
 
481
448
  Args:
482
449
  database_id: Database to update
@@ -491,20 +458,56 @@ class WorkspaceInitializer:
491
458
  db = await self._client.databases.get(database_id)
492
459
  schema = db.schema
493
460
 
494
- # Update the relation property
461
+ # Add or update the relation property
462
+ # Some properties (like Dependencies, Related Work Issue) are added AFTER
463
+ # database creation, so they may not exist in the initial schema
495
464
  if property_name in schema:
465
+ # Property exists, just update the database_id
496
466
  schema[property_name]["relation"]["database_id"] = target_database_id
467
+ else:
468
+ # Property doesn't exist, ADD it
469
+ # This handles cases where the property couldn't be in the initial schema
470
+ if property_name == "Dependencies":
471
+ # Self-referential relation
472
+ schema[property_name] = {
473
+ "relation": {
474
+ "database_id": database_id, # Self-reference
475
+ "type": "dual_property",
476
+ "dual_property": {
477
+ "synced_property_name": "Dependent Tasks",
478
+ "synced_property_type": "relation"
479
+ }
480
+ }
481
+ }
482
+ elif property_name == "Related Work Issue":
483
+ # Relation to Work Issues database
484
+ schema[property_name] = {
485
+ "relation": {
486
+ "database_id": target_database_id,
487
+ "type": "dual_property",
488
+ "dual_property": {
489
+ "synced_property_name": "Related Tasks",
490
+ "synced_property_type": "relation"
491
+ }
492
+ }
493
+ }
494
+ else:
495
+ # Generic relation
496
+ schema[property_name] = {
497
+ "relation": {
498
+ "database_id": target_database_id,
499
+ "dual_property": {}
500
+ }
501
+ }
497
502
 
498
- # Update the database schema via API
499
- await self._client._api._request(
500
- "PATCH",
501
- f"/databases/{database_id}",
502
- json={"properties": schema}
503
- )
503
+ # Update the database schema via API
504
+ await self._client._api._request(
505
+ "PATCH",
506
+ f"/databases/{database_id}",
507
+ json={"properties": schema}
508
+ )
504
509
 
505
- logger.info(f"Updated {property_name} relation to {target_database_id}")
506
- else:
507
- logger.warning(f"Property {property_name} not found in database {database_id}")
510
+ logger.info(f"Added/Updated {property_name} relation to {target_database_id}")
508
511
 
509
512
  def save_database_ids(self, path: Optional[Path] = None) -> None:
510
513
  """Save workspace metadata (database IDs and workspace info) to config file.
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "better-notion"
3
- version = "2.1.3"
3
+ version = "2.1.4"
4
4
  description = "A high-level Python SDK for the Notion API with developer experience in mind."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
File without changes
File without changes
File without changes