notionary 0.2.19__py3-none-any.whl → 0.2.21__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.
- notionary/__init__.py +8 -4
- notionary/base_notion_client.py +3 -1
- notionary/blocks/__init__.py +2 -91
- notionary/blocks/_bootstrap.py +263 -0
- notionary/blocks/audio/__init__.py +8 -2
- notionary/blocks/audio/audio_element.py +42 -104
- notionary/blocks/audio/audio_markdown_node.py +3 -1
- notionary/blocks/audio/audio_models.py +6 -55
- notionary/blocks/base_block_element.py +30 -0
- notionary/blocks/bookmark/__init__.py +9 -2
- notionary/blocks/bookmark/bookmark_element.py +46 -139
- notionary/blocks/bookmark/bookmark_markdown_node.py +3 -1
- notionary/blocks/bookmark/bookmark_models.py +15 -0
- notionary/blocks/breadcrumbs/__init__.py +17 -0
- notionary/blocks/breadcrumbs/breadcrumb_element.py +39 -0
- notionary/blocks/breadcrumbs/breadcrumb_markdown_node.py +32 -0
- notionary/blocks/breadcrumbs/breadcrumb_models.py +12 -0
- notionary/blocks/bulleted_list/__init__.py +12 -2
- notionary/blocks/bulleted_list/bulleted_list_element.py +40 -55
- notionary/blocks/bulleted_list/bulleted_list_markdown_node.py +2 -1
- notionary/blocks/bulleted_list/bulleted_list_models.py +18 -0
- notionary/blocks/callout/__init__.py +9 -2
- notionary/blocks/callout/callout_element.py +40 -89
- notionary/blocks/callout/callout_markdown_node.py +3 -1
- notionary/blocks/callout/callout_models.py +33 -0
- notionary/blocks/child_database/__init__.py +7 -0
- notionary/blocks/child_database/child_database_models.py +19 -0
- notionary/blocks/child_page/__init__.py +9 -0
- notionary/blocks/child_page/child_page_models.py +12 -0
- notionary/blocks/{shared/block_client.py → client.py} +55 -54
- notionary/blocks/code/__init__.py +6 -2
- notionary/blocks/code/code_element.py +53 -187
- notionary/blocks/code/code_markdown_node.py +13 -13
- notionary/blocks/code/code_models.py +94 -0
- notionary/blocks/column/__init__.py +25 -1
- notionary/blocks/column/column_element.py +40 -314
- notionary/blocks/column/column_list_element.py +37 -0
- notionary/blocks/column/column_list_markdown_node.py +50 -0
- notionary/blocks/column/column_markdown_node.py +59 -0
- notionary/blocks/column/column_models.py +26 -0
- notionary/blocks/divider/__init__.py +9 -2
- notionary/blocks/divider/divider_element.py +26 -49
- notionary/blocks/divider/divider_markdown_node.py +2 -1
- notionary/blocks/divider/divider_models.py +12 -0
- notionary/blocks/embed/__init__.py +9 -2
- notionary/blocks/embed/embed_element.py +47 -114
- notionary/blocks/embed/embed_markdown_node.py +3 -1
- notionary/blocks/embed/embed_models.py +14 -0
- notionary/blocks/equation/__init__.py +14 -0
- notionary/blocks/equation/equation_element.py +80 -0
- notionary/blocks/equation/equation_element_markdown_node.py +36 -0
- notionary/blocks/equation/equation_models.py +11 -0
- notionary/blocks/file/__init__.py +25 -0
- notionary/blocks/file/file_element.py +93 -0
- notionary/blocks/file/file_element_markdown_node.py +35 -0
- notionary/blocks/file/file_element_models.py +39 -0
- notionary/blocks/heading/__init__.py +16 -2
- notionary/blocks/heading/heading_element.py +67 -72
- notionary/blocks/heading/heading_markdown_node.py +2 -1
- notionary/blocks/heading/heading_models.py +29 -0
- notionary/blocks/image_block/__init__.py +13 -0
- notionary/blocks/image_block/image_element.py +84 -0
- notionary/blocks/{image → image_block}/image_markdown_node.py +3 -1
- notionary/blocks/image_block/image_models.py +10 -0
- notionary/blocks/models.py +172 -0
- notionary/blocks/numbered_list/__init__.py +12 -2
- notionary/blocks/numbered_list/numbered_list_element.py +33 -58
- notionary/blocks/numbered_list/numbered_list_markdown_node.py +3 -1
- notionary/blocks/numbered_list/numbered_list_models.py +17 -0
- notionary/blocks/paragraph/__init__.py +12 -2
- notionary/blocks/paragraph/paragraph_element.py +27 -69
- notionary/blocks/paragraph/paragraph_markdown_node.py +2 -1
- notionary/blocks/paragraph/paragraph_models.py +16 -0
- notionary/blocks/pdf/__init__.py +13 -0
- notionary/blocks/pdf/pdf_element.py +91 -0
- notionary/blocks/pdf/pdf_markdown_node.py +35 -0
- notionary/blocks/pdf/pdf_models.py +11 -0
- notionary/blocks/quote/__init__.py +11 -2
- notionary/blocks/quote/quote_element.py +31 -65
- notionary/blocks/quote/quote_markdown_node.py +4 -1
- notionary/blocks/quote/quote_models.py +18 -0
- notionary/blocks/registry/__init__.py +4 -0
- notionary/blocks/registry/block_registry.py +75 -91
- notionary/blocks/registry/block_registry_builder.py +107 -59
- notionary/blocks/rich_text/__init__.py +33 -0
- notionary/blocks/rich_text/rich_text_models.py +188 -0
- notionary/blocks/rich_text/text_inline_formatter.py +125 -0
- notionary/blocks/table/__init__.py +16 -2
- notionary/blocks/table/table_element.py +48 -241
- notionary/blocks/table/table_markdown_node.py +2 -1
- notionary/blocks/table/table_models.py +28 -0
- notionary/blocks/table_of_contents/__init__.py +19 -0
- notionary/blocks/table_of_contents/table_of_contents_element.py +51 -0
- notionary/blocks/table_of_contents/table_of_contents_markdown_node.py +35 -0
- notionary/blocks/table_of_contents/table_of_contents_models.py +18 -0
- notionary/blocks/todo/__init__.py +9 -2
- notionary/blocks/todo/todo_element.py +38 -95
- notionary/blocks/todo/todo_markdown_node.py +2 -1
- notionary/blocks/todo/todo_models.py +19 -0
- notionary/blocks/toggle/__init__.py +13 -3
- notionary/blocks/toggle/toggle_element.py +57 -264
- notionary/blocks/toggle/toggle_markdown_node.py +24 -14
- notionary/blocks/toggle/toggle_models.py +17 -0
- notionary/blocks/toggleable_heading/__init__.py +6 -2
- notionary/blocks/toggleable_heading/toggleable_heading_element.py +74 -244
- notionary/blocks/toggleable_heading/toggleable_heading_markdown_node.py +26 -18
- notionary/blocks/types.py +61 -0
- notionary/blocks/video/__init__.py +8 -2
- notionary/blocks/video/video_element.py +67 -143
- notionary/blocks/video/video_element_models.py +10 -0
- notionary/blocks/video/video_markdown_node.py +3 -1
- notionary/database/client.py +3 -8
- notionary/database/database.py +13 -14
- notionary/database/database_filter_builder.py +2 -2
- notionary/database/database_provider.py +5 -4
- notionary/database/models.py +337 -0
- notionary/database/notion_database.py +6 -7
- notionary/file_upload/client.py +5 -7
- notionary/file_upload/models.py +2 -1
- notionary/file_upload/notion_file_upload.py +2 -3
- notionary/markdown/markdown_builder.py +722 -0
- notionary/markdown/markdown_document_model.py +228 -0
- notionary/{blocks → markdown}/markdown_node.py +1 -0
- notionary/models/notion_database_response.py +0 -338
- notionary/page/client.py +9 -10
- notionary/page/models.py +327 -0
- notionary/page/notion_page.py +99 -52
- notionary/page/notion_text_length_utils.py +119 -0
- notionary/page/{content/page_content_writer.py → page_content_writer.py} +88 -38
- notionary/page/reader/handler/__init__.py +17 -0
- notionary/page/reader/handler/base_block_renderer.py +44 -0
- notionary/page/reader/handler/block_processing_context.py +35 -0
- notionary/page/reader/handler/block_rendering_context.py +43 -0
- notionary/page/reader/handler/column_list_renderer.py +51 -0
- notionary/page/reader/handler/column_renderer.py +60 -0
- notionary/page/reader/handler/line_renderer.py +60 -0
- notionary/page/reader/handler/toggle_renderer.py +69 -0
- notionary/page/reader/handler/toggleable_heading_renderer.py +89 -0
- notionary/page/reader/page_content_retriever.py +69 -0
- notionary/page/search_filter_builder.py +2 -1
- notionary/page/writer/handler/__init__.py +22 -0
- notionary/page/writer/handler/code_handler.py +100 -0
- notionary/page/writer/handler/column_handler.py +141 -0
- notionary/page/writer/handler/column_list_handler.py +139 -0
- notionary/page/writer/handler/line_handler.py +35 -0
- notionary/page/writer/handler/line_processing_context.py +54 -0
- notionary/page/writer/handler/regular_line_handler.py +92 -0
- notionary/page/writer/handler/table_handler.py +130 -0
- notionary/page/writer/handler/toggle_handler.py +153 -0
- notionary/page/writer/handler/toggleable_heading_handler.py +167 -0
- notionary/page/writer/markdown_to_notion_converter.py +76 -0
- notionary/telemetry/__init__.py +2 -2
- notionary/telemetry/service.py +4 -3
- notionary/user/__init__.py +2 -2
- notionary/user/base_notion_user.py +2 -1
- notionary/user/client.py +2 -3
- notionary/user/models.py +1 -0
- notionary/user/notion_bot_user.py +4 -5
- notionary/user/notion_user.py +3 -4
- notionary/user/notion_user_manager.py +3 -2
- notionary/user/notion_user_provider.py +1 -1
- notionary/util/__init__.py +3 -2
- notionary/util/fuzzy.py +2 -1
- notionary/util/logging_mixin.py +2 -2
- notionary/util/singleton_metaclass.py +1 -1
- notionary/workspace.py +3 -2
- {notionary-0.2.19.dist-info → notionary-0.2.21.dist-info}/METADATA +12 -8
- notionary-0.2.21.dist-info/RECORD +185 -0
- notionary/blocks/document/__init__.py +0 -7
- notionary/blocks/document/document_element.py +0 -102
- notionary/blocks/document/document_markdown_node.py +0 -31
- notionary/blocks/image/__init__.py +0 -7
- notionary/blocks/image/image_element.py +0 -151
- notionary/blocks/markdown_builder.py +0 -356
- notionary/blocks/mention/__init__.py +0 -7
- notionary/blocks/mention/mention_element.py +0 -229
- notionary/blocks/mention/mention_markdown_node.py +0 -38
- notionary/blocks/prompts/element_prompt_builder.py +0 -83
- notionary/blocks/prompts/element_prompt_content.py +0 -41
- notionary/blocks/shared/__init__.py +0 -0
- notionary/blocks/shared/models.py +0 -713
- notionary/blocks/shared/notion_block_element.py +0 -37
- notionary/blocks/shared/text_inline_formatter.py +0 -262
- notionary/blocks/shared/text_inline_formatter_new.py +0 -139
- notionary/blocks/toggleable_heading/toggleable_heading_models.py +0 -0
- notionary/database/models/page_result.py +0 -10
- notionary/elements/__init__.py +0 -0
- notionary/models/notion_block_response.py +0 -264
- notionary/models/notion_page_response.py +0 -78
- notionary/models/search_response.py +0 -0
- notionary/page/__init__.py +0 -0
- notionary/page/content/notion_text_length_utils.py +0 -87
- notionary/page/content/page_content_retriever.py +0 -60
- notionary/page/formatting/line_processor.py +0 -153
- notionary/page/formatting/markdown_to_notion_converter.py +0 -153
- notionary/page/markdown_syntax_prompt_generator.py +0 -114
- notionary/page/notion_to_markdown_converter.py +0 -179
- notionary/page/properites/property_value_extractor.py +0 -0
- notionary-0.2.19.dist-info/RECORD +0 -150
- /notionary/{blocks/document/document_models.py → markdown/___init__.py} +0 -0
- /notionary/{blocks/image/image_models.py → markdown/makdown_document_model.py} +0 -0
- /notionary/page/{content/markdown_whitespace_processor.py → markdown_whitespace_processor.py} +0 -0
- /notionary/{blocks/mention/mention_models.py → page/reader/handler/context.py} +0 -0
- {notionary-0.2.19.dist-info → notionary-0.2.21.dist-info}/LICENSE +0 -0
- {notionary-0.2.19.dist-info → notionary-0.2.21.dist-info}/WHEEL +0 -0
notionary/user/models.py
CHANGED
@@ -1,11 +1,10 @@
|
|
1
1
|
from __future__ import annotations
|
2
|
-
|
2
|
+
|
3
|
+
from typing import List, Optional
|
4
|
+
|
3
5
|
from notionary.user.base_notion_user import BaseNotionUser
|
4
6
|
from notionary.user.client import NotionUserClient
|
5
|
-
from notionary.user.models import
|
6
|
-
NotionBotUserResponse,
|
7
|
-
WorkspaceLimits,
|
8
|
-
)
|
7
|
+
from notionary.user.models import NotionBotUserResponse, WorkspaceLimits
|
9
8
|
from notionary.util import factory_only
|
10
9
|
from notionary.util.fuzzy import find_best_match
|
11
10
|
|
notionary/user/notion_user.py
CHANGED
@@ -1,11 +1,10 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
|
-
from typing import
|
3
|
+
from typing import List, Optional
|
4
|
+
|
4
5
|
from notionary.user.base_notion_user import BaseNotionUser
|
5
6
|
from notionary.user.client import NotionUserClient
|
6
|
-
from notionary.user.models import
|
7
|
-
NotionUserResponse,
|
8
|
-
)
|
7
|
+
from notionary.user.models import NotionUserResponse
|
9
8
|
from notionary.util import factory_only
|
10
9
|
from notionary.util.fuzzy import find_best_matches
|
11
10
|
|
@@ -1,7 +1,8 @@
|
|
1
|
-
from typing import Any, Dict,
|
1
|
+
from typing import Any, Dict, List, Optional
|
2
|
+
|
2
3
|
from notionary.user.client import NotionUserClient
|
3
|
-
from notionary.user.notion_user import NotionUser
|
4
4
|
from notionary.user.models import NotionUsersListResponse
|
5
|
+
from notionary.user.notion_user import NotionUser
|
5
6
|
from notionary.util import LoggingMixin
|
6
7
|
|
7
8
|
|
@@ -1 +1 @@
|
|
1
|
-
# for caching shit
|
1
|
+
# for caching shit
|
notionary/util/__init__.py
CHANGED
@@ -1,13 +1,14 @@
|
|
1
|
+
from .factory_only import factory_only
|
1
2
|
from .logging_mixin import LoggingMixin
|
3
|
+
from .page_id_utils import extract_uuid, format_uuid
|
2
4
|
from .singleton import singleton
|
3
|
-
from .page_id_utils import format_uuid
|
4
|
-
from .factory_only import factory_only
|
5
5
|
from .singleton_metaclass import SingletonMetaClass
|
6
6
|
|
7
7
|
__all__ = [
|
8
8
|
"LoggingMixin",
|
9
9
|
"singleton",
|
10
10
|
"format_uuid",
|
11
|
+
"extract_uuid",
|
11
12
|
"factory_only",
|
12
13
|
"singleton",
|
13
14
|
"SingletonMetaClass",
|
notionary/util/fuzzy.py
CHANGED
notionary/util/logging_mixin.py
CHANGED
notionary/workspace.py
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
import asyncio
|
2
|
-
from typing import
|
3
|
-
|
2
|
+
from typing import List, Optional
|
3
|
+
|
4
|
+
from notionary import NotionDatabase, NotionPage
|
4
5
|
from notionary.database.client import NotionDatabaseClient
|
5
6
|
from notionary.page.client import NotionPageClient
|
6
7
|
from notionary.user import NotionUser, NotionUserManager
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: notionary
|
3
|
-
Version: 0.2.
|
3
|
+
Version: 0.2.21
|
4
4
|
Summary: Python library for programmatic Notion workspace management - databases, pages, and content with advanced Markdown support
|
5
5
|
License: MIT
|
6
6
|
Author: Mathis Arends
|
@@ -15,6 +15,7 @@ Classifier: Programming Language :: Python :: 3.12
|
|
15
15
|
Classifier: Programming Language :: Python :: 3.13
|
16
16
|
Requires-Dist: aiofiles (>=24.1.0,<25.0.0)
|
17
17
|
Requires-Dist: httpx (>=0.28.0)
|
18
|
+
Requires-Dist: isort (>=6.0.1,<7.0.0)
|
18
19
|
Requires-Dist: posthog (>=6.3.1,<7.0.0)
|
19
20
|
Requires-Dist: pydantic (>=2.11.4)
|
20
21
|
Requires-Dist: python-dotenv (>=1.1.0)
|
@@ -36,11 +37,11 @@ Description-Content-Type: text/markdown
|
|
36
37
|
- **Rich Markdown to Notion**: Convert extended Markdown (callouts, toggles, columns) directly into beautiful Notion blocks
|
37
38
|
- **Smart Discovery**: Find pages and databases by name with fuzzy matching - no more hunting for URLs
|
38
39
|
- **Async-First Architecture**: Built for modern Python with full async/await support and high performance
|
39
|
-
- **AI-Ready Integration**: Generate LLM system prompts and let AI agents create Notion content seamlessly
|
40
40
|
|
41
41
|
---
|
42
42
|
|
43
43
|
# Quick start
|
44
|
+
|
44
45
|
```bash
|
45
46
|
pip install notionary
|
46
47
|
```
|
@@ -53,29 +54,30 @@ NOTION_SECRET=YOUR_INTEGRATION_KEY
|
|
53
54
|
```
|
54
55
|
|
55
56
|
### Creating and Managing Pages 🚀
|
57
|
+
|
56
58
|
```python
|
57
59
|
from notionary import NotionPage
|
58
60
|
|
59
61
|
async def main():
|
60
62
|
# Simpy find an existing page by its title
|
61
63
|
page = await NotionPage.from_page_name("My Test Page")
|
62
|
-
|
64
|
+
|
63
65
|
# Add rich content with custom Markdown
|
64
66
|
content = """
|
65
67
|
# 🚀 Generated with Notionary
|
66
|
-
|
68
|
+
|
67
69
|
!> [💡] This page was created programmatically!
|
68
|
-
|
70
|
+
|
69
71
|
## Features
|
70
72
|
- **Rich** Markdown support
|
71
73
|
- Database integration
|
72
74
|
- AI-ready content generation
|
73
|
-
|
75
|
+
|
74
76
|
+++ Click to see more details
|
75
77
|
| Notionary makes it easy to create beautiful Notion pages
|
76
78
|
| directly from Python code with intuitive Markdown syntax.
|
77
79
|
"""
|
78
|
-
|
80
|
+
|
79
81
|
await page.replace_content(content)
|
80
82
|
print(f"✅ Page updated: {page.url}")
|
81
83
|
|
@@ -99,7 +101,7 @@ async def main():
|
|
99
101
|
await page.set_title("🆕 New Project Entry")
|
100
102
|
await page.set_property_value_by_name("Status", "In Progress")
|
101
103
|
await page.set_property_value_by_name("Priority", "High")
|
102
|
-
|
104
|
+
|
103
105
|
# find pages created in the last 7 days
|
104
106
|
count = 0
|
105
107
|
async for page in db.iter_pages_with_filter(
|
@@ -201,6 +203,7 @@ def hello_world():
|
|
201
203
|
Explore the `examples/` directory for comprehensive guides:
|
202
204
|
|
203
205
|
### 🚀 Core Examples
|
206
|
+
|
204
207
|
- [**Page Management**](examples/page_example.py) - Create, update, and manage Notion pages
|
205
208
|
- [**Page Operations**](examples/page.py) - Advanced page manipulation and content handling
|
206
209
|
- [**Database Operations**](examples/database.py) - Connect to and manage Notion databases
|
@@ -208,6 +211,7 @@ Explore the `examples/` directory for comprehensive guides:
|
|
208
211
|
- [**Workspace Discovery**](examples/workspace_discovery.py) - Explore and discover your Notion workspace
|
209
212
|
|
210
213
|
### 📝 Markdown Examples
|
214
|
+
|
211
215
|
- [**Basic Formatting**](examples/markdown/basic.py) - Text formatting, lists, and basic elements
|
212
216
|
- [**Callouts**](examples/markdown/callout.py) - Create beautiful callout blocks with icons
|
213
217
|
- [**Toggles**](examples/markdown/toggle.py) - Collapsible content sections
|
@@ -0,0 +1,185 @@
|
|
1
|
+
notionary/__init__.py,sha256=u6I31uJ8E_lqg17QIzylzz-mnvnLc4hmVuBGvnDwFgI,607
|
2
|
+
notionary/base_notion_client.py,sha256=EKExy91oeVHdknK-XU2IkKB6SJgN96ZfbblRK05wnV4,7071
|
3
|
+
notionary/blocks/__init__.py,sha256=CGaDCEmUepqnjkcm7X1OKdxAhtbcIZAu3fxJeySyu6o,76
|
4
|
+
notionary/blocks/_bootstrap.py,sha256=8leYmTKgbOSouqJFRnEQAhEjCT-fmeb7LZvFCBcjdEY,9199
|
5
|
+
notionary/blocks/audio/__init__.py,sha256=3158rsK4MIO_vBQV0kfZWIOKd5Cout72bdJljP-f7KM,368
|
6
|
+
notionary/blocks/audio/audio_element.py,sha256=6VrAMbdgZNB7pQ7YSseK0s4cMGfsMWSb8HffFJF5ouA,3260
|
7
|
+
notionary/blocks/audio/audio_markdown_node.py,sha256=CD2OXFh1p4ZfA6aq8HM4f_uh9AcIISKxyRSKcgm0P9Y,837
|
8
|
+
notionary/blocks/audio/audio_models.py,sha256=ts281Wgjh0FQBK4a6IKKNGPcG0U18T1euCgo83-JSg4,229
|
9
|
+
notionary/blocks/base_block_element.py,sha256=WXQIf6StrD5EcS6wtlaZ03fJTWQ-07qH9qPsqzwsvHU,1009
|
10
|
+
notionary/blocks/bookmark/__init__.py,sha256=ofLnuXlG-y0C3ex-noLA92iXUFjiej5CyrxVXG_1db4,447
|
11
|
+
notionary/blocks/bookmark/bookmark_element.py,sha256=iDMFKv_lzHStuVwWe5Hpmjw5AWwkFW3fyC2_a4_QZNo,2684
|
12
|
+
notionary/blocks/bookmark/bookmark_markdown_node.py,sha256=p0JcXtH7PA09JpkhxKsOb3ajwsypHMk_2sh0WahN52M,1446
|
13
|
+
notionary/blocks/bookmark/bookmark_models.py,sha256=kJTitF93xd0YITvP_FuwpjnBUNLeDMr7fDAXV8MAJrk,375
|
14
|
+
notionary/blocks/breadcrumbs/__init__.py,sha256=vw7--1u5TAcX4l3J0eu98HbxG6wxsnPrkt7YouT_ESA,498
|
15
|
+
notionary/blocks/breadcrumbs/breadcrumb_element.py,sha256=NGS5AgXs4mFCWDDrKyXPKPpEo1F0_bTaP2AYzPSkmDU,1256
|
16
|
+
notionary/blocks/breadcrumbs/breadcrumb_markdown_node.py,sha256=tbcQOzMHx-dQGa5UAE2jowzPM_wItsb76bCGU4YIKw4,745
|
17
|
+
notionary/blocks/breadcrumbs/breadcrumb_models.py,sha256=-XGIIMYiQuGe5iXmW-1Y9Y9Yca0w6u3HbiD1SBue8sI,237
|
18
|
+
notionary/blocks/bulleted_list/__init__.py,sha256=2EvFm2h-X6KUHGQhQiOYBqh-DvZbL0qT453eokd8eyw,549
|
19
|
+
notionary/blocks/bulleted_list/bulleted_list_element.py,sha256=ctNT9GrYjkPBc5sS7HUssOAKMrfj1Pi4fG7bNrYJwCI,2195
|
20
|
+
notionary/blocks/bulleted_list/bulleted_list_markdown_node.py,sha256=1MmGbQAbkeV3vwPlqC4ItcR-Abw8JymYWyGLEV2-HfI,827
|
21
|
+
notionary/blocks/bulleted_list/bulleted_list_models.py,sha256=2rOHv8KIfTcx0z4JtK968BnLc4lkCrF8So-e5QL_FEY,561
|
22
|
+
notionary/blocks/callout/__init__.py,sha256=iDLuJ4szAOY4tCL0NK_bqCzlTC109o51c1cGgDoruZg,431
|
23
|
+
notionary/blocks/callout/callout_element.py,sha256=0U05Y1xPiBJQAs8sUoZD157-nHZEqSdkQ6eEDF5H6O0,2616
|
24
|
+
notionary/blocks/callout/callout_markdown_node.py,sha256=TMd2wQ0BfoQ0mgHSy5MrqCvpJvovSw7zsLrXnRrJoQs,948
|
25
|
+
notionary/blocks/callout/callout_models.py,sha256=KabWhRCkW1KmTGqt23QTc5iCeVczIzRHIVevEagcKE0,860
|
26
|
+
notionary/blocks/child_database/__init__.py,sha256=1o23CkXjJVsjZPuypTKUIPmHPrrJMq9XPlRSbjmoUMo,160
|
27
|
+
notionary/blocks/child_database/child_database_models.py,sha256=VWPswKdegbypqa--gUxnxrLRVJO5oYZEEEzv1f--YM4,699
|
28
|
+
notionary/blocks/child_page/__init__.py,sha256=qaHvJqF8Bfzj0NVE1Q5uN_4o3Jl4RuNYspMZ6E7bUuk,182
|
29
|
+
notionary/blocks/child_page/child_page_models.py,sha256=LZhziu2nf-8FopcaQi6dJKOJ3lgY6Pc2S-ace6jPeqQ,240
|
30
|
+
notionary/blocks/client.py,sha256=mP9wrmMJYBTq9Fr-A5JAscK-TSMFUAbGi-rs-EEWH7o,8761
|
31
|
+
notionary/blocks/code/__init__.py,sha256=8mTDHndNb4kzDByETe2gG7-YHMrt18cf_gmV60JXHOc,345
|
32
|
+
notionary/blocks/code/code_element.py,sha256=88qshoRdtTScg1FbCuxKngNMFp07cklmJo_K-PuqDIE,3535
|
33
|
+
notionary/blocks/code/code_markdown_node.py,sha256=oLG5pPJOLvCA4BseGCPRNn94U9R9Adcc5k-7Z02XyaI,1189
|
34
|
+
notionary/blocks/code/code_models.py,sha256=hK-Ka9whQO-xWASr0sbhRcz-FUc5VY5Pjqa8LPW041o,2178
|
35
|
+
notionary/blocks/column/__init__.py,sha256=KFza6GKRjVa59ktp0euAVSq1oblK_KXSqAfrOIiT9ps,838
|
36
|
+
notionary/blocks/column/column_element.py,sha256=KgmY0oPXvoAcyPheo6k3AelexgDjq4RbMCu13zz1eNk,2004
|
37
|
+
notionary/blocks/column/column_list_element.py,sha256=LHa1UeczJjAQRYoru1X-HHi9yREsLDfAV6_BkQs4-Mo,1350
|
38
|
+
notionary/blocks/column/column_list_markdown_node.py,sha256=RXwPz-d-vfAb39HZapaXiomuY8eKkUuBBEm7rPyLHl0,1396
|
39
|
+
notionary/blocks/column/column_markdown_node.py,sha256=Nc7QReXOWZ0CIuUpgE9dhME4bINo18P1luC6bL0bpPA,1632
|
40
|
+
notionary/blocks/column/column_models.py,sha256=Dv1jBWmuFjjSqyOajkh05jmxEwxF9b-LuDA4Sgw8RJI,664
|
41
|
+
notionary/blocks/divider/__init__.py,sha256=GX3D_Oksg65Dam4lRGdrOGWuZec35ghuYuvF9HDt_y8,431
|
42
|
+
notionary/blocks/divider/divider_element.py,sha256=Ms9c5a2CbbttyPF8nkU-Qc_xo7BPtxaXAlAUJyzRjpM,1628
|
43
|
+
notionary/blocks/divider/divider_markdown_node.py,sha256=XMa4txNnzeJPheNKke4poD5t36DE0Fqj963-QZ3gh8M,583
|
44
|
+
notionary/blocks/divider/divider_models.py,sha256=A7jUBYZnE_yRLTZi-sr9sbDCrWNhAdriFNzCpDEBwGU,219
|
45
|
+
notionary/blocks/embed/__init__.py,sha256=EgWphqJaJdt3CMjILKEjVexDSTz1KU0NE2rMDNZaCQ0,399
|
46
|
+
notionary/blocks/embed/embed_element.py,sha256=PeN2kMmSuFiR0oy6KvrGV71FHwj-ADNWrMWnKwshHWk,2444
|
47
|
+
notionary/blocks/embed/embed_markdown_node.py,sha256=8pcLAT4Il1e50wIdCSL11Leq6fnGLOlwNAuKTFY-i98,908
|
48
|
+
notionary/blocks/embed/embed_models.py,sha256=utXtHlIIK5QA24ZJW7l0XfDtrt12DureH1DugOi9mNw,366
|
49
|
+
notionary/blocks/equation/__init__.py,sha256=XP4BgCG-CFXoNI9oUBofg7j2ygZasqdJWhVbJG98kyc,455
|
50
|
+
notionary/blocks/equation/equation_element.py,sha256=K5_R0KdUN7av--RA2c89zgfMVRP3BVCxfOGqwkawA4Q,2897
|
51
|
+
notionary/blocks/equation/equation_element_markdown_node.py,sha256=BugLq7fK1-9Zmf7_IxmXV7q45dANgGyRYBiRoRExnMs,1016
|
52
|
+
notionary/blocks/equation/equation_models.py,sha256=WIpnqHmwh2rpNTVvt6eFNzkhHejW8XMWDQbwtLIcxKw,245
|
53
|
+
notionary/blocks/file/__init__.py,sha256=kYPp8iJ-EDWi1BX5E-OkgV_QacQ8ysKn__whyXXEWIw,577
|
54
|
+
notionary/blocks/file/file_element.py,sha256=OBajaxutM2KdGKkcsmOJ-TcrI15EAquYF-55v5V6Sco,3034
|
55
|
+
notionary/blocks/file/file_element_markdown_node.py,sha256=BIqBANFC7aUh2IXRRL0uNYc7B7l2rzzkv9RXTJT-iZ8,1023
|
56
|
+
notionary/blocks/file/file_element_models.py,sha256=1eia1-OamnF52AUYtC3Ru-xi6HHsnjw9hcuslkHKXuI,850
|
57
|
+
notionary/blocks/heading/__init__.py,sha256=dg2hCVsqWv84hvtb6HAb4m1i8b0jyLXokPIYwe5NwZ8,557
|
58
|
+
notionary/blocks/heading/heading_element.py,sha256=H0xZTgTEFti9_QtvEkAsOKlwb1ww9qXd22n75XOZ12E,2959
|
59
|
+
notionary/blocks/heading/heading_markdown_node.py,sha256=I8_9fg_CsZ-iTMA6PV6V8DBxwa5BDcMfF6NS70iKCbo,881
|
60
|
+
notionary/blocks/heading/heading_models.py,sha256=nOEnb66tYt_653PIt-AqjGaOgefFOK6hKG09epCKSSc,794
|
61
|
+
notionary/blocks/image_block/__init__.py,sha256=ACOCt1hVFzGm_l9Vb0GVATN7PZNBg7jFp1FymrAi8lw,386
|
62
|
+
notionary/blocks/image_block/image_element.py,sha256=_O4s3w111lao-HvwvESHW6JwU-awHoPFPVUUEEhIFRo,2845
|
63
|
+
notionary/blocks/image_block/image_markdown_node.py,sha256=Ete7CPa29WTqF-dmKNs8ftvrVMDS4SO_94dbP-UPzmI,1035
|
64
|
+
notionary/blocks/image_block/image_models.py,sha256=vmuGwgq3uP9ojb-6IOdjsEqIKI-9uTa5_0BCMkzJV_A,229
|
65
|
+
notionary/blocks/models.py,sha256=_Arzezv5B_GV0kf5uYD6Z9JNjyCCISei0QZo8HwSDy4,5746
|
66
|
+
notionary/blocks/numbered_list/__init__.py,sha256=NcHMDTveGoYccNo6SYBgPdrIX_ZEAh37jOVpvWFKa4s,549
|
67
|
+
notionary/blocks/numbered_list/numbered_list_element.py,sha256=m54zZTjbVnIHVv2r2YxXRxb8M53lc4zdgnGoy4kFX9U,1836
|
68
|
+
notionary/blocks/numbered_list/numbered_list_markdown_node.py,sha256=Lf2QyBQql1JGPKrI-55ywpMcNGvoQDgKQelK5XNrSZU,785
|
69
|
+
notionary/blocks/numbered_list/numbered_list_models.py,sha256=dx2abI0GawwfjGnOKKUCtM5kzMs_fSFiHOZM3vOM3d4,587
|
70
|
+
notionary/blocks/paragraph/__init__.py,sha256=GjDP9az7qoYeDAaYR0utq6f0F8cFaDb-JhobLhf7ZRY,479
|
71
|
+
notionary/blocks/paragraph/paragraph_element.py,sha256=A5qNB5RvdUjm-ePM21eDwB_BWvqYihGVH8ONYnooyko,1487
|
72
|
+
notionary/blocks/paragraph/paragraph_markdown_node.py,sha256=PCu_KLDk5iIJ2jqB0QYziYDridrrE-Mg_ajfALh8p2s,669
|
73
|
+
notionary/blocks/paragraph/paragraph_models.py,sha256=Hm4IXYNrKqNqMy6QUt6SnIiVNZU_4a-27BH7fNBjc0o,429
|
74
|
+
notionary/blocks/pdf/__init__.py,sha256=NHoP43hIioaAG5GFIkNu5e962oc57xdzax5VdeEklBo,338
|
75
|
+
notionary/blocks/pdf/pdf_element.py,sha256=YwzUBiI-ogp9fsOWMKS-XqLHbdqY1_9VQabxh4quCwE,3326
|
76
|
+
notionary/blocks/pdf/pdf_markdown_node.py,sha256=TgLHHIZqfKnAxPQysdIe-BS_UlJv-m6jYxrgmoNruSo,1017
|
77
|
+
notionary/blocks/pdf/pdf_models.py,sha256=k3GB01LNDWnvcxj-gtHSMYAwElrDqFdXkw6DFjlpZNY,293
|
78
|
+
notionary/blocks/quote/__init__.py,sha256=xb5JY4k6naDYkqSQopWvTj2L9YTNMmFOaFingjUbOkU,444
|
79
|
+
notionary/blocks/quote/quote_element.py,sha256=aRo53z4gxcOVjOWm3PQwIVNh2m-0p9xG5gaavU9zk6Q,1902
|
80
|
+
notionary/blocks/quote/quote_markdown_node.py,sha256=V4ZOkQXfBSDU1eY-xdwW_pvvatM-cenVh9583qvXsr0,644
|
81
|
+
notionary/blocks/quote/quote_models.py,sha256=XT1hDfYw8SZUEg-rPfHiC4_0LNVWK-Vs7J6h9PIGgNE,506
|
82
|
+
notionary/blocks/registry/__init__.py,sha256=Het-sHkwxg8c0A1GlPvpm6Ca-GwfN-II55YIpLb-__A,156
|
83
|
+
notionary/blocks/registry/block_registry.py,sha256=gZs2tUZKem5ZG7j5Ldb_uPJVuBFdJ2EYTok86FA5tJs,4871
|
84
|
+
notionary/blocks/registry/block_registry_builder.py,sha256=lBkoo7KMWbVotvhrtmQf98XfFKn_4T4NoRoHR4T9-CI,8555
|
85
|
+
notionary/blocks/rich_text/__init__.py,sha256=UuOn0MmGKNqK3fLBnEcH2surwbDkZ4GF8Gpn4TLNwLc,773
|
86
|
+
notionary/blocks/rich_text/rich_text_models.py,sha256=wi2BMLWUELfdrQih4ALcdwKs9veEBzvtXt86ez3s9_0,5564
|
87
|
+
notionary/blocks/rich_text/text_inline_formatter.py,sha256=X6yU_xfH0UxkIjImsPNy77irXNUKoEBYN2XkJCiHwKM,4738
|
88
|
+
notionary/blocks/table/__init__.py,sha256=Vrs6w_P63cFptV-gVuDpFbU5Rg-bDf3Tf_jUk0n-s-I,511
|
89
|
+
notionary/blocks/table/table_element.py,sha256=RBDAU4lxKc1feNHOA7TksumjcWhIQ0tx0bY8rStW-QU,4287
|
90
|
+
notionary/blocks/table/table_markdown_node.py,sha256=9TJj0C380U-1iykAFouMGtlEM00Ig5-u9lmaWa-nPR8,1402
|
91
|
+
notionary/blocks/table/table_models.py,sha256=P0VUkX8FOE6aFWAyhOVVMVAYGtj_LO0sqSYtlbyCpQA,643
|
92
|
+
notionary/blocks/table_of_contents/__init__.py,sha256=m79PbE4vhG6UlJ8UFNQDU14_JUHxluLlPGWzgpcGkUo,598
|
93
|
+
notionary/blocks/table_of_contents/table_of_contents_element.py,sha256=BmuwBGBPwjHQd6HCzpwEF6LasCPMP0SL_BmWwTZKqkU,1744
|
94
|
+
notionary/blocks/table_of_contents/table_of_contents_markdown_node.py,sha256=en8NdehkYl6mntphjnIwCZPGXnN2o2XTQm3Q5X-hZ_o,897
|
95
|
+
notionary/blocks/table_of_contents/table_of_contents_models.py,sha256=ECC5m-q-nDX34XWAqlt5sONxlbQSB0LhLJZpsjpV5xk,531
|
96
|
+
notionary/blocks/todo/__init__.py,sha256=HBjy9vRu1yEUk_P4-el1aZMw9SRwpJXGcFFtUEp4Xb8,383
|
97
|
+
notionary/blocks/todo/todo_element.py,sha256=6av4diok6FbJSb8SWIeTfbQtZTZSEJYVLyA9VDbBGjs,2173
|
98
|
+
notionary/blocks/todo/todo_markdown_node.py,sha256=MBRHtUQBNvJdX0plxY02r-XW7vkzBc_PFZxtW03UrHo,996
|
99
|
+
notionary/blocks/todo/todo_models.py,sha256=ADM2YEFPn6zXan5paS6-eYKqa9-HQ52FQjfUVInJoBI,530
|
100
|
+
notionary/blocks/toggle/__init__.py,sha256=kMNpgbKBFoFaOXcfYsNOzHEpBjTZBmYEzXapysbtjNs,415
|
101
|
+
notionary/blocks/toggle/toggle_element.py,sha256=qfylqBCEiOQPRGEaXWE-99e1xaNs-qjNUNVpULKYRiI,3726
|
102
|
+
notionary/blocks/toggle/toggle_markdown_node.py,sha256=haCAABgWY2JhZsn9Pj78_gHgVHfzDLyTguU2yWT_sKM,1271
|
103
|
+
notionary/blocks/toggle/toggle_models.py,sha256=Tkqmz7bzKX7v-T9xWZLy9Eiw_ksGg4UZaacE30uZmwI,521
|
104
|
+
notionary/blocks/toggleable_heading/__init__.py,sha256=hk43FCDhkSg_QbHEucXSBd96-Gj1tIMwiRxQY-vPREA,412
|
105
|
+
notionary/blocks/toggleable_heading/toggleable_heading_element.py,sha256=zJw4HKdI1ZgF5cv5QkRtZK4m__hw4DzxfwLnD2eFbuM,3498
|
106
|
+
notionary/blocks/toggleable_heading/toggleable_heading_markdown_node.py,sha256=kSo7rnYjX_9PT6kfmCbMCvndwNbtHNnLYdtznXhWXe4,1626
|
107
|
+
notionary/blocks/types.py,sha256=oHqlFJSyV9bW8TpZnXBHLdxkc0kEn8q4RF-raAhhpxA,1676
|
108
|
+
notionary/blocks/video/__init__.py,sha256=z_lz1agYtSRv9A9bFRwPlpzmpfgf49w9uJMVkHTTsR0,376
|
109
|
+
notionary/blocks/video/video_element.py,sha256=kQrSH0n6DUndPDDDUujzl75mdlInUXWma1zmkY-7Ccw,3524
|
110
|
+
notionary/blocks/video/video_element_models.py,sha256=CYK2tq0qhrOxjO_ctOgRvEHM9hLjQCBXrP7wcTNlUPw,229
|
111
|
+
notionary/blocks/video/video_markdown_node.py,sha256=zjO7Cd5mR1FqyGByg3tFQVeKekbZnFqI_scs--Rk6VM,909
|
112
|
+
notionary/database/__init__.py,sha256=4tdML0fBzkOCpiWT6q-L--5NELFLbTPD0IUA_E8yZno,155
|
113
|
+
notionary/database/client.py,sha256=_6YMlIXF3RacOHNsYBu9gjfoeQ1aet9v5W2XlxgMwmw,4660
|
114
|
+
notionary/database/database.py,sha256=sdo830KVInR4enaEaeMHaPadNfYnPLy5R3OW2f74w28,16558
|
115
|
+
notionary/database/database_filter_builder.py,sha256=YIkdghD5VbdwLJISMRiJ0WIJTm8jcDIL22yrvZau4sA,5950
|
116
|
+
notionary/database/database_provider.py,sha256=HB-hZ9pMjronLJS8w_b1GiQ-Ecz1uJbrWpnePL67BCA,8956
|
117
|
+
notionary/database/exceptions.py,sha256=jwFdxoIQHLO3mO3p5t890--1FjbTX60fNyqBAe-sszo,452
|
118
|
+
notionary/database/factory.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
119
|
+
notionary/database/models.py,sha256=4LjnsltPLK4xddz_d_L7I-TnmixyCuqmKV5Mapa2i1I,7603
|
120
|
+
notionary/database/notion_database.py,sha256=DNsb_YuMg9Fix8OmKMBBN0FSlCGNWbDbG7GIsrSOgK0,16744
|
121
|
+
notionary/file_upload/__init__.py,sha256=7TNyiIgLMD_IGRXTwRiAmStokF3rLoG4zXPwNb9KQqk,168
|
122
|
+
notionary/file_upload/client.py,sha256=X3LInvHWuJgiL_phytLRzW6rrocXegm30TmTL0sCcfY,8531
|
123
|
+
notionary/file_upload/models.py,sha256=lvGrdHtgs0Oi26pPwuPyRvu8jnAhbAzpEaNmaHYCUi8,1627
|
124
|
+
notionary/file_upload/notion_file_upload.py,sha256=Ul3CMicJpUodUa3SU3ihrkWU_Wa5z36mKOqSVXNc_DM,13173
|
125
|
+
notionary/markdown/___init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
126
|
+
notionary/markdown/makdown_document_model.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
127
|
+
notionary/markdown/markdown_builder.py,sha256=SPcJXMh3vGyo_PkXb5BLtAX0_P5OSF4em5MJpId7kfs,25567
|
128
|
+
notionary/markdown/markdown_document_model.py,sha256=i9zMINcTlTwlqpHV9zeQfMVlni2VAl6BMjAdKSdoUeg,6409
|
129
|
+
notionary/markdown/markdown_node.py,sha256=u8ApehnTCo1KnTFbtYzGuTAyUQrYPc3RSMJaUMyg0LI,717
|
130
|
+
notionary/models/notion_database_response.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
131
|
+
notionary/page/client.py,sha256=OFty8GZ-jaj68zo_61X_ZCsAcqPhY5VYmJiZDeXza30,3938
|
132
|
+
notionary/page/markdown_whitespace_processor.py,sha256=azsYau4eDrFN9CY7kzlG-ketoVKSkqSTc1bFq_i7ggQ,2942
|
133
|
+
notionary/page/models.py,sha256=pD8FlK8KtnUrIITTd2jg_yJICakgPE4ysZiS9KiMpr0,7088
|
134
|
+
notionary/page/notion_page.py,sha256=xSG2hoa_La0wGU3PfM9kGOXOxDannoB-7y1nhCBTBsQ,20978
|
135
|
+
notionary/page/notion_text_length_utils.py,sha256=58A2OjkMCq7g8gf-lw2Cy4aLfvZrtEmuNmZJ8oI9lLA,4152
|
136
|
+
notionary/page/page_content_writer.py,sha256=9VqIcDp7mlFkf1WLLz5rP2pQov28bInSXtheiQ2KCF0,7904
|
137
|
+
notionary/page/property_formatter.py,sha256=_978ViH83gfcr-XtDscWTfyBI2srGW2hzC-gzgp5NR8,3788
|
138
|
+
notionary/page/reader/handler/__init__.py,sha256=bnCYska8E8TwvH--VzUaxY-PPczst41sav7ircJDinQ,557
|
139
|
+
notionary/page/reader/handler/base_block_renderer.py,sha256=07iFgb11_u2MdjlcdnMd2S6xnPyYF7JxE6aGJ1yHVXs,1489
|
140
|
+
notionary/page/reader/handler/block_processing_context.py,sha256=eSNpjQ3tpOc7sJgEm-2UAwd1UvCf-B4CtHJLS5B0lZA,1001
|
141
|
+
notionary/page/reader/handler/block_rendering_context.py,sha256=BVFziudL16yaypZ18iCvJ0QPPpowVpt5HjYyacUF79o,1430
|
142
|
+
notionary/page/reader/handler/column_list_renderer.py,sha256=rYh4lOmr74j-KE8VqddVbqVyXcZ4ZRg2ig_XNJAKmX8,2011
|
143
|
+
notionary/page/reader/handler/column_renderer.py,sha256=XahgbvWCNqpdKpf0fs9E2yU9_sq7F4_ByUXE8Pi_Q_4,2312
|
144
|
+
notionary/page/reader/handler/context.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
145
|
+
notionary/page/reader/handler/line_renderer.py,sha256=odeaB4-eJNILmrJEnfJhSYBxWiZNch5Q9ycUWRLKgas,2407
|
146
|
+
notionary/page/reader/handler/toggle_renderer.py,sha256=D-kDJc1JbqM9BSGdgJxBsu1Fb8gpKU9ziNFqkS4_Tu8,2593
|
147
|
+
notionary/page/reader/handler/toggleable_heading_renderer.py,sha256=vw336TY9K0v-JFu_x5xHlovCKylSITtMh2RM0YDt4lk,3374
|
148
|
+
notionary/page/reader/page_content_retriever.py,sha256=tP_SzTEZ44NNP9KCk_BBpb0xKTIpt-ex3qV7XY80lP0,2364
|
149
|
+
notionary/page/search_filter_builder.py,sha256=m8NbFUoxxCEBpcWZIxClyix8NNzeohsOw7D-Fddi-qA,4599
|
150
|
+
notionary/page/utils.py,sha256=2nfBrWeczBdPH13R3q8dKP4OY4MwEdfKbcs2UJ9kg1o,2041
|
151
|
+
notionary/page/writer/handler/__init__.py,sha256=m3oTtbozwucFwy58I_hSI-V2-Q-A_HTu0jiCmrfV8PI,723
|
152
|
+
notionary/page/writer/handler/code_handler.py,sha256=OFQ46QYL851hdHp4-rNp9lj6l6evhNTHgSRP9fQEAo4,3891
|
153
|
+
notionary/page/writer/handler/column_handler.py,sha256=Q93nAzhIb0EN_X9RwjKzOjSehwsVWsIMzvbPO-ne_RY,5397
|
154
|
+
notionary/page/writer/handler/column_list_handler.py,sha256=sFMYz912p_9P9HDiH8G9gdZJdboq74IyR_-sHeuuVxc,5291
|
155
|
+
notionary/page/writer/handler/line_handler.py,sha256=vFGHgy-6o61CBgbVEWV43dlD_0pxZNVqcS1Xiwd9AoU,1139
|
156
|
+
notionary/page/writer/handler/line_processing_context.py,sha256=F2GxDXIOgvZHxiDP-VDe8JUHGcsszMexPG0W9E9y39E,1739
|
157
|
+
notionary/page/writer/handler/regular_line_handler.py,sha256=zwGnUjJDy9kuo1YkXWl57Jm_V3YkOwWC4iQxXdO_xZY,3704
|
158
|
+
notionary/page/writer/handler/table_handler.py,sha256=SV3CFTgpHTZch9y4M8qHhBoatbo4g-ImKNwchgI1S7c,5036
|
159
|
+
notionary/page/writer/handler/toggle_handler.py,sha256=hslgcleXt9En3RONbNr2JEhwnfjNrBARzxtoBpH33Xo,5773
|
160
|
+
notionary/page/writer/handler/toggleable_heading_handler.py,sha256=ykH7Bn-3h9ZEoxzymOAEVORvHP5TIKeiSAD7XpMbTkA,6752
|
161
|
+
notionary/page/writer/markdown_to_notion_converter.py,sha256=vIZaTyDARFkQ0vJMIowGp_tdxibaExx12PIrt2UeeOU,2570
|
162
|
+
notionary/telemetry/__init__.py,sha256=uzPrvkPIpbzPSHCu-tObCTmZA18l3VWqk42L8WLT-XM,511
|
163
|
+
notionary/telemetry/service.py,sha256=b4tWa2uRcgzc6YjPjAdwlCLZNRNjxAaxsZ1xRZ_AWmQ,4765
|
164
|
+
notionary/telemetry/views.py,sha256=FgFZGYaxP7pRYx-9wg18skMh_MJAwf4W3rCfe9JOZe4,1796
|
165
|
+
notionary/user/__init__.py,sha256=qcAWjWQVn_3WxAJZpToTj2WuCHhKLdtv3bblmx7SG2U,281
|
166
|
+
notionary/user/base_notion_user.py,sha256=qeCUmVvi62HZDQMLaT4bEuu6Dkeit8L0hBMtJaNndJI,1502
|
167
|
+
notionary/user/client.py,sha256=8gHEjiE6aNrKGlo3PMoLhIeO8R5gBgF6W7TDOsM1A4E,4515
|
168
|
+
notionary/user/models.py,sha256=G6Emj8TqAFTGCmyfKk8hq0bZC_tL7uNdI6USNWTVfP4,2065
|
169
|
+
notionary/user/notion_bot_user.py,sha256=AbkyBXM2__yNfGd8czxVqDEKvtFuzgQguyL5da5lvcs,7772
|
170
|
+
notionary/user/notion_user.py,sha256=GyWAGYS3OjMz6jYwETqOSmAS3qsGkwhTR9SDw-qvqTg,8503
|
171
|
+
notionary/user/notion_user_manager.py,sha256=ECJQGL8dsDBlk5_cH2_xB78G-PtT0vz3829TxZhAy4E,6341
|
172
|
+
notionary/user/notion_user_provider.py,sha256=zAU4m1ZdsrLv3DRHtoiTVgtQaDvz0t28LwvxMMMSJm4,20
|
173
|
+
notionary/util/__init__.py,sha256=umFas1H4zUoxibNn-Ff6dTCWt3mkhmAG4Lu2viZ-XAU,386
|
174
|
+
notionary/util/factory_decorator.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
175
|
+
notionary/util/factory_only.py,sha256=q-ZXUEvQ8lsuD1JQwx-ai6e9Lhie65waRE1BcRhCR_4,1235
|
176
|
+
notionary/util/fuzzy.py,sha256=y7EroToodFSIQLD0FAfFrPEDXOUlZaDGN9ko3XjfHMw,2063
|
177
|
+
notionary/util/logging_mixin.py,sha256=WLziC-IVovKIe3n3R-ns3YYE2aP5bZVu0r_y5joxhxY,1690
|
178
|
+
notionary/util/page_id_utils.py,sha256=AA00kRO-g3Cc50tf_XW_tb5RBuPKLuBxRa0D8LYhLXg,736
|
179
|
+
notionary/util/singleton.py,sha256=CKAvykndwPRZsA3n3MAY_XdCR59MBjjKP0vtm2BcvF0,428
|
180
|
+
notionary/util/singleton_metaclass.py,sha256=DMvrh0IbAV8nIG1oX-2Yz57Uk1YHB647DNxoI3pAT3s,809
|
181
|
+
notionary/workspace.py,sha256=3DYWyiMwZkzGy6Kt9Hn6X16KZhAmAsKAsZPlMw1wehI,3815
|
182
|
+
notionary-0.2.21.dist-info/LICENSE,sha256=zOm3cRT1qD49eg7vgw95MI79rpUAZa1kRBFwL2FkAr8,1120
|
183
|
+
notionary-0.2.21.dist-info/METADATA,sha256=7AAhI86LICte3HlUC1QVFom9cL1ROjWwy89IEq5rplw,6780
|
184
|
+
notionary-0.2.21.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
185
|
+
notionary-0.2.21.dist-info/RECORD,,
|
@@ -1,102 +0,0 @@
|
|
1
|
-
import re
|
2
|
-
from typing import Dict, Any, Optional, List
|
3
|
-
|
4
|
-
from notionary.blocks import NotionBlockElement, NotionBlockResult
|
5
|
-
from notionary.blocks import ElementPromptContent, ElementPromptBuilder
|
6
|
-
|
7
|
-
class DocumentElement(NotionBlockElement):
|
8
|
-
"""
|
9
|
-
Handles conversion between Markdown document embeds and Notion file blocks.
|
10
|
-
|
11
|
-
Markdown document syntax:
|
12
|
-
- [document](https://example.com/document.pdf "Caption")
|
13
|
-
- [document](https://example.com/document.pdf)
|
14
|
-
"""
|
15
|
-
# Nur noch die neue Syntax!
|
16
|
-
PATTERN = re.compile(
|
17
|
-
r'^\[document\]\('
|
18
|
-
r'(https?://[^\s")]+)' # URL
|
19
|
-
r'(?:\s+"([^"]*)")?' # Optional caption
|
20
|
-
r'\)$'
|
21
|
-
)
|
22
|
-
|
23
|
-
@classmethod
|
24
|
-
def match_markdown(cls, text: str) -> bool:
|
25
|
-
text = text.strip()
|
26
|
-
return text.startswith("[document]") and bool(cls.PATTERN.match(text))
|
27
|
-
|
28
|
-
@classmethod
|
29
|
-
def match_notion(cls, block: Dict[str, Any]) -> bool:
|
30
|
-
return block.get("type") == "file"
|
31
|
-
|
32
|
-
@classmethod
|
33
|
-
def markdown_to_notion(cls, text: str) -> Optional[List[Dict[str, Any]]]:
|
34
|
-
match = cls.PATTERN.match(text.strip())
|
35
|
-
if not match:
|
36
|
-
return None
|
37
|
-
url = match.group(1)
|
38
|
-
caption = match.group(2) or ""
|
39
|
-
file_block = {
|
40
|
-
"type": "file",
|
41
|
-
"file": {
|
42
|
-
"type": "external",
|
43
|
-
"external": {"url": url},
|
44
|
-
"caption": [{"type": "text", "text": {"content": caption}}] if caption else [],
|
45
|
-
}
|
46
|
-
}
|
47
|
-
# Für Konsistenz mit anderen Blöcken geben wir ein Array zurück
|
48
|
-
empty_paragraph = {"type": "paragraph", "paragraph": {"rich_text": []}}
|
49
|
-
return [file_block, empty_paragraph]
|
50
|
-
|
51
|
-
@classmethod
|
52
|
-
def notion_to_markdown(cls, block: Dict[str, Any]) -> Optional[str]:
|
53
|
-
if block.get("type") != "file":
|
54
|
-
return None
|
55
|
-
file_data = block.get("file", {})
|
56
|
-
url = ""
|
57
|
-
if file_data.get("type") == "external":
|
58
|
-
url = file_data.get("external", {}).get("url", "")
|
59
|
-
elif file_data.get("type") == "file":
|
60
|
-
url = file_data.get("file", {}).get("url", "")
|
61
|
-
if not url:
|
62
|
-
return None
|
63
|
-
caption_list = file_data.get("caption", [])
|
64
|
-
caption = cls._extract_text_content(caption_list)
|
65
|
-
if caption:
|
66
|
-
return f'[document]({url} "{caption}")'
|
67
|
-
return f'[document]({url})'
|
68
|
-
|
69
|
-
@classmethod
|
70
|
-
def _extract_text_content(cls, rich_text: List[Dict[str, Any]]) -> str:
|
71
|
-
return "".join(
|
72
|
-
t.get("text", {}).get("content", "")
|
73
|
-
for t in rich_text
|
74
|
-
if t.get("type") == "text"
|
75
|
-
) or "".join(t.get("plain_text", "") for t in rich_text if "plain_text" in t)
|
76
|
-
|
77
|
-
@classmethod
|
78
|
-
def is_multiline(cls) -> bool:
|
79
|
-
return False
|
80
|
-
|
81
|
-
@classmethod
|
82
|
-
def get_llm_prompt_content(cls) -> ElementPromptContent:
|
83
|
-
return (
|
84
|
-
ElementPromptBuilder()
|
85
|
-
.with_description(
|
86
|
-
"Embeds document files from external sources like PDFs, Word docs, Excel files, or cloud storage services."
|
87
|
-
)
|
88
|
-
.with_usage_guidelines(
|
89
|
-
"Use document embeds for sharing contracts, reports, manuals, or any important files."
|
90
|
-
)
|
91
|
-
.with_syntax('[document](https://example.com/document.pdf "Caption")')
|
92
|
-
.with_examples(
|
93
|
-
[
|
94
|
-
'[document](https://drive.google.com/file/d/1a2b3c4d5e/view "Project Proposal")',
|
95
|
-
'[document](https://company.sharepoint.com/reports/q4-2024.xlsx "Q4 Financial Report")',
|
96
|
-
'[document](https://cdn.company.com/docs/manual-v2.1.pdf "User Manual")',
|
97
|
-
'[document](https://docs.google.com/document/d/1x2y3z4/edit "Meeting Minutes")',
|
98
|
-
'[document](https://example.com/contract.pdf)',
|
99
|
-
]
|
100
|
-
)
|
101
|
-
.build()
|
102
|
-
)
|
@@ -1,31 +0,0 @@
|
|
1
|
-
from __future__ import annotations
|
2
|
-
|
3
|
-
from typing import Optional
|
4
|
-
from pydantic import BaseModel
|
5
|
-
from notionary.blocks.markdown_node import MarkdownNode
|
6
|
-
|
7
|
-
class DocumentMarkdownNodeParams(BaseModel):
|
8
|
-
url: str
|
9
|
-
caption: Optional[str] = None
|
10
|
-
|
11
|
-
class DocumentMarkdownNode(MarkdownNode):
|
12
|
-
"""
|
13
|
-
Programmatic interface for creating Notion-style Markdown document/file embeds.
|
14
|
-
Example: [document](https://example.com/file.pdf "My Caption")
|
15
|
-
"""
|
16
|
-
|
17
|
-
def __init__(self, url: str, caption: Optional[str] = None):
|
18
|
-
self.url = url
|
19
|
-
self.caption = caption or ""
|
20
|
-
|
21
|
-
@classmethod
|
22
|
-
def from_params(cls, params: DocumentMarkdownNodeParams) -> DocumentMarkdownNode:
|
23
|
-
return cls(url=params.url, caption=params.caption)
|
24
|
-
|
25
|
-
def to_markdown(self) -> str:
|
26
|
-
"""
|
27
|
-
Convert to markdown as [document](url "caption") or [document](url) if caption is empty.
|
28
|
-
"""
|
29
|
-
if self.caption:
|
30
|
-
return f'[document]({self.url} "{self.caption}")'
|
31
|
-
return f'[document]({self.url})'
|