notionary 0.3.1__py3-none-any.whl → 0.4.1__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 (201) hide show
  1. notionary/__init__.py +49 -1
  2. notionary/blocks/client.py +37 -11
  3. notionary/blocks/enums.py +0 -6
  4. notionary/blocks/rich_text/markdown_rich_text_converter.py +49 -15
  5. notionary/blocks/rich_text/models.py +13 -4
  6. notionary/blocks/rich_text/name_id_resolver/data_source.py +9 -3
  7. notionary/blocks/rich_text/name_id_resolver/person.py +6 -2
  8. notionary/blocks/rich_text/rich_text_markdown_converter.py +10 -3
  9. notionary/blocks/schemas.py +33 -78
  10. notionary/comments/client.py +19 -6
  11. notionary/comments/factory.py +10 -3
  12. notionary/comments/schemas.py +10 -31
  13. notionary/comments/service.py +12 -4
  14. notionary/data_source/http/data_source_instance_client.py +59 -17
  15. notionary/data_source/properties/schemas.py +156 -115
  16. notionary/data_source/query/builder.py +67 -18
  17. notionary/data_source/query/resolver.py +16 -5
  18. notionary/data_source/query/schema.py +24 -6
  19. notionary/data_source/query/validator.py +18 -6
  20. notionary/data_source/schema/registry.py +31 -12
  21. notionary/data_source/schema/service.py +66 -20
  22. notionary/data_source/schemas.py +2 -2
  23. notionary/data_source/service.py +103 -43
  24. notionary/database/client.py +27 -9
  25. notionary/database/database_metadata_update_client.py +12 -4
  26. notionary/database/schemas.py +2 -2
  27. notionary/database/service.py +14 -9
  28. notionary/exceptions/__init__.py +20 -4
  29. notionary/exceptions/api.py +2 -2
  30. notionary/exceptions/base.py +1 -1
  31. notionary/exceptions/block_parsing.py +9 -5
  32. notionary/exceptions/data_source/builder.py +13 -7
  33. notionary/exceptions/data_source/properties.py +6 -4
  34. notionary/exceptions/file_upload.py +76 -0
  35. notionary/exceptions/properties.py +7 -5
  36. notionary/exceptions/search.py +10 -6
  37. notionary/file_upload/__init__.py +4 -0
  38. notionary/file_upload/client.py +128 -210
  39. notionary/file_upload/config/__init__.py +17 -0
  40. notionary/file_upload/config/config.py +39 -0
  41. notionary/file_upload/config/constants.py +16 -0
  42. notionary/file_upload/file/reader.py +28 -0
  43. notionary/file_upload/query/__init__.py +7 -0
  44. notionary/file_upload/query/builder.py +58 -0
  45. notionary/file_upload/query/models.py +37 -0
  46. notionary/file_upload/schemas.py +80 -0
  47. notionary/file_upload/service.py +182 -291
  48. notionary/file_upload/validation/factory.py +66 -0
  49. notionary/file_upload/validation/impl/file_name_length.py +25 -0
  50. notionary/file_upload/validation/models.py +134 -0
  51. notionary/file_upload/validation/port.py +7 -0
  52. notionary/file_upload/validation/service.py +17 -0
  53. notionary/file_upload/validation/validators/__init__.py +11 -0
  54. notionary/file_upload/validation/validators/file_exists.py +15 -0
  55. notionary/file_upload/validation/validators/file_extension.py +131 -0
  56. notionary/file_upload/validation/validators/file_name_length.py +21 -0
  57. notionary/file_upload/validation/validators/upload_limit.py +31 -0
  58. notionary/http/client.py +33 -30
  59. notionary/page/content/__init__.py +9 -0
  60. notionary/page/content/factory.py +21 -7
  61. notionary/page/content/markdown/builder.py +85 -23
  62. notionary/page/content/markdown/nodes/audio.py +8 -4
  63. notionary/page/content/markdown/nodes/base.py +3 -3
  64. notionary/page/content/markdown/nodes/bookmark.py +5 -3
  65. notionary/page/content/markdown/nodes/breadcrumb.py +2 -2
  66. notionary/page/content/markdown/nodes/bulleted_list.py +5 -3
  67. notionary/page/content/markdown/nodes/callout.py +2 -2
  68. notionary/page/content/markdown/nodes/code.py +5 -3
  69. notionary/page/content/markdown/nodes/columns.py +3 -3
  70. notionary/page/content/markdown/nodes/container.py +9 -5
  71. notionary/page/content/markdown/nodes/divider.py +2 -2
  72. notionary/page/content/markdown/nodes/embed.py +8 -4
  73. notionary/page/content/markdown/nodes/equation.py +4 -2
  74. notionary/page/content/markdown/nodes/file.py +8 -4
  75. notionary/page/content/markdown/nodes/heading.py +2 -2
  76. notionary/page/content/markdown/nodes/image.py +8 -4
  77. notionary/page/content/markdown/nodes/mixins/caption.py +5 -3
  78. notionary/page/content/markdown/nodes/numbered_list.py +5 -3
  79. notionary/page/content/markdown/nodes/paragraph.py +4 -2
  80. notionary/page/content/markdown/nodes/pdf.py +8 -4
  81. notionary/page/content/markdown/nodes/quote.py +2 -2
  82. notionary/page/content/markdown/nodes/space.py +2 -2
  83. notionary/page/content/markdown/nodes/table.py +8 -5
  84. notionary/page/content/markdown/nodes/table_of_contents.py +2 -2
  85. notionary/page/content/markdown/nodes/todo.py +15 -7
  86. notionary/page/content/markdown/nodes/toggle.py +2 -2
  87. notionary/page/content/markdown/nodes/video.py +8 -4
  88. notionary/page/content/markdown/structured_output/__init__.py +73 -0
  89. notionary/page/content/markdown/structured_output/models.py +391 -0
  90. notionary/page/content/markdown/structured_output/service.py +211 -0
  91. notionary/page/content/parser/context.py +1 -1
  92. notionary/page/content/parser/factory.py +26 -8
  93. notionary/page/content/parser/parsers/audio.py +12 -32
  94. notionary/page/content/parser/parsers/base.py +2 -2
  95. notionary/page/content/parser/parsers/bookmark.py +2 -2
  96. notionary/page/content/parser/parsers/breadcrumb.py +2 -2
  97. notionary/page/content/parser/parsers/bulleted_list.py +19 -6
  98. notionary/page/content/parser/parsers/callout.py +15 -5
  99. notionary/page/content/parser/parsers/caption.py +9 -3
  100. notionary/page/content/parser/parsers/code.py +21 -7
  101. notionary/page/content/parser/parsers/column.py +8 -4
  102. notionary/page/content/parser/parsers/column_list.py +19 -7
  103. notionary/page/content/parser/parsers/divider.py +2 -2
  104. notionary/page/content/parser/parsers/embed.py +2 -4
  105. notionary/page/content/parser/parsers/equation.py +8 -4
  106. notionary/page/content/parser/parsers/file.py +12 -34
  107. notionary/page/content/parser/parsers/file_like_block.py +109 -0
  108. notionary/page/content/parser/parsers/heading.py +31 -10
  109. notionary/page/content/parser/parsers/image.py +12 -34
  110. notionary/page/content/parser/parsers/numbered_list.py +18 -6
  111. notionary/page/content/parser/parsers/paragraph.py +3 -1
  112. notionary/page/content/parser/parsers/pdf.py +12 -34
  113. notionary/page/content/parser/parsers/quote.py +28 -9
  114. notionary/page/content/parser/parsers/space.py +2 -2
  115. notionary/page/content/parser/parsers/table.py +31 -10
  116. notionary/page/content/parser/parsers/table_of_contents.py +7 -3
  117. notionary/page/content/parser/parsers/todo.py +15 -5
  118. notionary/page/content/parser/parsers/toggle.py +15 -5
  119. notionary/page/content/parser/parsers/video.py +12 -34
  120. notionary/page/content/parser/post_processing/handlers/rich_text_length.py +8 -2
  121. notionary/page/content/parser/post_processing/handlers/rich_text_length_truncation.py +8 -2
  122. notionary/page/content/parser/post_processing/service.py +3 -1
  123. notionary/page/content/parser/pre_processsing/handlers/column_syntax.py +21 -7
  124. notionary/page/content/parser/pre_processsing/handlers/indentation.py +11 -4
  125. notionary/page/content/parser/pre_processsing/handlers/video_syntax.py +13 -6
  126. notionary/page/content/parser/service.py +4 -1
  127. notionary/page/content/renderer/context.py +15 -5
  128. notionary/page/content/renderer/factory.py +12 -6
  129. notionary/page/content/renderer/post_processing/handlers/numbered_list.py +19 -9
  130. notionary/page/content/renderer/renderers/audio.py +20 -23
  131. notionary/page/content/renderer/renderers/base.py +3 -3
  132. notionary/page/content/renderer/renderers/bookmark.py +3 -1
  133. notionary/page/content/renderer/renderers/bulleted_list.py +11 -5
  134. notionary/page/content/renderer/renderers/callout.py +19 -7
  135. notionary/page/content/renderer/renderers/captioned_block.py +11 -5
  136. notionary/page/content/renderer/renderers/code.py +6 -2
  137. notionary/page/content/renderer/renderers/column.py +3 -1
  138. notionary/page/content/renderer/renderers/column_list.py +3 -1
  139. notionary/page/content/renderer/renderers/embed.py +3 -1
  140. notionary/page/content/renderer/renderers/equation.py +3 -1
  141. notionary/page/content/renderer/renderers/file.py +20 -23
  142. notionary/page/content/renderer/renderers/file_like_block.py +47 -0
  143. notionary/page/content/renderer/renderers/heading.py +22 -8
  144. notionary/page/content/renderer/renderers/image.py +20 -23
  145. notionary/page/content/renderer/renderers/numbered_list.py +8 -3
  146. notionary/page/content/renderer/renderers/paragraph.py +12 -4
  147. notionary/page/content/renderer/renderers/pdf.py +20 -23
  148. notionary/page/content/renderer/renderers/quote.py +14 -6
  149. notionary/page/content/renderer/renderers/table.py +15 -5
  150. notionary/page/content/renderer/renderers/todo.py +16 -6
  151. notionary/page/content/renderer/renderers/toggle.py +8 -4
  152. notionary/page/content/renderer/renderers/video.py +20 -23
  153. notionary/page/content/renderer/service.py +9 -3
  154. notionary/page/content/service.py +21 -7
  155. notionary/page/content/syntax/definition/__init__.py +11 -0
  156. notionary/page/content/syntax/definition/models.py +57 -0
  157. notionary/page/content/syntax/definition/registry.py +371 -0
  158. notionary/page/content/syntax/prompts/__init__.py +4 -0
  159. notionary/page/content/syntax/prompts/models.py +11 -0
  160. notionary/page/content/syntax/prompts/registry.py +703 -0
  161. notionary/page/page_metadata_update_client.py +12 -4
  162. notionary/page/properties/client.py +46 -16
  163. notionary/page/properties/factory.py +6 -2
  164. notionary/page/properties/{models.py → schemas.py} +93 -107
  165. notionary/page/properties/service.py +111 -37
  166. notionary/page/schemas.py +3 -3
  167. notionary/page/service.py +21 -7
  168. notionary/shared/entity/client.py +6 -2
  169. notionary/shared/entity/dto_parsers.py +4 -37
  170. notionary/shared/entity/entity_metadata_update_client.py +25 -5
  171. notionary/shared/entity/schemas.py +6 -6
  172. notionary/shared/entity/service.py +89 -35
  173. notionary/shared/models/file.py +36 -6
  174. notionary/shared/models/icon.py +5 -12
  175. notionary/user/base.py +6 -2
  176. notionary/user/bot.py +22 -14
  177. notionary/user/client.py +3 -1
  178. notionary/user/person.py +3 -1
  179. notionary/user/schemas.py +3 -1
  180. notionary/user/service.py +6 -2
  181. notionary/utils/decorators.py +13 -9
  182. notionary/utils/fuzzy.py +6 -2
  183. notionary/utils/mixins/logging.py +3 -1
  184. notionary/utils/pagination.py +14 -4
  185. notionary/workspace/__init__.py +6 -2
  186. notionary/workspace/query/__init__.py +2 -1
  187. notionary/workspace/query/service.py +42 -13
  188. notionary/workspace/service.py +74 -46
  189. {notionary-0.3.1.dist-info → notionary-0.4.1.dist-info}/METADATA +1 -1
  190. notionary-0.4.1.dist-info/RECORD +236 -0
  191. notionary/file_upload/models.py +0 -69
  192. notionary/page/blocks/client.py +0 -1
  193. notionary/page/content/syntax/__init__.py +0 -4
  194. notionary/page/content/syntax/models.py +0 -66
  195. notionary/page/content/syntax/registry.py +0 -393
  196. notionary/page/page_context.py +0 -50
  197. notionary/shared/models/cover.py +0 -20
  198. notionary-0.3.1.dist-info/RECORD +0 -211
  199. /notionary/page/content/syntax/{grammar.py → definition/grammar.py} +0 -0
  200. {notionary-0.3.1.dist-info → notionary-0.4.1.dist-info}/WHEEL +0 -0
  201. {notionary-0.3.1.dist-info → notionary-0.4.1.dist-info}/licenses/LICENSE +0 -0
@@ -4,7 +4,11 @@ import asyncio
4
4
  from collections.abc import AsyncIterator
5
5
  from typing import TYPE_CHECKING
6
6
 
7
- from notionary.exceptions.search import DatabaseNotFound, DataSourceNotFound, PageNotFound
7
+ from notionary.exceptions.search import (
8
+ DatabaseNotFound,
9
+ DataSourceNotFound,
10
+ PageNotFound,
11
+ )
8
12
  from notionary.utils.fuzzy import find_all_matches
9
13
  from notionary.workspace.client import WorkspaceClient
10
14
  from notionary.workspace.query.builder import NotionWorkspaceQueryConfigBuilder
@@ -18,7 +22,9 @@ class WorkspaceQueryService:
18
22
  def __init__(self, client: WorkspaceClient | None = None) -> None:
19
23
  self._client = client or WorkspaceClient()
20
24
 
21
- async def get_pages_stream(self, search_config: WorkspaceQueryConfig) -> AsyncIterator[NotionPage]:
25
+ async def get_pages_stream(
26
+ self, search_config: WorkspaceQueryConfig
27
+ ) -> AsyncIterator[NotionPage]:
22
28
  from notionary import NotionPage
23
29
 
24
30
  async for page_dto in self._client.query_pages_stream(search_config):
@@ -27,21 +33,33 @@ class WorkspaceQueryService:
27
33
  async def get_pages(self, search_config: WorkspaceQueryConfig) -> list[NotionPage]:
28
34
  from notionary import NotionPage
29
35
 
30
- page_dtos = [dto async for dto in self._client.query_pages_stream(search_config)]
36
+ page_dtos = [
37
+ dto async for dto in self._client.query_pages_stream(search_config)
38
+ ]
31
39
  page_tasks = [NotionPage.from_id(dto.id) for dto in page_dtos]
32
40
  return await asyncio.gather(*page_tasks)
33
41
 
34
- async def get_data_sources_stream(self, search_config: WorkspaceQueryConfig) -> AsyncIterator[NotionDataSource]:
42
+ async def get_data_sources_stream(
43
+ self, search_config: WorkspaceQueryConfig
44
+ ) -> AsyncIterator[NotionDataSource]:
35
45
  from notionary import NotionDataSource
36
46
 
37
- async for data_source_dto in self._client.query_data_sources_stream(search_config):
47
+ async for data_source_dto in self._client.query_data_sources_stream(
48
+ search_config
49
+ ):
38
50
  yield await NotionDataSource.from_id(data_source_dto.id)
39
51
 
40
- async def get_data_sources(self, search_config: WorkspaceQueryConfig) -> list[NotionDataSource]:
52
+ async def get_data_sources(
53
+ self, search_config: WorkspaceQueryConfig
54
+ ) -> list[NotionDataSource]:
41
55
  from notionary import NotionDataSource
42
56
 
43
- data_source_dtos = [dto async for dto in self._client.query_data_sources_stream(search_config)]
44
- data_source_tasks = [NotionDataSource.from_id(dto.id) for dto in data_source_dtos]
57
+ data_source_dtos = [
58
+ dto async for dto in self._client.query_data_sources_stream(search_config)
59
+ ]
60
+ data_source_tasks = [
61
+ NotionDataSource.from_id(dto.id) for dto in data_source_dtos
62
+ ]
45
63
  return await asyncio.gather(*data_source_tasks)
46
64
 
47
65
  async def find_data_source(self, query: str) -> NotionDataSource:
@@ -76,13 +94,20 @@ class WorkspaceQueryService:
76
94
  )
77
95
  data_sources = await self.get_data_sources(config)
78
96
 
79
- parent_database_ids = [data_sources.get_parent_database_id_if_present() for data_sources in data_sources]
97
+ parent_database_ids = [
98
+ data_sources.get_parent_database_id_if_present()
99
+ for data_sources in data_sources
100
+ ]
80
101
  # filter none values which should not happen but for safety
81
102
  parent_database_ids = [id for id in parent_database_ids if id is not None]
82
103
 
83
- parent_database_tasks = [NotionDatabase.from_id(db_id) for db_id in parent_database_ids]
104
+ parent_database_tasks = [
105
+ NotionDatabase.from_id(db_id) for db_id in parent_database_ids
106
+ ]
84
107
  parent_databases = await asyncio.gather(*parent_database_tasks)
85
- potential_databases = [database for database in parent_databases if database is not None]
108
+ potential_databases = [
109
+ database for database in parent_databases if database is not None
110
+ ]
86
111
 
87
112
  return self._find_exact_match(potential_databases, query, DatabaseNotFound)
88
113
 
@@ -96,7 +121,9 @@ class WorkspaceQueryService:
96
121
  raise exception_class(query, [])
97
122
 
98
123
  query_lower = query.lower()
99
- exact_matches = [result for result in search_results if result.title.lower() == query_lower]
124
+ exact_matches = [
125
+ result for result in search_results if result.title.lower() == query_lower
126
+ ]
100
127
 
101
128
  if exact_matches:
102
129
  return exact_matches[0]
@@ -104,7 +131,9 @@ class WorkspaceQueryService:
104
131
  suggestions = self._get_fuzzy_suggestions(search_results, query)
105
132
  raise exception_class(query, suggestions)
106
133
 
107
- def _get_fuzzy_suggestions(self, search_results: list[SearchableEntity], query: str) -> list[str]:
134
+ def _get_fuzzy_suggestions(
135
+ self, search_results: list[SearchableEntity], query: str
136
+ ) -> list[str]:
108
137
  sorted_by_similarity = find_all_matches(
109
138
  query=query,
110
139
  items=search_results,
@@ -5,18 +5,16 @@ from typing import TYPE_CHECKING, Self
5
5
 
6
6
  from notionary.user.service import UserService
7
7
  from notionary.workspace.query.builder import NotionWorkspaceQueryConfigBuilder
8
- from notionary.workspace.query.models import WorkspaceQueryConfig, WorkspaceQueryObjectType
8
+ from notionary.workspace.query.models import (
9
+ WorkspaceQueryConfig,
10
+ WorkspaceQueryObjectType,
11
+ )
9
12
  from notionary.workspace.query.service import WorkspaceQueryService
10
13
 
11
14
  if TYPE_CHECKING:
12
- from notionary.data_source.service import NotionDataSource
13
- from notionary.page.service import NotionPage
15
+ from notionary import NotionDataSource, NotionPage
14
16
  from notionary.user import BotUser, PersonUser
15
17
 
16
- type _QueryConfigInput = (
17
- WorkspaceQueryConfig | Callable[[NotionWorkspaceQueryConfigBuilder], NotionWorkspaceQueryConfigBuilder]
18
- )
19
-
20
18
 
21
19
  class NotionWorkspace:
22
20
  def __init__(
@@ -43,66 +41,96 @@ class NotionWorkspace:
43
41
 
44
42
  async def get_pages(
45
43
  self,
46
- config: _QueryConfigInput | None = None,
44
+ *,
45
+ filter_fn: Callable[
46
+ [NotionWorkspaceQueryConfigBuilder], NotionWorkspaceQueryConfigBuilder
47
+ ]
48
+ | None = None,
49
+ query_config: WorkspaceQueryConfig | None = None,
47
50
  ) -> list[NotionPage]:
48
- query_config = self._resolve_config(config, WorkspaceQueryObjectType.PAGE)
49
- return await self._query_service.get_pages(query_config)
51
+ if filter_fn is not None and query_config is not None:
52
+ raise ValueError("Use either filter_fn OR query_config, not both")
53
+
54
+ resolved_config = self._resolve_query_config(
55
+ filter_fn, query_config, WorkspaceQueryObjectType.PAGE
56
+ )
57
+ return await self._query_service.get_pages(resolved_config)
50
58
 
51
59
  async def get_pages_stream(
52
60
  self,
53
- config: _QueryConfigInput | None = None,
61
+ *,
62
+ filter_fn: Callable[
63
+ [NotionWorkspaceQueryConfigBuilder], NotionWorkspaceQueryConfigBuilder
64
+ ]
65
+ | None = None,
66
+ query_config: WorkspaceQueryConfig | None = None,
54
67
  ) -> AsyncIterator[NotionPage]:
55
- query_config = self._resolve_config(config, WorkspaceQueryObjectType.PAGE)
56
- async for page in self._query_service.get_pages_stream(query_config):
68
+ if filter_fn is not None and query_config is not None:
69
+ raise ValueError("Use either filter_fn OR query_config, not both")
70
+
71
+ resolved_config = self._resolve_query_config(
72
+ filter_fn, query_config, WorkspaceQueryObjectType.PAGE
73
+ )
74
+ async for page in self._query_service.get_pages_stream(resolved_config):
57
75
  yield page
58
76
 
59
77
  async def get_data_sources(
60
78
  self,
61
- config: _QueryConfigInput | None = None,
79
+ *,
80
+ filter_fn: Callable[
81
+ [NotionWorkspaceQueryConfigBuilder], NotionWorkspaceQueryConfigBuilder
82
+ ]
83
+ | None = None,
84
+ query_config: WorkspaceQueryConfig | None = None,
62
85
  ) -> list[NotionDataSource]:
63
- query_config = self._resolve_config(config, WorkspaceQueryObjectType.DATA_SOURCE)
64
- return await self._query_service.get_data_sources(query_config)
86
+ if filter_fn is not None and query_config is not None:
87
+ raise ValueError("Use either filter_fn OR query_config, not both")
88
+
89
+ resolved_config = self._resolve_query_config(
90
+ filter_fn, query_config, WorkspaceQueryObjectType.DATA_SOURCE
91
+ )
92
+ return await self._query_service.get_data_sources(resolved_config)
65
93
 
66
94
  async def get_data_sources_stream(
67
95
  self,
68
- config: _QueryConfigInput | None = None,
96
+ *,
97
+ filter_fn: Callable[
98
+ [NotionWorkspaceQueryConfigBuilder], NotionWorkspaceQueryConfigBuilder
99
+ ]
100
+ | None = None,
101
+ query_config: WorkspaceQueryConfig | None = None,
69
102
  ) -> AsyncIterator[NotionDataSource]:
70
- query_config = self._resolve_config(config, WorkspaceQueryObjectType.DATA_SOURCE)
71
- async for data_source in self._query_service.get_data_sources_stream(query_config):
103
+ if filter_fn is not None and query_config is not None:
104
+ raise ValueError("Use either filter_fn OR query_config, not both")
105
+
106
+ resolved_config = self._resolve_query_config(
107
+ filter_fn, query_config, WorkspaceQueryObjectType.DATA_SOURCE
108
+ )
109
+ async for data_source in self._query_service.get_data_sources_stream(
110
+ resolved_config
111
+ ):
72
112
  yield data_source
73
113
 
74
- def _resolve_config(
114
+ def _resolve_query_config(
75
115
  self,
76
- config: _QueryConfigInput | None,
116
+ filter_fn: Callable[
117
+ [NotionWorkspaceQueryConfigBuilder], NotionWorkspaceQueryConfigBuilder
118
+ ]
119
+ | None,
120
+ query_config: WorkspaceQueryConfig | None,
77
121
  expected_object_type: WorkspaceQueryObjectType,
78
122
  ) -> WorkspaceQueryConfig:
79
- if config is None:
80
- return self._create_default_config(expected_object_type)
81
-
82
- if isinstance(config, WorkspaceQueryConfig):
83
- return self._ensure_correct_object_type(config, expected_object_type)
84
-
85
- return self._build_config_from_callable(config, expected_object_type)
123
+ if filter_fn is not None:
124
+ builder = NotionWorkspaceQueryConfigBuilder()
125
+ configured_builder = filter_fn(builder)
126
+ query_config = configured_builder.build()
86
127
 
87
- def _create_default_config(self, object_type: WorkspaceQueryObjectType) -> WorkspaceQueryConfig:
88
- return WorkspaceQueryConfig(object_type=object_type)
128
+ if query_config is None:
129
+ query_config = WorkspaceQueryConfig(object_type=expected_object_type)
130
+ else:
131
+ query_config.object_type = expected_object_type
89
132
 
90
- def _build_config_from_callable(
91
- self,
92
- config_callable: Callable[[NotionWorkspaceQueryConfigBuilder], NotionWorkspaceQueryConfigBuilder],
93
- expected_object_type: WorkspaceQueryObjectType,
94
- ) -> WorkspaceQueryConfig:
95
- builder = NotionWorkspaceQueryConfigBuilder()
96
- config_callable(builder)
97
- return self._ensure_correct_object_type(builder.build(), expected_object_type)
98
-
99
- def _ensure_correct_object_type(
100
- self,
101
- config: WorkspaceQueryConfig,
102
- expected_object_type: WorkspaceQueryObjectType,
103
- ) -> WorkspaceQueryConfig:
104
- config.object_type = expected_object_type
105
- return config
133
+ return query_config
106
134
 
107
135
  async def get_users(self) -> list[PersonUser]:
108
136
  return [user async for user in self._user_service.list_users_stream()]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: notionary
3
- Version: 0.3.1
3
+ Version: 0.4.1
4
4
  Summary: Python library for programmatic Notion workspace management - databases, pages, and content with advanced Markdown support
5
5
  Project-URL: Homepage, https://github.com/mathisarends/notionary
6
6
  Author-email: Mathis Arends <mathisarends27@gmail.com>
@@ -0,0 +1,236 @@
1
+ notionary/__init__.py,sha256=mbK-28YsP87lcwkG0r4vngtomCnktBWYGLh0K6Ay2pQ,1664
2
+ notionary/blocks/__init__.py,sha256=LsVUgSsDYlLy-bwLqnukcr4uB8ZcCLMz3fGd4HsNXDY,99
3
+ notionary/blocks/client.py,sha256=-W1LKrj-OutvHiBajAQSRrnDQvgqx8pV3sX1mNqtWJI,5887
4
+ notionary/blocks/enums.py,sha256=Y_la49porLNRMI72n8Ucl_CDjo2xuH-RNwx3BesxHig,4663
5
+ notionary/blocks/schemas.py,sha256=Edsy8agI7b44JQsS_fq2CIv7n21uhytP15WX4x8oI8I,19975
6
+ notionary/blocks/rich_text/markdown_rich_text_converter.py,sha256=wv9GEdv5vUs6dD9sZQPvaQ1yGwvsr9IhneTLuoq_w2E,12078
7
+ notionary/blocks/rich_text/models.py,sha256=-6RWGGVt2a8EennakYC0jFLMDESTJy23GI1G3YTG0Ss,5009
8
+ notionary/blocks/rich_text/rich_text_markdown_converter.py,sha256=MvZEmKHbynmghbgw3Q2CbbDVnGt_qvX2qmjHlE4LRkI,5607
9
+ notionary/blocks/rich_text/rich_text_patterns.py,sha256=nC2WosgLh_RhaEckVkSi-xUNJl14bKO2u2ImuOcufso,1703
10
+ notionary/blocks/rich_text/name_id_resolver/__init__.py,sha256=1WZprWsEpL-gWnZrSn7-DqhHUz0r_8OiOcyHi1P4i1g,372
11
+ notionary/blocks/rich_text/name_id_resolver/data_source.py,sha256=5shofz678u87TwRqTdyZNEbAeN7E6YDT9w_OxOS80UY,1335
12
+ notionary/blocks/rich_text/name_id_resolver/database.py,sha256=xrCnBUYfZJfDw9bSwUroWbqzK4N1P8eduBfKVug_KXg,1073
13
+ notionary/blocks/rich_text/name_id_resolver/page.py,sha256=DfjXyBLdkYl5UfoU2UGSllsRUM5XFp30H_OJwJdKdrI,1137
14
+ notionary/blocks/rich_text/name_id_resolver/person.py,sha256=O_rmgeP9AKSA7NvG51vtjgGVyOzPvztpc3WscRB38_4,1349
15
+ notionary/blocks/rich_text/name_id_resolver/port.py,sha256=VtTavK6rHL-_qTIjFMsO25cgh_oUHNS-qEM_mONOaS0,259
16
+ notionary/comments/__init__.py,sha256=1LfujehhvWqJmNKft6QvcbwhLlJOGq7cH1uTb4IUR2w,63
17
+ notionary/comments/client.py,sha256=s4rlrSHchBspgkEAc2ZnOAepB9FgDg3BUTHW_5i51FU,2727
18
+ notionary/comments/factory.py,sha256=dJRTjvmleAhHQiJEAXdTIvV_UzQnnWoFItJJSeOWX_Y,1596
19
+ notionary/comments/models.py,sha256=g-WTDSel8nhyRa60rN0U5FuccU0KVnsnJBi6Uqz7NVw,107
20
+ notionary/comments/schemas.py,sha256=w54cPys5CWTQhjpYuwG9SJix2nU6z2rzVgpW9ANlzxI,5386
21
+ notionary/comments/service.py,sha256=Qt0AmLwhQeFjMr-UCW76MPqTPI0CdbfiubPz3mGTwYw,1735
22
+ notionary/data_source/schemas.py,sha256=xfKxy51zWlpXiLRZfRZWzFvIFwqw3hy69ydh-LJJzn0,829
23
+ notionary/data_source/service.py,sha256=G61MC3Z4x3tCMg6ZSjNaXz2qC5I7EINUZ816hFlnBIk,11966
24
+ notionary/data_source/http/client.py,sha256=wvaBOIT5OtGdE0QjbcDUsuDnZ0TZ-CyIifBHp6OYTqE,445
25
+ notionary/data_source/http/data_source_instance_client.py,sha256=8jRXv_GPrRcUawNJbARYb5oCoqbdzopUNwTvYUT46uI,5438
26
+ notionary/data_source/properties/schemas.py,sha256=4JRXPULqt38zdFhbQ0hg0xOMQto23_8b5x5lrLLG2VY,13124
27
+ notionary/data_source/query/__init__.py,sha256=Q3uQf6r0xHYV_i5kn-Gdwf68QKJMnV_7vS_gO4I3kG8,226
28
+ notionary/data_source/query/builder.py,sha256=2BLQ8ZztqYbFUGaV84ArAYqQt8fDSI2rEGdFDB-Uwgo,19216
29
+ notionary/data_source/query/resolver.py,sha256=qFrwJdJf9P4m_-BGtWDHhilTRF1vPH5WTm7dmOluoDE,4468
30
+ notionary/data_source/query/schema.py,sha256=YlF5dya-MCTPezLUSfJ3xS2gJ4APEvJKiIZITcdw3_g,9754
31
+ notionary/data_source/query/validator.py,sha256=r1wTeiAeum3gCT54WvNItiVo7D73cVAicV47kO2RdAU,3429
32
+ notionary/data_source/schema/registry.py,sha256=ODOXFB_-ZZxdXC7px_GYolHdCivyX0mRcUjd2nRSZjA,5503
33
+ notionary/data_source/schema/service.py,sha256=QAu0JfdDC0UP_SpVYbOFjZxMpARksJYCdeO-nHZxZGE,6466
34
+ notionary/database/client.py,sha256=ey_5i5QUa0yBdLkWopHvUUltpsgLqTmLB3rdm9RBKVs,2414
35
+ notionary/database/database_metadata_update_client.py,sha256=CaNrEA6EdxXGaWfwnGeS_RFibzMlXzR8A8huJCS1Pt0,980
36
+ notionary/database/schemas.py,sha256=gzihLqe4YjGExWZ4X_s9yU-lm5Ezr1YFjviNCyxW1HE,838
37
+ notionary/database/service.py,sha256=p165TWCYTskt5ddSTXM-5e1WXlnzzGfwLMVpNpMduIA,4474
38
+ notionary/exceptions/__init__.py,sha256=6_rxx95hjzaN8FgmfcZXZeAZFmOaO9eNESnhCooVhjM,1547
39
+ notionary/exceptions/api.py,sha256=TxDAKh9-DXX3eYis-S_zE07WB0-UcyQsxBjIKKoFBT8,798
40
+ notionary/exceptions/base.py,sha256=Ey5rEWO9x9GIQOcGrgQcLz0pehPXGPQdEm8MIpV7Uq4,48
41
+ notionary/exceptions/block_parsing.py,sha256=QbvSLdX_4VoEtOqy7nRk-_VjQt4rbedtuA2dh2SVkMA,1535
42
+ notionary/exceptions/file_upload.py,sha256=rbCq1_bbVLejt-BfZwLZA9fT3DocbQHdxmQxH99FFDA,2908
43
+ notionary/exceptions/properties.py,sha256=0j06puvIYrtdIXtsp6ijINtx8jLa1ugCt6nQyxNycnU,2239
44
+ notionary/exceptions/search.py,sha256=afbWhlWx9PhhX5CNhAvKkAKe2PNaoylIsb9iKjBf-bA,2208
45
+ notionary/exceptions/data_source/__init__.py,sha256=Xs4I-zVxVQiVhfTclJX7GuGVO5fMYQIWqiqFnh_O67M,170
46
+ notionary/exceptions/data_source/builder.py,sha256=3MBVGoEpg99m4CDaIoqZ9nnGJepguCpIopr_TnwZ_JE,6069
47
+ notionary/exceptions/data_source/properties.py,sha256=cVivCxdYezZtXAiztQA_71ExtBXiXcsJc0x3MVirw-I,1264
48
+ notionary/file_upload/__init__.py,sha256=MeOzKCT9RVNvikespbjE9cucfMgsh9R0JwoUfhRTjVQ,178
49
+ notionary/file_upload/client.py,sha256=ouB1K-gmZAibN5jKZ6iY5HM3r2ShAju4nfklzCm7yGY,5391
50
+ notionary/file_upload/schemas.py,sha256=71lNUxvdebtFSWOV9LqVIB_mMIg0AE-8ay-FXAOVqjE,2304
51
+ notionary/file_upload/service.py,sha256=6I_RDuKt0B2tX8DzkGEYy44GNaz4F13vsP8eFOqFcps,8848
52
+ notionary/file_upload/config/__init__.py,sha256=BS6sI4ElRMUyxro4ohw6ll7OvIzc46Ss7jjHaJCrLfY,480
53
+ notionary/file_upload/config/config.py,sha256=9Kc4GZREhHhJFSXT1EdZWFz6Btghy5Qp51vAzSZhdVU,1164
54
+ notionary/file_upload/config/constants.py,sha256=KoWJLrPPaTiELKyqrV9-Cng2nq6Y-v0MTxQJPyMnWUI,452
55
+ notionary/file_upload/file/reader.py,sha256=I4FmXdPU2dpBiIULfiVnhdiEwlLBMqa9iIO_IbzlLKw,1036
56
+ notionary/file_upload/query/__init__.py,sha256=9ZpH2HV-m7YmdKrQ5kDUC9FmcB1zjegUSK_0CTxX1Ho,155
57
+ notionary/file_upload/query/builder.py,sha256=6sFyb0GLxtaMQp88ihL3UiDOplXSuixd2v-wK3_577Y,1978
58
+ notionary/file_upload/query/models.py,sha256=c5XIq7WkfjmESMAj47OYFnuheT_jqP68bmYWrNHIq0E,1069
59
+ notionary/file_upload/validation/factory.py,sha256=3goSgCHDdtD7cAz_lDkrXdnvlP9otgruV95EvtHuLwo,2306
60
+ notionary/file_upload/validation/models.py,sha256=12IZmdzdmxjM1FmK0b0Br34_npOnieNOsdEEpBxgLJA,2996
61
+ notionary/file_upload/validation/port.py,sha256=S__YHYXLDlz2deCNNp5mv4fr6abmFyTfFGoftHB-_ZI,148
62
+ notionary/file_upload/validation/service.py,sha256=quTdUXCtGFHddqyIplF8SKaXSQ6zTh-Xw_jMq9jAvzI,681
63
+ notionary/file_upload/validation/impl/file_name_length.py,sha256=wKBm-HCUPc166bcKxt6ZbhneNdXJr0y84VeYVdlGinY,971
64
+ notionary/file_upload/validation/validators/__init__.py,sha256=UAQGLrDgr4Fv4ESPU0f0nEEY2FNm3VcpB8EZ3nKdDDo,347
65
+ notionary/file_upload/validation/validators/file_exists.py,sha256=nL1M9KK2N0YCo3JABSHZioPg0m0R3MJGDMemyL_EduY,486
66
+ notionary/file_upload/validation/validators/file_extension.py,sha256=Dc7RveuTZNWHq0OvwIbk5XAc1mylqM4CEHkfyCpmPcg,5440
67
+ notionary/file_upload/validation/validators/file_name_length.py,sha256=xdZTzw3XUUHd8I6_T6_oD7NdG2t6defLEZAB-QKsvoI,830
68
+ notionary/file_upload/validation/validators/upload_limit.py,sha256=UdhDsh57HPPNPQ3kcEAffVnm2CgBF77Fa2G47OmLs7Q,1146
69
+ notionary/http/client.py,sha256=fFbM81zLpw59y3fk4QiwRFuFEqmrbziylC1jkO8X5Vs,7392
70
+ notionary/http/models.py,sha256=fvjKAGX-b6JcJ-W7V3DEt4v3SnsdikMa6N0c4aolslY,1352
71
+ notionary/page/page_http_client.py,sha256=YQdXkfMGu2wuJpALJBIsKKwoHv316n_sMjne-iqJYHc,445
72
+ notionary/page/page_metadata_update_client.py,sha256=RmUKouWpQfG_J-Nu8qPEv1CBYSsTBSlQRjchixWFB9o,940
73
+ notionary/page/schemas.py,sha256=uodDbDQDL8b-qvvjnvRXrliFoM7o6tzmLziRBmjVhTE,359
74
+ notionary/page/service.py,sha256=MmdllMqP6iRFv5NwVvD8Ayo-qpoEzU5_UcVnqb-_xHI,6359
75
+ notionary/page/content/__init__.py,sha256=e0YejZODxp82zP5278tT10X0DR4DaSu6WCEsvN_5g_Y,247
76
+ notionary/page/content/factory.py,sha256=8H51oQ34ZKOZEuGesvUxCXcAN7iUwHoxPRhEYCOq1fE,3878
77
+ notionary/page/content/service.py,sha256=OF1uXy6xZx0rjmGFezuz3s9YAnSkOlDByJBvekC7buY,3133
78
+ notionary/page/content/markdown/__init__.py,sha256=dhBiNIbiyG38eppjXC0fkZk3NVXzRGC8xqoE89jWHG0,80
79
+ notionary/page/content/markdown/builder.py,sha256=rPrwUrfvpdrebi8O5Ej0A7TTcfgZbWVGWLRZFOZDjwU,9640
80
+ notionary/page/content/markdown/nodes/__init__.py,sha256=09XSsSNO4surN3lCHayqTC8zhcE5PZ7cAav_-js3dP4,1729
81
+ notionary/page/content/markdown/nodes/audio.py,sha256=ROwOh3TDgML1Xx7WhoAJVOIPXvFZ9p7iQXlLN49maTg,956
82
+ notionary/page/content/markdown/nodes/base.py,sha256=gGdFbPIdBx_tIfxdlRGfJs4wdwTYQKxJVfXWr2hFe0A,389
83
+ notionary/page/content/markdown/nodes/bookmark.py,sha256=c4l04Zvx0y4Nzh9utvxN8mpmNMdgyAJF0KhnzYFUGuY,1008
84
+ notionary/page/content/markdown/nodes/breadcrumb.py,sha256=St-k3n7FuWDLBKDRYLhWCkBTipP_Zispc8J71NZXWY4,554
85
+ notionary/page/content/markdown/nodes/bulleted_list.py,sha256=h1pZtewjXKdJvFbCrPoxusX9nshxmHpZdP3YBJjdofg,1534
86
+ notionary/page/content/markdown/nodes/callout.py,sha256=q7iKooafroBSSNFOy45oD5Fs0if3h10NXIDmvfnhA5k,1142
87
+ notionary/page/content/markdown/nodes/code.py,sha256=FXLmjrGSNBPu6FK8bb8Ss8So0UMZCfmwcZSXS95GmjE,1111
88
+ notionary/page/content/markdown/nodes/columns.py,sha256=c8Z8pZyajToW-f0PJyykh5nlt26rHSF-7HprLibDZxg,2387
89
+ notionary/page/content/markdown/nodes/container.py,sha256=h7rtpjg53wXzwOYpXoeT27CfbsWeaEQYtUv05TfqaLg,2621
90
+ notionary/page/content/markdown/nodes/divider.py,sha256=091DyG5hUPlFiN6C-3VykhvcY0kJip7QiqArSJxkFko,542
91
+ notionary/page/content/markdown/nodes/embed.py,sha256=Qo8LcTHFXQIjZcW6Wet9Hl6CTSfkk6svM-2Qd6dqkI0,956
92
+ notionary/page/content/markdown/nodes/equation.py,sha256=Cz5x-tC0ApUlqZeyRPHW4gLzzpEPCeOXaXIrlNEzBkM,811
93
+ notionary/page/content/markdown/nodes/file.py,sha256=5kgazA_SrBGOVDqVARC_IwVnERFezd03K9poK96Ezcs,951
94
+ notionary/page/content/markdown/nodes/heading.py,sha256=QjutIsomhotP2PqZ6CaFpA_xVU2bmeflulBnndI9-UA,1231
95
+ notionary/page/content/markdown/nodes/image.py,sha256=tM_tjqh4UtCYZp3jCwCAmb9MT3eTgKa6AjqlxJFflx8,956
96
+ notionary/page/content/markdown/nodes/numbered_list.py,sha256=FDhrcPYHuB8jK5qR8FeuxR5pburl33u3JmatnDQUoAI,1389
97
+ notionary/page/content/markdown/nodes/paragraph.py,sha256=9qiKUTxdfUnMteN5jnHKxB8ug53VOpKv1UdLEfc8k74,499
98
+ notionary/page/content/markdown/nodes/pdf.py,sha256=pow2CatNjiiGCb-izMqkysIY5OAkIfRWO8KyrpAXOvE,946
99
+ notionary/page/content/markdown/nodes/quote.py,sha256=Updr513k3jXQnPBCDp1hljZJ-O_pwlbQJSPsaRcdVjg,954
100
+ notionary/page/content/markdown/nodes/space.py,sha256=j_vM0U8cGGR3YswHyjAo3UNZAAhA1UC5CLiiHgt516M,534
101
+ notionary/page/content/markdown/nodes/table.py,sha256=8t_yp0AhfH3R5FH_u7orfpaPbycPtuVSQb_zgwzyzDk,1770
102
+ notionary/page/content/markdown/nodes/table_of_contents.py,sha256=Mx1AkglikodV9hTCW96AjmHQ6YdWaR2UurcOoUohf-U,552
103
+ notionary/page/content/markdown/nodes/todo.py,sha256=yLOYEcScsgJWijde-Hkg7cNaFLe-WEShRqgmvWo1Wkg,1640
104
+ notionary/page/content/markdown/nodes/toggle.py,sha256=LNeaIcHOxdUmh6GcIPOby59XsgQx48FL4nPGJnU4mlc,957
105
+ notionary/page/content/markdown/nodes/video.py,sha256=7YxB7hmhuYFvQvjztwhg6QONybbVBW8g97Pyv1UGnvE,956
106
+ notionary/page/content/markdown/nodes/mixins/__init__.py,sha256=KVWvxbgwrbfXt495N4xkIu4s8tD-miwVTcXa2fc9Kvc,98
107
+ notionary/page/content/markdown/nodes/mixins/caption.py,sha256=dZ6pIQqC8sugLgWJQ_M3we5PZNcTGtifo01UM01hejk,483
108
+ notionary/page/content/markdown/structured_output/__init__.py,sha256=cmeY_xDlcg7bVuBIgBYMeCRnGYpOx94d3ow0uNo_g1o,1596
109
+ notionary/page/content/markdown/structured_output/models.py,sha256=zOZeA8EkSsibmahswi26l_s7o2OFPhEnkxlaAi_XgBk,14057
110
+ notionary/page/content/markdown/structured_output/service.py,sha256=e5YFbcbGzlXlx7Szefp3JBlKxUAG1wHA5H45B1kYv_A,7663
111
+ notionary/page/content/parser/context.py,sha256=PXbLPIGvNNO0nJbS0yxONhoozvg-_qqtZYsBzixU3rs,4761
112
+ notionary/page/content/parser/factory.py,sha256=AL24BsYO6sU8cwSkhWHJSyzHu8oZH0FSCnSlOAT_Uh4,8373
113
+ notionary/page/content/parser/service.py,sha256=MNUfZ7I3GqhQIDtr9VtLykl7wAwi5LW2F0FoJbK9ICQ,2919
114
+ notionary/page/content/parser/parsers/__init__.py,sha256=cHGTAs7XZEHPmFHhlnno5J7nmLlfYwuTXtOtWvjWAD4,1637
115
+ notionary/page/content/parser/parsers/audio.py,sha256=vamZLqUEduQ3YA3dHT4w_3iaHnkbctqDM5Qzi9YkXEo,700
116
+ notionary/page/content/parser/parsers/base.py,sha256=g1UTGvthxwSuh53qA27EFHbAe3K6dCruhHvGBEwQs1w,1019
117
+ notionary/page/content/parser/parsers/bookmark.py,sha256=lsvQIuzamfKwgkUePx1GVY2TveChuFcS_4X8xGX18Ig,1264
118
+ notionary/page/content/parser/parsers/breadcrumb.py,sha256=SSD58OjTfsXxUkS24K_dEQPsb_KF9THks6M_k6NQ2D8,1221
119
+ notionary/page/content/parser/parsers/bulleted_list.py,sha256=ejCOcqKTOdq866w1Oq_wibU8XFWN5NfJ4O7n6T8W7zs,3694
120
+ notionary/page/content/parser/parsers/callout.py,sha256=6JSIIZVTxNdNn4GOHpJ6MUtH5r9X3n16mOG4rx8NJEk,4131
121
+ notionary/page/content/parser/parsers/caption.py,sha256=b8cBXeJrVN2-gunPXBREOTv3oUZixdbx2ioDe3vzYsE,2153
122
+ notionary/page/content/parser/parsers/code.py,sha256=fcBPF5TJoOqpA6zVK6beH9E9qexhKtXn9a60FRZEPRA,3686
123
+ notionary/page/content/parser/parsers/column.py,sha256=pJ_YC1wQMPumX0e2Uq-PHCggeCqUywfYIBDlryCg5ZA,2977
124
+ notionary/page/content/parser/parsers/column_list.py,sha256=SdnI_eakJB0TPxhVRaufm7JMD2Gmyt0YmpAuySty7Ds,3598
125
+ notionary/page/content/parser/parsers/divider.py,sha256=_n9003aWRBf05f3kfo8Ad6m4fOmKf81aJVj989rwfLs,1179
126
+ notionary/page/content/parser/parsers/embed.py,sha256=ocEcHEuefu8Em0HJw4pDYIfClRxpM2ORamaIymQkisc,1200
127
+ notionary/page/content/parser/parsers/equation.py,sha256=kpYgPdX1kOSpDtRnA_dovOn0zNuKS0BUms8syjpSFBY,2404
128
+ notionary/page/content/parser/parsers/file.py,sha256=8B605C4sdJSit5bSxn3-nPKQ5pfuely0qiGI7E_yChk,693
129
+ notionary/page/content/parser/parsers/file_like_block.py,sha256=JTxpF0YEKGG6Fiq15bkMquwqLojk4t3tDpDTFi-QDo4,4167
130
+ notionary/page/content/parser/parsers/heading.py,sha256=gdXKza8EL9D_kvqTE95_tgwV6A8egJDNOmdA_5m6jb4,4753
131
+ notionary/page/content/parser/parsers/image.py,sha256=kHaTG30BVJerSjb9JGGC9aKPb-MNi2KlKRaDSYrM3_o,700
132
+ notionary/page/content/parser/parsers/numbered_list.py,sha256=979FroSuApLmM2pJgIBnIrFTVrSK3k6TBClk7seUos8,3761
133
+ notionary/page/content/parser/parsers/paragraph.py,sha256=8ij-m-LBw_n6oxDAyheACCzJfUa-gkavH6q6wiT80mQ,1383
134
+ notionary/page/content/parser/parsers/pdf.py,sha256=yJ_-Glxv8OzklaPkyJzEZYE1wreZ3vNkH_oxyLoiCpE,686
135
+ notionary/page/content/parser/parsers/quote.py,sha256=8SXu2Icm81k9vUeXln5ZBGt94vyhrwXEZFjQihm3M9s,5271
136
+ notionary/page/content/parser/parsers/space.py,sha256=LQEp9IUtpld8L7JKZKqYoEASQXjJ5lO1zmgZFp5IhRM,1600
137
+ notionary/page/content/parser/parsers/table.py,sha256=QCEWU_cRw4puQ33MP4yL_T2glrv7fm6Eajso8p8V2iE,5680
138
+ notionary/page/content/parser/parsers/table_of_contents.py,sha256=FQrlG6DDWsKuZj7t7vSQAXzC2dQeYqDVQGuxseiUmvY,1257
139
+ notionary/page/content/parser/parsers/todo.py,sha256=4nNl5Rzef2Pkxc0HPghlh1tZjNr7gWZFOGqGd49-0LU,3952
140
+ notionary/page/content/parser/parsers/toggle.py,sha256=x0hlamN7Nx__9nFHRgm78AAgd4eZ7dzd8UL0H35HzIw,3000
141
+ notionary/page/content/parser/parsers/video.py,sha256=xCnOk1jWLpBvE7QsbGbiMNlsvykPMSbgEChgofULxm8,700
142
+ notionary/page/content/parser/post_processing/port.py,sha256=ZjTz9pIrk3R8Hy_NdRWmYTYrGScNyWyqgzcSUk_1BkI,248
143
+ notionary/page/content/parser/post_processing/service.py,sha256=NK-6sc496iVlpIdmDdJqHIE-IljsdBU2rKPytJN1Gm4,624
144
+ notionary/page/content/parser/post_processing/handlers/__init__.py,sha256=Io7Qw_bR6lDXCCuFWUZqR5QmmZwqKG-icE1hRoRivIk,144
145
+ notionary/page/content/parser/post_processing/handlers/rich_text_length.py,sha256=bpTAnJP3auAWF2EUBPbby4nMtK9gKXcK44YxVnJH8og,3639
146
+ notionary/page/content/parser/post_processing/handlers/rich_text_length_truncation.py,sha256=hIa1ruBcdle-tGZItdQz5r3-IeYl02N2FA4EA5DLVsE,4211
147
+ notionary/page/content/parser/pre_processsing/service.py,sha256=moa5sHuNvzUQCVGe-4IvqrCEWtIaEMD6M7FMjLXENcM,507
148
+ notionary/page/content/parser/pre_processsing/handlers/__init__.py,sha256=RX6VC1Q9tJAAjtt92hjOy20fcT7yFZP6PvNBjsp79sE,397
149
+ notionary/page/content/parser/pre_processsing/handlers/column_syntax.py,sha256=RTum_ACB9TKXmWgxPWypJsVfbB44G6aCytVO7-pRmCU,5632
150
+ notionary/page/content/parser/pre_processsing/handlers/indentation.py,sha256=FqFByaZyIzhav_7jaWZK9zu-6NLoAOueosTTTbLZbBY,3426
151
+ notionary/page/content/parser/pre_processsing/handlers/port.py,sha256=Gm_GRGl1eGo1C8AM5CUfFdYAofe4Y0gAPScU2O1EcJo,153
152
+ notionary/page/content/parser/pre_processsing/handlers/video_syntax.py,sha256=XELL_c8HEtb_-9dFRqy5q1LxMAF6sMwyIBZh2FIrHgg,2841
153
+ notionary/page/content/parser/pre_processsing/handlers/whitespace.py,sha256=GknAlc4bm2T13MwPz3F-ZP_T_En6-KCQXneqToc2l5I,2685
154
+ notionary/page/content/renderer/context.py,sha256=rdziry_nPPD3E__pV6feEHYS64n84edDANKviYjfTto,2142
155
+ notionary/page/content/renderer/factory.py,sha256=5RBri8zJ8K9uYjSNKmRzYstS6TK6F4k82N_rMYH6EH8,9016
156
+ notionary/page/content/renderer/service.py,sha256=zmuVz7ZWpLsm2JguGeSOm7tFVQ9vCp5lfGE8Z0mVN5M,1975
157
+ notionary/page/content/renderer/post_processing/port.py,sha256=VcfLsEyXd8EXMjYEf_uTX0-iq5RThwGvE7mgUsL6b8s,154
158
+ notionary/page/content/renderer/post_processing/service.py,sha256=dCc6GRRDkT3NmVHBerBf_TZfNjCIRbS8NdLJhaDQQsA,511
159
+ notionary/page/content/renderer/post_processing/handlers/__init__.py,sha256=LurntAvtz38tBpm3KAfd_Z-EyaxfG6WS_JPrytfc32M,144
160
+ notionary/page/content/renderer/post_processing/handlers/numbered_list.py,sha256=htSCfPiAo1i2sRsVic7F0ND3FriQCdpFaTdECkgD1iM,5952
161
+ notionary/page/content/renderer/renderers/__init__.py,sha256=YinHG6qfAPRTLD2-fts0gnuDuxQW9ZMBXflxoEfQ16o,1636
162
+ notionary/page/content/renderer/renderers/audio.py,sha256=SmVMLavRAZN2sYPLP0zKUkES5uJFgwnIlXqFyFGwHUQ,809
163
+ notionary/page/content/renderer/renderers/base.py,sha256=OjZp9Q_dR10qt7u9jNJ_og0s3HRrIbGmQfbMWGTc8Gs,1112
164
+ notionary/page/content/renderer/renderers/bookmark.py,sha256=7CxyNoP_Y6DXyb3LkJydQfpmosYsD2ltYD93NFsdnEw,826
165
+ notionary/page/content/renderer/renderers/breadcrumb.py,sha256=M_Qlu73LmSwcCzsF1IJywZIekzOVBP1rd8md51dvfq8,782
166
+ notionary/page/content/renderer/renderers/bulleted_list.py,sha256=LG42ppbFv1zecgBhNjSkBlP4JKr-zBDI3mdTKTIawp4,2107
167
+ notionary/page/content/renderer/renderers/callout.py,sha256=uBsHSf_28K_kJxNuPeQSHvwKBYQ2vFYHRetjS5vxEds,2187
168
+ notionary/page/content/renderer/renderers/captioned_block.py,sha256=lcl0PkLzRqzsY2rVYVpDZaDpyL0UNGQVQeOaSu3DC2E,2319
169
+ notionary/page/content/renderer/renderers/code.py,sha256=zDfHOOqcKtM2NDNPc3OUNjUzwEmM-ALCAB7dOYFm388,1304
170
+ notionary/page/content/renderer/renderers/column.py,sha256=vnzrhTtsTJ-SHz2GVjY9t9e4yOS-8M0-1UD1Ny9slOQ,1870
171
+ notionary/page/content/renderer/renderers/column_list.py,sha256=5-CiS8rY9NTvC11JkrE95qHa1BHXwMw1O06CCqj_lGM,1631
172
+ notionary/page/content/renderer/renderers/divider.py,sha256=S6XvueUgihBC5I5y7_WHWeULfUq3ydvGNC8Mz72nNwQ,796
173
+ notionary/page/content/renderer/renderers/embed.py,sha256=H3PzkpE3Gy4OYTRsrA0-XcTX6bc8vCoofP-WdLv4fzU,805
174
+ notionary/page/content/renderer/renderers/equation.py,sha256=oYdIJAoxRFLcvH0z4kyIvgL0yoWx2z4tD5d-qykQeU0,1389
175
+ notionary/page/content/renderer/renderers/fallback.py,sha256=R-w6k5N3EmTQ5ytSzPNykpNwm9tq3dW71Xffchj4qXA,918
176
+ notionary/page/content/renderer/renderers/file.py,sha256=bNJMiwcHpAggk1HAw-typSgSrzybQKUn9hm7NatEjqE,1008
177
+ notionary/page/content/renderer/renderers/file_like_block.py,sha256=TVENJMz4mEhgVg-3YV4NGzVzSnnr2WP2KP7Ra1ddYgo,1349
178
+ notionary/page/content/renderer/renderers/heading.py,sha256=25MpNFuOg-8_cmPczPpPFjW21rwJN6CC2qUrcc9LKfM,3961
179
+ notionary/page/content/renderer/renderers/image.py,sha256=RDHuNC9tdFX9fJ2iaWePZaj-JlJNQWHyFUN-ZmdFWAA,793
180
+ notionary/page/content/renderer/renderers/numbered_list.py,sha256=BK9DdQK0uD1jNzOeP51ZhnGXDrW42BID3a2Pq_IqlRc,1891
181
+ notionary/page/content/renderer/renderers/paragraph.py,sha256=06geVGwaNrm8M9BOQOxZIb5GaqVKJhzDY77jJx1FKVc,1697
182
+ notionary/page/content/renderer/renderers/pdf.py,sha256=Rxnx_lkA0T9_X7BAuiTG5UDQGckce0FhINF5N_aLTNI,801
183
+ notionary/page/content/renderer/renderers/quote.py,sha256=wCknQoJKVKAnkDBt2u3cR-vjUw4-cNLM-NiDDsCLIRE,2103
184
+ notionary/page/content/renderer/renderers/table.py,sha256=2_W88gA9CyfetBor9Sa2ZjBsVsA1Esra2cyG1vget6Q,4704
185
+ notionary/page/content/renderer/renderers/table_of_contents.py,sha256=pWlkz-jQ2jviI-it0XxJQsZ0G5I2ZtxZkC7pBSWnRBg,988
186
+ notionary/page/content/renderer/renderers/table_row.py,sha256=Zs1yFsU4hKIZizg4rGo8THGZ0VKrb3KNUQOT9ehmzFk,623
187
+ notionary/page/content/renderer/renderers/todo.py,sha256=s5ZWSL95WSABJzgl0bQ5L9BBzUcCe3_g14oOC_k4ObU,2289
188
+ notionary/page/content/renderer/renderers/toggle.py,sha256=927S9DcyB2M0Mayfhb-TOZX7tCH-oLhGsbPOUQFKHbE,2113
189
+ notionary/page/content/renderer/renderers/video.py,sha256=mKiG6zHTgfNkl5ZlAqA3RfghptROnYckkVVJMRqgomE,809
190
+ notionary/page/content/syntax/definition/__init__.py,sha256=iKaxk8qUMjGxXrni8-S0ZzR80Y_rZKuXf9pXonzQs5M,338
191
+ notionary/page/content/syntax/definition/grammar.py,sha256=vWJ1rgtekcRH4uIb94q83kYaBxmDD0E5YS7oGQR_1Aw,252
192
+ notionary/page/content/syntax/definition/models.py,sha256=CpiPUceaIH4K-DMV6gEdSB4m6k_hXIDogLjRJ9HeIhE,1247
193
+ notionary/page/content/syntax/definition/registry.py,sha256=RDmy4qbHBn4dhQ-lm9zJhWtyECx9IUJ2qTP3O3jLfmQ,15510
194
+ notionary/page/content/syntax/prompts/__init__.py,sha256=HwKOnjRf3u8-zBUpKXSwrd1f1o5_wb0tNXdrYnFWUr8,140
195
+ notionary/page/content/syntax/prompts/models.py,sha256=it51evqp8b6zuz04Yz8bb7g0-6O_1ZwB5EXyQ2ItGx8,247
196
+ notionary/page/content/syntax/prompts/registry.py,sha256=kRAQWpu9LfahMza4bLv4sGY6Lbp5KqeuthG9Av1FPR4,33556
197
+ notionary/page/properties/client.py,sha256=WiFY-60QzxDg3jtwlDECBwDbOEncPLkwi5uQNsj2Ou8,7046
198
+ notionary/page/properties/factory.py,sha256=HKrRsWUTqhyQGsxt1W1z3rCjpU7VYqtV6MWJcvvgQU8,1296
199
+ notionary/page/properties/schemas.py,sha256=0QOgbtJYsAI8oVnp6ZNgHhiJqRHWRRDpD8B8oYPCUKo,8548
200
+ notionary/page/properties/service.py,sha256=e46oFlnVkYXRIlGqRwhndnWNXXgwAZY9wroTXAH9d9w,13978
201
+ notionary/shared/typings.py,sha256=LKg_NJvqi0ZuyB6I995zg4XCyijGKY0T_bW90YiI5_g,58
202
+ notionary/shared/entity/client.py,sha256=tM2jUnYaEUfn0XDA0fZeKYww3bhNviCx6zmjYOzJjzs,1216
203
+ notionary/shared/entity/dto_parsers.py,sha256=xTrxdpecslDdt10bJYjQrHH3eP6YkuMYWcI8lxSMwXA,612
204
+ notionary/shared/entity/entity_metadata_update_client.py,sha256=aDRq1jEJ2WrJZ9f2CJiJ8GSaGftFiftMM2ZHjs7xynY,2456
205
+ notionary/shared/entity/schemas.py,sha256=SpcpWnNYmhjsVhR66bRCst68YU7IJk52f9x66L_V0Ic,1072
206
+ notionary/shared/entity/service.py,sha256=W7MkZmrjDVbeohmDE_DP0YUYwOkhFkeH2u7XbmrgKj4,10145
207
+ notionary/shared/models/file.py,sha256=chZzEWC-3yhEabYuF4xoRSy8-CJ3bX9NBupCqpsTmqQ,1154
208
+ notionary/shared/models/icon.py,sha256=XGkNmMA13iDkLeMo0cpz2t7JwxEnXfxEeSvJs3OisJo,402
209
+ notionary/shared/models/parent.py,sha256=fptJhWHot35jN9IH9BhsXNMZfNClc8av1G2TR6SqRmY,888
210
+ notionary/shared/properties/type.py,sha256=04KNeWGzphJ2hN6AbVhfDfF89XxtSGzcmnatcPHkEQI,780
211
+ notionary/user/__init__.py,sha256=O1sa9EPnJKZgpEAARJhzgh0ULqmwB-JNIgoPUCwDGMo,111
212
+ notionary/user/base.py,sha256=OKiD4fJc6qCl0XNIZdek0JNXK_e6W-QYOA7fj63c7Xk,4418
213
+ notionary/user/bot.py,sha256=422Z40BGGkTbr3fu359jBX-nxihdCNJkZQU9xbiQQX4,2642
214
+ notionary/user/client.py,sha256=bPGtM9htHV0vzcvem05MpfSAO5UZusjzZBLGYg20jVE,1434
215
+ notionary/user/factory.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
216
+ notionary/user/person.py,sha256=_O54NbSDQnVcl9VI0Ggi4zgA8psr4MruuwAiaI71x-M,1170
217
+ notionary/user/schemas.py,sha256=iIZPPm-k6xTcX4Pcb_4kdS_kLFGuzK96XSH8D2FpQ5M,1440
218
+ notionary/user/service.py,sha256=GXkQB3ZPTbgf_9aCCcdvEG1uKp92G9LW1xd5aJBMhjM,2629
219
+ notionary/utils/date.py,sha256=HPwqmZoylTFKkyI8q4BJXT3q9B39nE55uVZAyG4JnDw,1729
220
+ notionary/utils/decorators.py,sha256=JXc9Of8JbM4PMkUUnvZdyX_qvi2_X_9I9-ILI41rA3E,3792
221
+ notionary/utils/fuzzy.py,sha256=Xzqj_v_rUVwk9ep9v6GNVkGkQ2njum34ViEe0ew6H2M,1808
222
+ notionary/utils/pagination.py,sha256=xxV4blbvMvbeicaU4SeKNvoOOCw8s8GF0Rj4FPJaZgA,3427
223
+ notionary/utils/uuid_utils.py,sha256=ygTQdiKmdtyb2iY7d9kuYbo8uGSeuhiHH2PhUza6ZUw,579
224
+ notionary/utils/mixins/logging.py,sha256=L-J6UPaiR0dusaswYkvvW4yR0IK6_xzBv3WSFEXKG5w,1678
225
+ notionary/workspace/__init__.py,sha256=xrygBj5RNzLm69bhuxc2pptPs1wIwAMLf30GUEF3OYY,227
226
+ notionary/workspace/client.py,sha256=yChqszwc1FZeuWboqDSEMSkBPNhDO5buOGpdWqJDxLM,2447
227
+ notionary/workspace/schemas.py,sha256=uITRJpqHZD7LF7wOqZ6Cdx51a4Uk9rWZ110ib9EbIrA,562
228
+ notionary/workspace/service.py,sha256=AxBqbNASIzChzBbMoLt4kNj0LhZaVa3CCBLpf6mU6NM,5713
229
+ notionary/workspace/query/__init__.py,sha256=qK-D7DVUpAeil6hQBJ0Cyi2m-nCcz5TA5qso70eyDw4,173
230
+ notionary/workspace/query/builder.py,sha256=0QV0OHAWIU0O5tXOeTQFKKNNmwaC81nLk_ecHrxdokE,2887
231
+ notionary/workspace/query/models.py,sha256=isebZ9wyvj75C65nhw3VsuJygyZmgZBNX8D5VOf3TAM,1851
232
+ notionary/workspace/query/service.py,sha256=hDxuOfKtyWwrDI3Pip0Sip9VNFyxsbc3Ur9VsC25wrY,5265
233
+ notionary-0.4.1.dist-info/METADATA,sha256=x90BZ_8tVBFl3h_MIIsLGlgIVMB4goibglGxA91nxUs,6493
234
+ notionary-0.4.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
235
+ notionary-0.4.1.dist-info/licenses/LICENSE,sha256=FLNy3l12swSnCggq3zOW_3gh4uaZ12DGZL1tR6Bc5Sk,1102
236
+ notionary-0.4.1.dist-info/RECORD,,
@@ -1,69 +0,0 @@
1
- from enum import Enum
2
- from typing import Literal
3
-
4
- from pydantic import BaseModel
5
-
6
-
7
- class UploadMode(str, Enum):
8
- """Enum for file upload modes."""
9
-
10
- SINGLE_PART = "single_part"
11
- MULTI_PART = "multi_part"
12
-
13
-
14
- class FileUploadResponse(BaseModel):
15
- """
16
- Represents a Notion file upload object as returned by the File Upload API.
17
- """
18
-
19
- object: Literal["file_upload"]
20
- id: str
21
- created_time: str
22
- last_edited_time: str
23
- expiry_time: str
24
- upload_url: str
25
- archived: bool
26
- status: str # "pending", "uploaded", "failed", etc.
27
- filename: str | None = None
28
- content_type: str | None = None
29
- content_length: int | None = None
30
- request_id: str
31
-
32
-
33
- class FileUploadListResponse(BaseModel):
34
- """
35
- Response model for listing file uploads from /v1/file_uploads endpoint.
36
- """
37
-
38
- object: Literal["list"]
39
- results: list[FileUploadResponse]
40
- next_cursor: str | None = None
41
- has_more: bool
42
- type: Literal["file_upload"]
43
- file_upload: dict = {}
44
- request_id: str
45
-
46
-
47
- class FileUploadCreateRequest(BaseModel):
48
- """
49
- Request model for creating a file upload.
50
- """
51
-
52
- filename: str
53
- content_type: str | None = None
54
- content_length: int | None = None
55
- mode: UploadMode = UploadMode.SINGLE_PART
56
-
57
- def model_dump(self, **kwargs):
58
- """Override to exclude None values"""
59
- data = super().model_dump(**kwargs)
60
- return {k: v for k, v in data.items() if v is not None}
61
-
62
-
63
- class FileUploadCompleteRequest(BaseModel):
64
- """
65
- Request model for completing a multi-part file upload.
66
- """
67
-
68
- # Usually empty for complete requests, but keeping for future extensibility
69
- pass
@@ -1 +0,0 @@
1
- # PageBlockClient
@@ -1,4 +0,0 @@
1
- from .grammar import MarkdownGrammar
2
- from .registry import SyntaxRegistry
3
-
4
- __all__ = ["MarkdownGrammar", "SyntaxRegistry"]