notionary 0.1.13__py3-none-any.whl → 0.1.14__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 (37) hide show
  1. notionary/__init__.py +2 -2
  2. notionary/{converters/elements → elements}/audio_element.py +1 -1
  3. notionary/{converters/registry → elements}/block_element_registry.py +2 -5
  4. notionary/elements/block_element_registry_builder.py +401 -0
  5. notionary/{converters/elements → elements}/bookmark_element.py +1 -1
  6. notionary/{converters/elements → elements}/callout_element.py +2 -2
  7. notionary/{converters/elements → elements}/code_block_element.py +1 -1
  8. notionary/{converters/elements → elements}/column_element.py +1 -1
  9. notionary/{converters/elements → elements}/divider_element.py +1 -1
  10. notionary/{converters/elements → elements}/embed_element.py +1 -1
  11. notionary/{converters/elements → elements}/heading_element.py +2 -2
  12. notionary/{converters/elements → elements}/image_element.py +1 -1
  13. notionary/{converters/elements → elements}/list_element.py +2 -2
  14. notionary/elements/mention_element.py +135 -0
  15. notionary/{converters/elements → elements}/paragraph_element.py +2 -2
  16. notionary/{converters/elements → elements}/qoute_element.py +1 -1
  17. notionary/{converters/elements → elements}/table_element.py +2 -2
  18. notionary/{converters/elements → elements}/todo_lists.py +2 -2
  19. notionary/{converters/elements → elements}/toggle_element.py +1 -1
  20. notionary/{converters/elements → elements}/video_element.py +1 -1
  21. notionary/notion_client.py +0 -1
  22. notionary/page/content/page_content_manager.py +4 -3
  23. notionary/{converters → page}/markdown_to_notion_converter.py +2 -4
  24. notionary/page/notion_page.py +23 -5
  25. notionary/page/notion_page_factory.py +1 -15
  26. notionary/page/notion_to_markdown_converter.py +245 -0
  27. {notionary-0.1.13.dist-info → notionary-0.1.14.dist-info}/METADATA +1 -1
  28. notionary-0.1.14.dist-info/RECORD +56 -0
  29. notionary/converters/__init__.py +0 -50
  30. notionary/converters/notion_to_markdown_converter.py +0 -45
  31. notionary/converters/registry/block_element_registry_builder.py +0 -284
  32. notionary-0.1.13.dist-info/RECORD +0 -56
  33. /notionary/{converters/elements → elements}/notion_block_element.py +0 -0
  34. /notionary/{converters/elements → elements}/text_inline_formatter.py +0 -0
  35. {notionary-0.1.13.dist-info → notionary-0.1.14.dist-info}/WHEEL +0 -0
  36. {notionary-0.1.13.dist-info → notionary-0.1.14.dist-info}/licenses/LICENSE +0 -0
  37. {notionary-0.1.13.dist-info → notionary-0.1.14.dist-info}/top_level.txt +0 -0
@@ -1,284 +0,0 @@
1
- from typing import List, Type
2
- from collections import OrderedDict
3
-
4
- from notionary.converters.elements.audio_element import AudioElement
5
- from notionary.converters.elements.embed_element import EmbedElement
6
- from notionary.converters.elements.notion_block_element import NotionBlockElement
7
- from notionary.converters.registry.block_element_registry import (
8
- BlockElementRegistry,
9
- )
10
-
11
- from notionary.converters.elements.paragraph_element import ParagraphElement
12
- from notionary.converters.elements.heading_element import HeadingElement
13
- from notionary.converters.elements.callout_element import CalloutElement
14
- from notionary.converters.elements.code_block_element import CodeBlockElement
15
- from notionary.converters.elements.divider_element import DividerElement
16
- from notionary.converters.elements.table_element import TableElement
17
- from notionary.converters.elements.todo_lists import TodoElement
18
- from notionary.converters.elements.list_element import (
19
- BulletedListElement,
20
- NumberedListElement,
21
- )
22
- from notionary.converters.elements.qoute_element import QuoteElement
23
- from notionary.converters.elements.image_element import ImageElement
24
- from notionary.converters.elements.video_element import VideoElement
25
- from notionary.converters.elements.toggle_element import ToggleElement
26
- from notionary.converters.elements.bookmark_element import BookmarkElement
27
- from notionary.converters.elements.column_element import ColumnElement
28
-
29
-
30
- class BlockElementRegistryBuilder:
31
- """
32
- True builder for constructing BlockElementRegistry instances.
33
-
34
- This builder allows for incremental construction of registry instances
35
- with specific configurations of block elements.
36
- """
37
-
38
- def __init__(self):
39
- """Initialize a new builder with an empty element list."""
40
- # Use OrderedDict to maintain insertion order while ensuring uniqueness
41
- self._elements = OrderedDict()
42
-
43
- # Profile methods - create a base configuration
44
-
45
- @classmethod
46
- def start_empty(cls) -> "BlockElementRegistryBuilder":
47
- """
48
- Start with a completely empty registry builder.
49
-
50
- Returns:
51
- A new builder instance with no elements
52
- """
53
- return cls()
54
-
55
- @classmethod
56
- def start_minimal(cls) -> "BlockElementRegistryBuilder":
57
- """
58
- Start with a minimal set of essential elements.
59
-
60
- Returns:
61
- A new builder instance with basic elements
62
- """
63
- builder = cls()
64
- return (
65
- builder.add_element(HeadingElement)
66
- .add_element(BulletedListElement)
67
- .add_element(NumberedListElement)
68
- .add_element(ParagraphElement)
69
- ) # Add paragraph last as fallback
70
-
71
- @classmethod
72
- def start_standard(cls) -> "BlockElementRegistryBuilder":
73
- """
74
- Start with all standard elements in recommended order.
75
-
76
- Returns:
77
- A new builder instance with all standard elements
78
- """
79
- builder = cls()
80
- return (
81
- builder.add_element(HeadingElement)
82
- .add_element(CalloutElement)
83
- .add_element(CodeBlockElement)
84
- .add_element(DividerElement)
85
- .add_element(TableElement)
86
- .add_element(ColumnElement)
87
- .add_element(BulletedListElement)
88
- .add_element(NumberedListElement)
89
- .add_element(ToggleElement)
90
- .add_element(QuoteElement)
91
- .add_element(TodoElement)
92
- .add_element(BookmarkElement)
93
- .add_element(ImageElement)
94
- .add_element(VideoElement)
95
- .add_element(EmbedElement)
96
- .add_element(AudioElement)
97
- .add_element(ParagraphElement)
98
- ) # Add paragraph last as fallback
99
-
100
- # Element manipulation methods
101
-
102
- def add_element(
103
- self, element_class: Type[NotionBlockElement]
104
- ) -> "BlockElementRegistryBuilder":
105
- """
106
- Add an element class to the registry configuration.
107
- If the element already exists, it's moved to the end.
108
-
109
- Args:
110
- element_class: The element class to add
111
-
112
- Returns:
113
- Self for method chaining
114
- """
115
- # Remove if exists (to update the order) and add to the end
116
- self._elements.pop(element_class.__name__, None)
117
- self._elements[element_class.__name__] = element_class
118
- return self
119
-
120
- def add_elements(
121
- self, element_classes: List[Type[NotionBlockElement]]
122
- ) -> "BlockElementRegistryBuilder":
123
- """
124
- Add multiple element classes to the registry configuration.
125
-
126
- Args:
127
- element_classes: List of element classes to add
128
-
129
- Returns:
130
- Self for method chaining
131
- """
132
- for element_class in element_classes:
133
- self.add_element(element_class)
134
- return self
135
-
136
- def remove_element(
137
- self, element_class: Type[NotionBlockElement]
138
- ) -> "BlockElementRegistryBuilder":
139
- """
140
- Remove an element class from the registry configuration.
141
-
142
- Args:
143
- element_class: The element class to remove
144
-
145
- Returns:
146
- Self for method chaining
147
- """
148
- self._elements.pop(element_class.__name__, None)
149
- return self
150
-
151
- def move_element_to_end(
152
- self, element_class: Type[NotionBlockElement]
153
- ) -> "BlockElementRegistryBuilder":
154
- """
155
- Move an existing element to the end of the registry.
156
- If the element doesn't exist, it will be added.
157
-
158
- Args:
159
- element_class: The element class to move
160
-
161
- Returns:
162
- Self for method chaining
163
- """
164
- return self.add_element(element_class) # add_element already handles this logic
165
-
166
- def ensure_paragraph_at_end(self) -> "BlockElementRegistryBuilder":
167
- """
168
- Ensure ParagraphElement is the last element in the registry.
169
- If it doesn't exist, it will be added.
170
-
171
- Returns:
172
- Self for method chaining
173
- """
174
- return self.move_element_to_end(ParagraphElement)
175
-
176
- # Specialized configuration methods
177
-
178
- def with_list_support(self) -> "BlockElementRegistryBuilder":
179
- """
180
- Add support for list elements.
181
-
182
- Returns:
183
- Self for method chaining
184
- """
185
- return self.add_element(BulletedListElement).add_element(NumberedListElement)
186
-
187
- def with_code_support(self) -> "BlockElementRegistryBuilder":
188
- """
189
- Add support for code blocks.
190
-
191
- Returns:
192
- Self for method chaining
193
- """
194
- return self.add_element(CodeBlockElement)
195
-
196
- def with_table_support(self) -> "BlockElementRegistryBuilder":
197
- """
198
- Add support for tables.
199
-
200
- Returns:
201
- Self for method chaining
202
- """
203
- return self.add_element(TableElement)
204
-
205
- def with_rich_content(self) -> "BlockElementRegistryBuilder":
206
- """
207
- Add support for rich content elements (callouts, toggles, etc.).
208
-
209
- Returns:
210
- Self for method chaining
211
- """
212
- return (
213
- self.add_element(CalloutElement)
214
- .add_element(ToggleElement)
215
- .add_element(QuoteElement)
216
- )
217
-
218
- def with_media_support(self) -> "BlockElementRegistryBuilder":
219
- """
220
- Add support for media elements (images, videos).
221
-
222
- Returns:
223
- Self for method chaining
224
- """
225
- return self.add_element(ImageElement).add_element(VideoElement)
226
-
227
- def with_task_support(self) -> "BlockElementRegistryBuilder":
228
- """
229
- Add support for task-related elements (todos).
230
-
231
- Returns:
232
- Self for method chaining
233
- """
234
- return self.add_element(TodoElement)
235
-
236
- def build(self) -> BlockElementRegistry:
237
- """
238
- Build and return the configured BlockElementRegistry instance.
239
-
240
- Returns:
241
- A configured BlockElementRegistry instance
242
- """
243
- registry = BlockElementRegistry()
244
-
245
- # Add elements in the recorded order
246
- for element_class in self._elements.values():
247
- registry.register(element_class)
248
-
249
- return registry
250
-
251
- @classmethod
252
- def create_standard_registry(cls) -> BlockElementRegistry:
253
- """
254
- Factory method to directly create a standard registry.
255
-
256
- Returns:
257
- A fully configured registry instance
258
- """
259
- return cls.start_standard().build()
260
-
261
- @classmethod
262
- def create_minimal_registry(cls) -> BlockElementRegistry:
263
- """
264
- Factory method to directly create a minimal registry.
265
-
266
- Returns:
267
- A minimal registry instance
268
- """
269
- return cls.start_minimal().build()
270
-
271
- @classmethod
272
- def create_custom_registry(
273
- cls, element_classes: List[Type[NotionBlockElement]]
274
- ) -> BlockElementRegistry:
275
- """
276
- Factory method to directly create a custom registry.
277
-
278
- Args:
279
- element_classes: List of element classes to register
280
-
281
- Returns:
282
- A custom configured registry instance
283
- """
284
- return cls().add_elements(element_classes).build()
@@ -1,56 +0,0 @@
1
- notionary/__init__.py,sha256=kG1u5pB2PCrr2aXG4B1YhVqucPqU_LG-qyw5t5Bjayw,739
2
- notionary/notion_client.py,sha256=VdIE1TSEZTy2BhR7Hnx_McndvQYxlu-aJN_7LeDpXgY,4497
3
- notionary/converters/__init__.py,sha256=GOUehJbe4BKHtec1MqL1YGu3AX8zFtkwSZfhYkY5-P0,1798
4
- notionary/converters/markdown_to_notion_converter.py,sha256=xmoXpE7KqaueUHAcDt76BTDUE_tNv4QbNtgBgX_YAXk,15100
5
- notionary/converters/notion_to_markdown_converter.py,sha256=aX2qabOI6cp3bYOfDxJtODQYBQCp_zRFlezLXjwFV9Q,1277
6
- notionary/converters/elements/audio_element.py,sha256=jCCReh0pBKjB4Dq46XZMkKJ1ZZy0DvjgFbeQKW5VGzM,5600
7
- notionary/converters/elements/bookmark_element.py,sha256=Ki0Tv3lpYmo6g7OKtXg9smzMtbB2C5O9Qfr6QF8goko,8588
8
- notionary/converters/elements/callout_element.py,sha256=tUUzTrt0JXhvvvnxCdF-KPp9mVsil_6bmUBhDeeRrYg,5954
9
- notionary/converters/elements/code_block_element.py,sha256=wZh3LXA5qsan0Z9w7SnRKWJMYrw5cT7cfHZ61RtRKM8,5184
10
- notionary/converters/elements/column_element.py,sha256=5i6jODlsaGz5S7gJFEzTYnmf1yPyM1-8oMJvJp3EUno,10717
11
- notionary/converters/elements/divider_element.py,sha256=6Zv15SXLFkXo6HkiQ_iXGd_FfFr3tEObXrlNiw1gE2g,2787
12
- notionary/converters/elements/embed_element.py,sha256=PMF2th4eSjKWUqkxgb0hTvt-ZO2W5mGspMExn_UBa2U,4779
13
- notionary/converters/elements/heading_element.py,sha256=L-VZaXO1uFnfGNWkTmtHg5YXKLncR23MVFJvwJtqSuA,2778
14
- notionary/converters/elements/image_element.py,sha256=sz5nXZzKTBb0U6QULOMVQ4XBdAHi6yOh9-TTodz_0-Q,4856
15
- notionary/converters/elements/list_element.py,sha256=CRp8R1Kxn01dqZNal9EaAwV2D3Z4c_sXRZ0crZ4OTOI,4868
16
- notionary/converters/elements/notion_block_element.py,sha256=lLRBDXhBeRaRzkbvdpYpr-U9nbkd62oVtqdSe-svT4c,1746
17
- notionary/converters/elements/paragraph_element.py,sha256=-gIZr5MD_b7akh9euQ95PsiQlhvswC2S1VFgwBXRFQQ,2756
18
- notionary/converters/elements/qoute_element.py,sha256=3Nr62ddgr4erncdBs-xhb2OMiPhlXAKuoqu-3hefTRc,9052
19
- notionary/converters/elements/table_element.py,sha256=7eqFMYxZUx7aG25WEp1cNSMHDkKTWwZvUVpq4dTnvHc,11244
20
- notionary/converters/elements/text_inline_formatter.py,sha256=FE_Sq2cozpu5RVtMbnPq21gD06UjH3LMRYr3s16JKYo,10606
21
- notionary/converters/elements/todo_lists.py,sha256=6d74O11TfCr5umQa2xrsIiUv3PB9sZoDcWdfg21M7po,4255
22
- notionary/converters/elements/toggle_element.py,sha256=69JSanxAGPXKwpBsMtXlvW0aCn080Me4gwk_DxTxM2Q,7253
23
- notionary/converters/elements/video_element.py,sha256=XKfZcG8m8lZ5RyQGz_GgZCGPCMY3SjcvyuRJ6P1ymMI,6042
24
- notionary/converters/registry/block_element_registry.py,sha256=Bi1DlEdP8xloqh_YeTh1PKzOKxtS1u1W-lu8kEcXY94,8690
25
- notionary/converters/registry/block_element_registry_builder.py,sha256=UMJNE3bVMNqwTeA5pvNf-_gxYzIuUX1AOy1sYQXlBs4,9367
26
- notionary/database/database_discovery.py,sha256=qDGFhXG9s-_6CXdRg8tMiwX4dvX7jLjgAUFPSNlYtlI,4506
27
- notionary/database/database_info_service.py,sha256=Ig6gx8jUSPYORJvfgEV5kV6t72pZQsWU8HPMqd43B-o,1336
28
- notionary/database/notion_database.py,sha256=RY5MlXNE5DVNWLC_Derljsz87ZMHkE-05Vgm80kvLxg,7250
29
- notionary/database/notion_database_factory.py,sha256=Af57yaUHidD8TKJ8uyXOc2nnqHm7on6VGFdDRjxiq9o,6692
30
- notionary/database/models/page_result.py,sha256=Vmm5_oYpYAkIIJVoTd1ZZGloeC3cmFLMYP255mAmtaw,233
31
- notionary/exceptions/database_exceptions.py,sha256=I-Tx6bYRLpi5pjGPtbT-Mqxvz3BFgYTiuZxknJeLxtI,2638
32
- notionary/exceptions/page_creation_exception.py,sha256=4v7IuZD6GsQLrqhDLriGjuG3ML638gAO53zDCrLePuU,281
33
- notionary/page/notion_page.py,sha256=u5lPCteJ5Bz89N40TlwF2cHjHAMmwYOi2NHMo5neJZU,17003
34
- notionary/page/notion_page_factory.py,sha256=ucTrAaXvlD4pzfqRXfhygldfD8MLx4n23XpsWESXEr4,8466
35
- notionary/page/content/notion_page_content_chunker.py,sha256=xRks74Dqec-De6-AVTxMPnXs-MSJBzSm1HfJfaHiKr8,3330
36
- notionary/page/content/page_content_manager.py,sha256=X4p6jBJpFpOhtbiH2BOzwoAnWRLz1EDauV16QYJMW58,3942
37
- notionary/page/metadata/metadata_editor.py,sha256=61uiw8oB25O8ePhytoJvZDetuof5sjPoM6aoHZGo4wc,4949
38
- notionary/page/metadata/notion_icon_manager.py,sha256=ixZrWsHGVpmF05Ncy9LCt8vZlKAQHYFZW-2yI5JZZDI,1426
39
- notionary/page/metadata/notion_page_cover_manager.py,sha256=qgQxQE-bx4oWjLFUQvpXD5GzO1Mx7w7htz1xC2BOqUg,1717
40
- notionary/page/properites/database_property_service.py,sha256=AJuBGahbb53VQa6IGGHxBMoOgCy6vFZg08uR_eDjNUs,11570
41
- notionary/page/properites/page_property_manager.py,sha256=Xl8Cwn8WVszqpFXT_NvASkmP5igpCTEgRVhG_F45424,6914
42
- notionary/page/properites/property_formatter.py,sha256=d_Nr5XQxgjB6VIS0u3ey14MOUKY416o_BvdXjbkUNAQ,3667
43
- notionary/page/properites/property_operation_result.py,sha256=PhxHJJxxG2BdDl7aswhWnMSmf9RQtoinKkRHDoqxwCs,3913
44
- notionary/page/properites/property_value_extractor.py,sha256=1BfyCYrFzfIUmNTozavrLTjG--6P6Dy2tkewf6rHHwQ,2353
45
- notionary/page/relations/notion_page_relation_manager.py,sha256=D7JZJLXjX2Jn3CIseJxoMK9qL9gp88t4NmL9Ihu06eg,12682
46
- notionary/page/relations/notion_page_title_resolver.py,sha256=jUYsEkfyDgdh77oh2awYEB5g1vQqLBq6xYSXL-4uPH8,1722
47
- notionary/page/relations/page_database_relation.py,sha256=F9aGXFjjL8ZLNbfTGeGm_QAyXhz2AEOw7GgDLdprEcE,2313
48
- notionary/page/relations/relation_operation_result.py,sha256=NDxBzGntOxc_89ti-HG8xDSqfY6PwyGHKHrrKbCzNjM,5010
49
- notionary/util/logging_mixin.py,sha256=fKsx9t90bwvL74ZX3dU-sXdC4TZCQyO6qU9I8txkw_U,1369
50
- notionary/util/page_id_utils.py,sha256=EYNMxgf-7ghzL5K8lKZBZfW7g5CsdY0Xuj4IYmU8RPk,1381
51
- notionary/util/singleton_decorator.py,sha256=GTNMfIlVNRUVMw_c88xqd12-DcqZJjmyidN54yqiNVw,472
52
- notionary-0.1.13.dist-info/licenses/LICENSE,sha256=zOm3cRT1qD49eg7vgw95MI79rpUAZa1kRBFwL2FkAr8,1120
53
- notionary-0.1.13.dist-info/METADATA,sha256=oVy9WSKlRNiV1Hg_hnf8z4ZfZgo-bBl6qaF0S6zX0Z4,6154
54
- notionary-0.1.13.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
55
- notionary-0.1.13.dist-info/top_level.txt,sha256=fhONa6BMHQXqthx5PanWGbPL0b8rdFqhrJKVLf_adSs,10
56
- notionary-0.1.13.dist-info/RECORD,,