notionary 0.1.22__py3-none-any.whl → 0.1.24__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.
@@ -155,4 +155,5 @@ class CodeBlockElement(NotionBlockElement):
155
155
  '```json\n{"name": "Alice", "age": 30}\n```',
156
156
  "```mermaid\nflowchart TD\n A --> B\n```",
157
157
  ],
158
- }
158
+ "avoid": "NEVER EVER wrap markdown content with ```markdown. Markdown should be written directly without code block formatting. NEVER use ```markdown under any circumstances."
159
+ }
@@ -1,4 +1,4 @@
1
- from typing import TypedDict, List
1
+ from typing import NotRequired, TypedDict, List
2
2
 
3
3
 
4
4
  class ElementPromptContent(TypedDict):
@@ -18,3 +18,7 @@ class ElementPromptContent(TypedDict):
18
18
 
19
19
  when_to_use: str
20
20
  """Guidelines explaining the appropriate scenarios for using this element."""
21
+
22
+ avoid: NotRequired[str]
23
+ """Optional field listing scenarios when this element should be avoided."""
24
+
@@ -34,6 +34,11 @@ CRITICAL USAGE GUIDELINES:
34
34
 
35
35
  5. Always structure content with clear headings, lists, and paragraphs to create visually appealing
36
36
  and well-organized documents.
37
+
38
+ 6. CONTENT FORMATTING - CRITICAL:
39
+ ❌ DO NOT include introductory phrases like "I understand that..." or "Here's the content...".
40
+ ✅ Provide ONLY the requested content directly without any prefacing text or meta-commentary.
41
+ ✅ Generate just the content itself, formatted according to these guidelines.
37
42
  """
38
43
 
39
44
  @staticmethod
@@ -62,8 +67,10 @@ CRITICAL USAGE GUIDELINES:
62
67
  f"**Example:** {content['examples'][0]}" if content["examples"] else "",
63
68
  f"**When to use:** {content['when_to_use']}",
64
69
  ]
70
+
71
+ if "avoid" in content and content["avoid"]:
72
+ doc_parts.append(f"**Avoid:** {content['avoid']}")
65
73
 
66
- # Filter out any empty parts and join with newlines
67
74
  return "\n".join([part for part in doc_parts if part])
68
75
 
69
76
  @classmethod
@@ -46,7 +46,7 @@ class NotionClient(LoggingMixin):
46
46
  for instance in list(cls._instances):
47
47
  await instance.close()
48
48
 
49
- async def close(self): #
49
+ async def close(self):
50
50
  """
51
51
  Closes the HTTP client for this instance and releases resources.
52
52
  """
@@ -32,16 +32,21 @@ class PageContentManager(LoggingMixin):
32
32
  )
33
33
  self._chunker = NotionPageContentChunker()
34
34
 
35
- async def append_markdown(self, markdown_text: str) -> str:
35
+ async def append_markdown(self, markdown_text: str, append_divider: bool = False) -> str:
36
36
  """
37
37
  Append markdown text to a Notion page, automatically handling content length limits.
38
38
  First strips out triple backtick markdown fences if they wrap the entire content.
39
- """
40
- # Strip out triple backticks if they wrap the entire content
41
- markdown_text = self._strip_wrapping_backticks(markdown_text)
42
39
 
40
+ Args:
41
+ markdown_text: The markdown text to append
42
+ append_divider: If True, appends a divider after the markdown content (default: False)
43
+ """
43
44
  try:
44
45
  blocks = self._markdown_to_notion_converter.convert(markdown_text)
46
+
47
+ if append_divider:
48
+ divider_block = {"type": "divider", "divider": {}}
49
+ blocks.append(divider_block)
45
50
 
46
51
  fixed_blocks = self._chunker.fix_blocks_content_length(blocks)
47
52
 
@@ -175,26 +180,4 @@ class PageContentManager(LoggingMixin):
175
180
 
176
181
  async def get_text(self) -> str:
177
182
  blocks = await self.get_page_blocks_with_children()
178
- return self._notion_to_markdown_converter.convert(blocks)
179
-
180
- def _strip_wrapping_backticks(self, text: str) -> str:
181
- """
182
- Strip out triple backticks if they wrap the entire content.
183
- This prevents LLM-generated markdown fences from breaking the Notion import.
184
-
185
- Args:
186
- text: The markdown text that might be wrapped in backticks
187
-
188
- Returns:
189
- The text with wrapping backticks removed, if present
190
- """
191
- lines = text.strip().split('\n')
192
-
193
- if len(lines) >= 2:
194
- first_line = lines[0].strip()
195
- last_line = lines[-1].strip()
196
-
197
- if first_line.startswith('```') and last_line == '```':
198
- return '\n'.join(lines[1:-1])
199
-
200
- return text
183
+ return self._notion_to_markdown_converter.convert(blocks)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: notionary
3
- Version: 0.1.22
3
+ Version: 0.1.24
4
4
  Summary: A toolkit to convert between Markdown and Notion blocks
5
5
  Home-page: https://github.com/mathisarends/notionary
6
6
  Author: Mathis Arends
@@ -1,5 +1,5 @@
1
1
  notionary/__init__.py,sha256=ypCkbF1YEcwy5aE2kGFmtJOZq41Vs01lahJNqRO27fU,735
2
- notionary/notion_client.py,sha256=9oYhjY-OhFzACP-gHczDx1sif-YzmjFKX3CmluJBeIw,6038
2
+ notionary/notion_client.py,sha256=6YhaDK9UjH18Q0f1bxVVNGMbCvpQhatse6WRVIARGCE,6035
3
3
  notionary/database/database_discovery.py,sha256=qDGFhXG9s-_6CXdRg8tMiwX4dvX7jLjgAUFPSNlYtlI,4506
4
4
  notionary/database/database_info_service.py,sha256=Ig6gx8jUSPYORJvfgEV5kV6t72pZQsWU8HPMqd43B-o,1336
5
5
  notionary/database/notion_database.py,sha256=YCOuzrWfKRJvMiWdVfEt8i3NAEqpKDwHj5SX4GUraEk,8017
@@ -9,7 +9,7 @@ notionary/elements/audio_element.py,sha256=KuPA30Ii0Bv0WcAOOze_XBB98W0kMZSSWZ3An
9
9
  notionary/elements/bookmark_element.py,sha256=hnDpAQsNfN1nUORuxfsEyg6Tustck1wcfynNumlLSFI,7931
10
10
  notionary/elements/bulleted_list_element.py,sha256=-0_CeCfjHOkgYmK6m8Jl6uQasp8HepwSojCJKh5NhPo,2721
11
11
  notionary/elements/callout_element.py,sha256=GA5vIhepgy7tuf4o18LWroVwuVEP08Hc-8zuKHBQKGs,4037
12
- notionary/elements/code_block_element.py,sha256=A7XTTPVCTd-djdgtY89qYG67RcLNeC3554qKegO4l3g,5573
12
+ notionary/elements/code_block_element.py,sha256=-dbh97VNOjMLr4mZ_M1KLk79jEENOcWjh83mjYONOZQ,5760
13
13
  notionary/elements/column_element.py,sha256=v2O5lgewFeA9YE99XqhPxp6ujtHW1LfMKclPDERqbeU,10794
14
14
  notionary/elements/divider_element.py,sha256=FUYc2rn7cSyHbuOlQdECJWVfMYcyY5BPDaSCyXkIESs,1988
15
15
  notionary/elements/embed_element.py,sha256=i4DaDk-xvCxIV-D-OwcEy1lng_eac8U1jDfKOyMVSnY,4382
@@ -25,8 +25,8 @@ notionary/elements/text_inline_formatter.py,sha256=wvUdbDPoiVXcSZEMWy_1RAN2UcwwA
25
25
  notionary/elements/todo_lists.py,sha256=gyktOvG1tSQvta_SjDauowfP__woJ9ySUHzwMwlN7Cg,3914
26
26
  notionary/elements/toggle_element.py,sha256=UZvvOeVlayMCoXi5bvYTreMq9-3W4TrP6Gs2uUJ8qsE,8149
27
27
  notionary/elements/video_element.py,sha256=37KzUkbUrxXgIxbhrq0iDAR_Mr-q7b4FlLTn7IonoKg,5513
28
- notionary/elements/prompts/element_prompt_content.py,sha256=DL60MqTLKSaSIT0AoByArw-L__glCkSf9y08oSpTLaE,666
29
- notionary/elements/prompts/synthax_prompt_builder.py,sha256=6HcsigTShoGZclXjDfvruXDrjUCtU-8FokGO17JdMbw,4012
28
+ notionary/elements/prompts/element_prompt_content.py,sha256=jAI-F_dYJrl9Xo5PKQVYpm7rnV54giqSo_9emiCwgT4,797
29
+ notionary/elements/prompts/synthax_prompt_builder.py,sha256=uXvuXJSwyEid8PAEKfK82ulZbLsKHAmI8h7IKAT5L-o,4397
30
30
  notionary/elements/registry/block_element_registry.py,sha256=-SZSOz0ZBkToII948KtOge4bYQ0vhKG8ywHyCz7y8Mo,3574
31
31
  notionary/elements/registry/block_element_registry_builder.py,sha256=N5SqUqSxDoNDxg4iOwCu9KsfTYj_KD0832oNpwS-pSw,9042
32
32
  notionary/exceptions/database_exceptions.py,sha256=I-Tx6bYRLpi5pjGPtbT-Mqxvz3BFgYTiuZxknJeLxtI,2638
@@ -36,7 +36,7 @@ notionary/page/notion_page.py,sha256=pJSy-vWFqQdCqmtFifL9AdUZpWoM0DzfblRBBBUTsTI
36
36
  notionary/page/notion_page_factory.py,sha256=UUEZ-cyEWL0OMVPrgjc4vJdcplEa1bO2yHCYooACYC8,8189
37
37
  notionary/page/notion_to_markdown_converter.py,sha256=qZIeZjDpeGFgW5RGTrcfi0mVI6NT0VvXeHM7jpP6ZHo,8067
38
38
  notionary/page/content/notion_page_content_chunker.py,sha256=xRks74Dqec-De6-AVTxMPnXs-MSJBzSm1HfJfaHiKr8,3330
39
- notionary/page/content/page_content_manager.py,sha256=wMWE-y28txVU8F1nyHFwvz2kVQZ88aJnZfeZkqlSl7M,7132
39
+ notionary/page/content/page_content_manager.py,sha256=qZqd9xMrpatxgIjw-DK0XSr7adXKzPZpF-bPRO4LQy4,6586
40
40
  notionary/page/metadata/metadata_editor.py,sha256=61uiw8oB25O8ePhytoJvZDetuof5sjPoM6aoHZGo4wc,4949
41
41
  notionary/page/metadata/notion_icon_manager.py,sha256=ixZrWsHGVpmF05Ncy9LCt8vZlKAQHYFZW-2yI5JZZDI,1426
42
42
  notionary/page/metadata/notion_page_cover_manager.py,sha256=qgQxQE-bx4oWjLFUQvpXD5GzO1Mx7w7htz1xC2BOqUg,1717
@@ -51,8 +51,8 @@ notionary/page/relations/page_database_relation.py,sha256=F9aGXFjjL8ZLNbfTGeGm_Q
51
51
  notionary/page/relations/relation_operation_result.py,sha256=NDxBzGntOxc_89ti-HG8xDSqfY6PwyGHKHrrKbCzNjM,5010
52
52
  notionary/util/logging_mixin.py,sha256=fKsx9t90bwvL74ZX3dU-sXdC4TZCQyO6qU9I8txkw_U,1369
53
53
  notionary/util/page_id_utils.py,sha256=EYNMxgf-7ghzL5K8lKZBZfW7g5CsdY0Xuj4IYmU8RPk,1381
54
- notionary-0.1.22.dist-info/licenses/LICENSE,sha256=zOm3cRT1qD49eg7vgw95MI79rpUAZa1kRBFwL2FkAr8,1120
55
- notionary-0.1.22.dist-info/METADATA,sha256=Rw8x6s2AjB4gpC9bPCXMerdZ9PSeLOj1p3cf83A_ZcI,8342
56
- notionary-0.1.22.dist-info/WHEEL,sha256=SmOxYU7pzNKBqASvQJ7DjX3XGUF92lrGhMb3R6_iiqI,91
57
- notionary-0.1.22.dist-info/top_level.txt,sha256=fhONa6BMHQXqthx5PanWGbPL0b8rdFqhrJKVLf_adSs,10
58
- notionary-0.1.22.dist-info/RECORD,,
54
+ notionary-0.1.24.dist-info/licenses/LICENSE,sha256=zOm3cRT1qD49eg7vgw95MI79rpUAZa1kRBFwL2FkAr8,1120
55
+ notionary-0.1.24.dist-info/METADATA,sha256=tmm7v4gJBKvISXtf4aZcEkirizEGlBtZYxfZOwUKnOk,8342
56
+ notionary-0.1.24.dist-info/WHEEL,sha256=SmOxYU7pzNKBqASvQJ7DjX3XGUF92lrGhMb3R6_iiqI,91
57
+ notionary-0.1.24.dist-info/top_level.txt,sha256=fhONa6BMHQXqthx5PanWGbPL0b8rdFqhrJKVLf_adSs,10
58
+ notionary-0.1.24.dist-info/RECORD,,