better-notion 2.1.5__tar.gz → 2.1.7__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.5 → better_notion-2.1.7}/PKG-INFO +1 -1
  2. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/utils/agents/workspace.py +52 -21
  3. {better_notion-2.1.5 → better_notion-2.1.7}/pyproject.toml +1 -1
  4. {better_notion-2.1.5 → better_notion-2.1.7}/.gitignore +0 -0
  5. {better_notion-2.1.5 → better_notion-2.1.7}/LICENSE +0 -0
  6. {better_notion-2.1.5 → better_notion-2.1.7}/README.md +0 -0
  7. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/__init__.py +0 -0
  8. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_api/__init__.py +0 -0
  9. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_api/client.py +0 -0
  10. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_api/collections/__init__.py +0 -0
  11. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_api/collections/blocks.py +0 -0
  12. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_api/collections/comments.py +0 -0
  13. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_api/collections/databases.py +0 -0
  14. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_api/collections/pages.py +0 -0
  15. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_api/collections/users.py +0 -0
  16. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_api/entities/__init__.py +0 -0
  17. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_api/entities/block.py +0 -0
  18. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_api/entities/comment.py +0 -0
  19. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_api/entities/database.py +0 -0
  20. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_api/entities/page.py +0 -0
  21. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_api/entities/user.py +0 -0
  22. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_api/errors.py +0 -0
  23. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_api/oauth.py +0 -0
  24. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_api/properties/__init__.py +0 -0
  25. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_api/properties/base.py +0 -0
  26. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_api/properties/checkbox.py +0 -0
  27. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_api/properties/date.py +0 -0
  28. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_api/properties/email.py +0 -0
  29. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_api/properties/number.py +0 -0
  30. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_api/properties/phone.py +0 -0
  31. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_api/properties/relation.py +0 -0
  32. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_api/properties/rich_text.py +0 -0
  33. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_api/properties/select.py +0 -0
  34. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_api/properties/title.py +0 -0
  35. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_api/properties/url.py +0 -0
  36. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_api/utils/__init__.py +0 -0
  37. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_api/utils/pagination.py +0 -0
  38. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_cli/__init__.py +0 -0
  39. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_cli/async_typer.py +0 -0
  40. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_cli/commands/__init__.py +0 -0
  41. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_cli/commands/auth.py +0 -0
  42. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_cli/commands/blocks.py +0 -0
  43. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_cli/commands/comments.py +0 -0
  44. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_cli/commands/config.py +0 -0
  45. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_cli/commands/databases.py +0 -0
  46. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_cli/commands/pages.py +0 -0
  47. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_cli/commands/plugins.py +0 -0
  48. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_cli/commands/search.py +0 -0
  49. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_cli/commands/update.py +0 -0
  50. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_cli/commands/users.py +0 -0
  51. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_cli/commands/workspace.py +0 -0
  52. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_cli/config.py +0 -0
  53. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_cli/display.py +0 -0
  54. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_cli/docs/__init__.py +0 -0
  55. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_cli/docs/base.py +0 -0
  56. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_cli/docs/formatters.py +0 -0
  57. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_cli/docs/registry.py +0 -0
  58. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_cli/errors.py +0 -0
  59. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_cli/main.py +0 -0
  60. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_cli/markdown.py +0 -0
  61. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_cli/response.py +0 -0
  62. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_cli/utils/__init__.py +0 -0
  63. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/__init__.py +0 -0
  64. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/base/__init__.py +0 -0
  65. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/base/entity.py +0 -0
  66. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/cache/__init__.py +0 -0
  67. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/cache/cache.py +0 -0
  68. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/client.py +0 -0
  69. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/managers/__init__.py +0 -0
  70. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/managers/block_manager.py +0 -0
  71. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/managers/comment_manager.py +0 -0
  72. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/managers/database_manager.py +0 -0
  73. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/managers/page_manager.py +0 -0
  74. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/managers/user_manager.py +0 -0
  75. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/models/__init__.py +0 -0
  76. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/models/block.py +0 -0
  77. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/models/blocks/__init__.py +0 -0
  78. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/models/blocks/audio.py +0 -0
  79. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/models/blocks/bookmark.py +0 -0
  80. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/models/blocks/breadcrumb.py +0 -0
  81. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/models/blocks/bullet.py +0 -0
  82. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/models/blocks/callout.py +0 -0
  83. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/models/blocks/code.py +0 -0
  84. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/models/blocks/column.py +0 -0
  85. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/models/blocks/column_list.py +0 -0
  86. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/models/blocks/divider.py +0 -0
  87. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/models/blocks/embed.py +0 -0
  88. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/models/blocks/equation.py +0 -0
  89. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/models/blocks/file.py +0 -0
  90. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/models/blocks/heading.py +0 -0
  91. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/models/blocks/image.py +0 -0
  92. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/models/blocks/numbered.py +0 -0
  93. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/models/blocks/paragraph.py +0 -0
  94. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/models/blocks/pdf.py +0 -0
  95. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/models/blocks/quote.py +0 -0
  96. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/models/blocks/synced_block.py +0 -0
  97. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/models/blocks/table.py +0 -0
  98. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/models/blocks/table_row.py +0 -0
  99. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/models/blocks/template.py +0 -0
  100. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/models/blocks/todo.py +0 -0
  101. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/models/blocks/toggle.py +0 -0
  102. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/models/blocks/video.py +0 -0
  103. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/models/comment.py +0 -0
  104. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/models/database.py +0 -0
  105. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/models/page.py +0 -0
  106. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/models/user.py +0 -0
  107. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/parents/__init__.py +0 -0
  108. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/plugins.py +0 -0
  109. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/properties/__init__.py +0 -0
  110. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/properties/formula.py +0 -0
  111. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/properties/parsers.py +0 -0
  112. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/properties/relation.py +0 -0
  113. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/query/__init__.py +0 -0
  114. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/query/database_query.py +0 -0
  115. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/_sdk/query/filter_translator.py +0 -0
  116. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/plugins/__init__.py +0 -0
  117. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/plugins/base.py +0 -0
  118. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/plugins/loader.py +0 -0
  119. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/plugins/official/__init__.py +0 -0
  120. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/plugins/official/agents.py +0 -0
  121. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/plugins/official/agents_cli.py +0 -0
  122. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/plugins/official/agents_schema.py +0 -0
  123. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/plugins/official/agents_sdk/__init__.py +0 -0
  124. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/plugins/official/agents_sdk/managers.py +0 -0
  125. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/plugins/official/agents_sdk/models.py +0 -0
  126. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/plugins/official/agents_sdk/plugin.py +0 -0
  127. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/plugins/official/productivity.py +0 -0
  128. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/plugins/state.py +0 -0
  129. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/utils/__init__.py +0 -0
  130. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/utils/agents/__init__.py +0 -0
  131. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/utils/agents/auth.py +0 -0
  132. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/utils/agents/dependency_resolver.py +0 -0
  133. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/utils/agents/metadata.py +0 -0
  134. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/utils/agents/project_context.py +0 -0
  135. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/utils/agents/rbac.py +0 -0
  136. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/utils/agents/schemas.py +0 -0
  137. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/utils/agents/state_machine.py +0 -0
  138. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/utils/helpers.py +0 -0
  139. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/utils/retry.py +0 -0
  140. {better_notion-2.1.5 → better_notion-2.1.7}/better_notion/utils/validators.py +0 -0
  141. {better_notion-2.1.5 → better_notion-2.1.7}/tests/_sdk/base/test_entity.py +0 -0
  142. {better_notion-2.1.5 → better_notion-2.1.7}/tests/_sdk/cache/test_cache.py +0 -0
  143. {better_notion-2.1.5 → better_notion-2.1.7}/tests/_sdk/models/__init__.py +0 -0
  144. {better_notion-2.1.5 → better_notion-2.1.7}/tests/_sdk/models/blocks/test_advanced_blocks.py +0 -0
  145. {better_notion-2.1.5 → better_notion-2.1.7}/tests/_sdk/models/test_block.py +0 -0
  146. {better_notion-2.1.5 → better_notion-2.1.7}/tests/_sdk/models/test_database.py +0 -0
  147. {better_notion-2.1.5 → better_notion-2.1.7}/tests/_sdk/models/test_database_bug.py +0 -0
  148. {better_notion-2.1.5 → better_notion-2.1.7}/tests/_sdk/models/test_page.py +0 -0
  149. {better_notion-2.1.5 → better_notion-2.1.7}/tests/_sdk/models/test_user.py +0 -0
  150. {better_notion-2.1.5 → better_notion-2.1.7}/tests/_sdk/properties/test_formula.py +0 -0
  151. {better_notion-2.1.5 → better_notion-2.1.7}/tests/_sdk/properties/test_parsers.py +0 -0
  152. {better_notion-2.1.5 → better_notion-2.1.7}/tests/_sdk/properties/test_relation.py +0 -0
  153. {better_notion-2.1.5 → better_notion-2.1.7}/tests/_sdk/query/test_database_query.py +0 -0
  154. {better_notion-2.1.5 → better_notion-2.1.7}/tests/_sdk/query/test_filter_translator.py +0 -0
  155. {better_notion-2.1.5 → better_notion-2.1.7}/tests/_sdk/test_client.py +0 -0
  156. {better_notion-2.1.5 → better_notion-2.1.7}/tests/_sdk/test_comment.py +0 -0
  157. {better_notion-2.1.5 → better_notion-2.1.7}/tests/agents/__init__.py +0 -0
  158. {better_notion-2.1.5 → better_notion-2.1.7}/tests/agents/test_auth.py +0 -0
  159. {better_notion-2.1.5 → better_notion-2.1.7}/tests/agents/test_dependency_resolver.py +0 -0
  160. {better_notion-2.1.5 → better_notion-2.1.7}/tests/agents/test_plugin.py +0 -0
  161. {better_notion-2.1.5 → better_notion-2.1.7}/tests/agents/test_project_context.py +0 -0
  162. {better_notion-2.1.5 → better_notion-2.1.7}/tests/agents/test_rbac.py +0 -0
  163. {better_notion-2.1.5 → better_notion-2.1.7}/tests/agents/test_schemas.py +0 -0
  164. {better_notion-2.1.5 → better_notion-2.1.7}/tests/agents/test_state_machine.py +0 -0
  165. {better_notion-2.1.5 → better_notion-2.1.7}/tests/agents/test_workspace.py +0 -0
  166. {better_notion-2.1.5 → better_notion-2.1.7}/tests/cli/__init__.py +0 -0
  167. {better_notion-2.1.5 → better_notion-2.1.7}/tests/cli/test_async_typer.py +0 -0
  168. {better_notion-2.1.5 → better_notion-2.1.7}/tests/cli/test_config.py +0 -0
  169. {better_notion-2.1.5 → better_notion-2.1.7}/tests/cli/test_display.py +0 -0
  170. {better_notion-2.1.5 → better_notion-2.1.7}/tests/cli/test_errors.py +0 -0
  171. {better_notion-2.1.5 → better_notion-2.1.7}/tests/cli/test_main.py +0 -0
  172. {better_notion-2.1.5 → better_notion-2.1.7}/tests/cli/test_pages_commands.py +0 -0
  173. {better_notion-2.1.5 → better_notion-2.1.7}/tests/cli/test_response.py +0 -0
  174. {better_notion-2.1.5 → better_notion-2.1.7}/tests/cli/test_update.py +0 -0
  175. {better_notion-2.1.5 → better_notion-2.1.7}/tests/conftest.py +0 -0
  176. {better_notion-2.1.5 → better_notion-2.1.7}/tests/integration/conftest.py +0 -0
  177. {better_notion-2.1.5 → better_notion-2.1.7}/tests/integration/test_blocks.py +0 -0
  178. {better_notion-2.1.5 → better_notion-2.1.7}/tests/integration/test_databases.py +0 -0
  179. {better_notion-2.1.5 → better_notion-2.1.7}/tests/integration/test_pages.py +0 -0
  180. {better_notion-2.1.5 → better_notion-2.1.7}/tests/integration/test_search.py +0 -0
  181. {better_notion-2.1.5 → better_notion-2.1.7}/tests/integration/test_users.py +0 -0
  182. {better_notion-2.1.5 → better_notion-2.1.7}/tests/plugins/__init__.py +0 -0
  183. {better_notion-2.1.5 → better_notion-2.1.7}/tests/plugins/test_agents_cli.py +0 -0
  184. {better_notion-2.1.5 → better_notion-2.1.7}/tests/plugins/test_agents_sdk_integration.py +0 -0
  185. {better_notion-2.1.5 → better_notion-2.1.7}/tests/plugins/test_agents_sdk_managers.py +0 -0
  186. {better_notion-2.1.5 → better_notion-2.1.7}/tests/plugins/test_agents_sdk_models.py +0 -0
  187. {better_notion-2.1.5 → better_notion-2.1.7}/tests/plugins/test_base.py +0 -0
  188. {better_notion-2.1.5 → better_notion-2.1.7}/tests/plugins/test_loader.py +0 -0
  189. {better_notion-2.1.5 → better_notion-2.1.7}/tests/plugins/test_marketplace.py +0 -0
  190. {better_notion-2.1.5 → better_notion-2.1.7}/tests/plugins/test_plugin_commands_state.py +0 -0
  191. {better_notion-2.1.5 → better_notion-2.1.7}/tests/plugins/test_productivity_plugin.py +0 -0
  192. {better_notion-2.1.5 → better_notion-2.1.7}/tests/plugins/test_state.py +0 -0
  193. {better_notion-2.1.5 → better_notion-2.1.7}/tests/sdk/__init__.py +0 -0
  194. {better_notion-2.1.5 → better_notion-2.1.7}/tests/sdk/test_plugin_system.py +0 -0
  195. {better_notion-2.1.5 → better_notion-2.1.7}/tests/test_metadata.py +0 -0
  196. {better_notion-2.1.5 → better_notion-2.1.7}/tests/test_schema_command.py +0 -0
  197. {better_notion-2.1.5 → better_notion-2.1.7}/tests/unit/test_client.py +0 -0
  198. {better_notion-2.1.5 → better_notion-2.1.7}/tests/unit/test_collections.py +0 -0
  199. {better_notion-2.1.5 → better_notion-2.1.7}/tests/unit/test_entities.py +0 -0
  200. {better_notion-2.1.5 → better_notion-2.1.7}/tests/unit/test_errors.py +0 -0
  201. {better_notion-2.1.5 → better_notion-2.1.7}/tests/unit/test_helpers.py +0 -0
  202. {better_notion-2.1.5 → better_notion-2.1.7}/tests/unit/test_properties.py +0 -0
  203. {better_notion-2.1.5 → better_notion-2.1.7}/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.5
3
+ Version: 2.1.7
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
@@ -142,15 +142,29 @@ class WorkspaceInitializer:
142
142
  except Exception as e:
143
143
  # Clean up databases created so far
144
144
  import traceback
145
- logger.error(f"Failed to create {display_name} database: {str(e)}")
146
- logger.error(f"Full traceback:\n{traceback.format_exc()}")
145
+ import sys
146
+
147
+ # Log to stderr for visibility
148
+ print(f"\n{'='*60}", file=sys.stderr)
149
+ print(f"❌ FAILED TO CREATE: {display_name} database", file=sys.stderr)
150
+ print(f"{'='*60}", file=sys.stderr)
151
+ print(f"Error: {str(e)}", file=sys.stderr)
152
+ print(f"\nFull traceback:", file=sys.stderr)
153
+ traceback.print_exc(file=sys.stderr)
147
154
 
148
155
  # Try to get more error details if available
149
156
  error_details = str(e)
150
157
  if hasattr(e, 'response') and hasattr(e.response, 'text'):
151
- logger.error(f"Notion API response: {e.response.text}")
158
+ print(f"\nNotion API response:", file=sys.stderr)
159
+ print(f"{e.response.text}", file=sys.stderr)
152
160
  error_details += f"\nNotion API response: {e.response.text}"
153
161
 
162
+ print(f"\nDatabases created before failure: {list(self._database_ids.keys())}", file=sys.stderr)
163
+ print(f"{'='*60}\n", file=sys.stderr)
164
+
165
+ logger.error(f"Failed to create {display_name} database: {str(e)}")
166
+ logger.error(f"Full traceback:\n{traceback.format_exc()}")
167
+
154
168
  logger.warning(f"Cleaning up {len(self._database_ids)} databases that were created...")
155
169
  await self._delete_existing_databases(parent, self._database_ids)
156
170
 
@@ -460,18 +474,19 @@ class WorkspaceInitializer:
460
474
  db = await self._client.databases.get(database_id)
461
475
  schema = db.schema
462
476
 
463
- # Add or update the relation property
464
- # Some properties (like Dependencies, Related Work Issue) are added AFTER
465
- # database creation, so they may not exist in the initial schema
477
+ # Prepare the new property schema
478
+ new_property_schema = None
479
+
466
480
  if property_name in schema:
467
481
  # Property exists, just update the database_id
468
- schema[property_name]["relation"]["database_id"] = target_database_id
482
+ new_property_schema = schema[property_name]
483
+ new_property_schema["relation"]["database_id"] = target_database_id
469
484
  else:
470
- # Property doesn't exist, ADD it
485
+ # Property doesn't exist, CREATE it
471
486
  # This handles cases where the property couldn't be in the initial schema
472
487
  if property_name == "Dependencies":
473
488
  # Self-referential relation
474
- schema[property_name] = {
489
+ new_property_schema = {
475
490
  "relation": {
476
491
  "database_id": database_id, # Self-reference
477
492
  "type": "dual_property",
@@ -483,7 +498,7 @@ class WorkspaceInitializer:
483
498
  }
484
499
  elif property_name == "Related Work Issue":
485
500
  # Relation to Work Issues database
486
- schema[property_name] = {
501
+ new_property_schema = {
487
502
  "relation": {
488
503
  "database_id": target_database_id,
489
504
  "type": "dual_property",
@@ -495,7 +510,7 @@ class WorkspaceInitializer:
495
510
  }
496
511
  elif property_name == "Blocking Tasks":
497
512
  # Relation from Work Issues to Tasks
498
- schema[property_name] = {
513
+ new_property_schema = {
499
514
  "relation": {
500
515
  "database_id": target_database_id,
501
516
  "type": "dual_property",
@@ -507,7 +522,7 @@ class WorkspaceInitializer:
507
522
  }
508
523
  elif property_name == "Caused Incidents":
509
524
  # Relation from Work Issues to Incidents
510
- schema[property_name] = {
525
+ new_property_schema = {
511
526
  "relation": {
512
527
  "database_id": target_database_id,
513
528
  "type": "dual_property",
@@ -519,7 +534,7 @@ class WorkspaceInitializer:
519
534
  }
520
535
  elif property_name == "Root Cause Work Issue":
521
536
  # Relation from Incidents to Work Issues
522
- schema[property_name] = {
537
+ new_property_schema = {
523
538
  "relation": {
524
539
  "database_id": target_database_id,
525
540
  "type": "dual_property",
@@ -531,21 +546,37 @@ class WorkspaceInitializer:
531
546
  }
532
547
  else:
533
548
  # Generic relation
534
- schema[property_name] = {
549
+ new_property_schema = {
535
550
  "relation": {
536
551
  "database_id": target_database_id,
537
552
  "dual_property": {}
538
553
  }
539
554
  }
540
555
 
541
- # Update the database schema via API
542
- await self._client._api._request(
543
- "PATCH",
544
- f"/databases/{database_id}",
545
- json={"properties": schema}
546
- )
556
+ # Send ONLY the new/updated property, not the entire schema
557
+ # This is the key fix - Notion API expects only the changed properties
558
+ update_payload = {"properties": {property_name: new_property_schema}}
547
559
 
548
- logger.info(f"Added/Updated {property_name} relation to {target_database_id}")
560
+ # Update the database schema via API
561
+ try:
562
+ await self._client._api._request(
563
+ "PATCH",
564
+ f"/databases/{database_id}",
565
+ json=update_payload
566
+ )
567
+ logger.info(f"Added/Updated {property_name} relation to {target_database_id}")
568
+ except Exception as e:
569
+ # Debug: Print schema details to see what's wrong
570
+ import sys
571
+ print(f"\n{'='*60}", file=sys.stderr)
572
+ print(f"❌ FAILED TO ADD PROPERTY: {property_name}", file=sys.stderr)
573
+ print(f"Database ID: {database_id}", file=sys.stderr)
574
+ print(f"Target: {target_database_id}", file=sys.stderr)
575
+ print(f"Payload being sent:", file=sys.stderr)
576
+ import json
577
+ print(json.dumps(update_payload, indent=2), file=sys.stderr)
578
+ print(f"{'='*60}\n", file=sys.stderr)
579
+ raise e
549
580
 
550
581
  def save_database_ids(self, path: Optional[Path] = None) -> None:
551
582
  """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.5"
3
+ version = "2.1.7"
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