notionary 0.2.21__py3-none-any.whl → 0.2.22__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 (96) hide show
  1. notionary/blocks/_bootstrap.py +9 -1
  2. notionary/blocks/audio/audio_element.py +53 -28
  3. notionary/blocks/audio/audio_markdown_node.py +10 -4
  4. notionary/blocks/base_block_element.py +15 -3
  5. notionary/blocks/bookmark/bookmark_element.py +39 -36
  6. notionary/blocks/bookmark/bookmark_markdown_node.py +16 -17
  7. notionary/blocks/breadcrumbs/breadcrumb_element.py +2 -2
  8. notionary/blocks/bulleted_list/bulleted_list_element.py +21 -4
  9. notionary/blocks/callout/callout_element.py +20 -4
  10. notionary/blocks/child_database/__init__.py +11 -4
  11. notionary/blocks/child_database/child_database_element.py +61 -0
  12. notionary/blocks/child_database/child_database_models.py +7 -14
  13. notionary/blocks/child_page/child_page_element.py +94 -0
  14. notionary/blocks/client.py +0 -1
  15. notionary/blocks/code/code_element.py +51 -2
  16. notionary/blocks/code/code_markdown_node.py +52 -1
  17. notionary/blocks/column/column_element.py +9 -3
  18. notionary/blocks/column/column_list_element.py +18 -3
  19. notionary/blocks/divider/divider_element.py +3 -11
  20. notionary/blocks/embed/embed_element.py +27 -6
  21. notionary/blocks/equation/equation_element.py +94 -41
  22. notionary/blocks/equation/equation_element_markdown_node.py +8 -9
  23. notionary/blocks/file/file_element.py +56 -37
  24. notionary/blocks/file/file_element_markdown_node.py +9 -7
  25. notionary/blocks/guards.py +22 -0
  26. notionary/blocks/heading/heading_element.py +23 -4
  27. notionary/blocks/image_block/image_element.py +43 -38
  28. notionary/blocks/image_block/image_markdown_node.py +10 -5
  29. notionary/blocks/mixins/captions/__init__.py +4 -0
  30. notionary/blocks/mixins/captions/caption_markdown_node_mixin.py +31 -0
  31. notionary/blocks/mixins/captions/caption_mixin.py +92 -0
  32. notionary/blocks/models.py +3 -1
  33. notionary/blocks/numbered_list/numbered_list_element.py +21 -4
  34. notionary/blocks/paragraph/paragraph_element.py +21 -5
  35. notionary/blocks/pdf/pdf_element.py +47 -41
  36. notionary/blocks/pdf/pdf_markdown_node.py +9 -7
  37. notionary/blocks/quote/quote_element.py +26 -9
  38. notionary/blocks/quote/quote_markdown_node.py +2 -2
  39. notionary/blocks/registry/block_registry.py +1 -46
  40. notionary/blocks/registry/block_registry_builder.py +8 -0
  41. notionary/blocks/rich_text/name_to_id_resolver.py +205 -0
  42. notionary/blocks/rich_text/rich_text_models.py +62 -29
  43. notionary/blocks/rich_text/text_inline_formatter.py +432 -101
  44. notionary/blocks/syntax_prompt_builder.py +137 -0
  45. notionary/blocks/table/table_element.py +110 -9
  46. notionary/blocks/table_of_contents/table_of_contents_element.py +19 -2
  47. notionary/blocks/todo/todo_element.py +21 -4
  48. notionary/blocks/toggle/toggle_element.py +19 -3
  49. notionary/blocks/toggle/toggle_markdown_node.py +1 -1
  50. notionary/blocks/toggleable_heading/toggleable_heading_element.py +19 -4
  51. notionary/blocks/types.py +69 -0
  52. notionary/blocks/video/video_element.py +44 -39
  53. notionary/blocks/video/video_markdown_node.py +10 -5
  54. notionary/database/client.py +23 -0
  55. notionary/file_upload/models.py +2 -2
  56. notionary/markdown/markdown_builder.py +34 -27
  57. notionary/page/client.py +26 -6
  58. notionary/page/notion_page.py +37 -6
  59. notionary/page/page_content_deleting_service.py +117 -0
  60. notionary/page/page_content_writer.py +89 -113
  61. notionary/page/page_context.py +65 -0
  62. notionary/page/reader/handler/__init__.py +2 -0
  63. notionary/page/reader/handler/base_block_renderer.py +4 -4
  64. notionary/page/reader/handler/block_rendering_context.py +5 -0
  65. notionary/page/reader/handler/line_renderer.py +16 -3
  66. notionary/page/reader/handler/numbered_list_renderer.py +85 -0
  67. notionary/page/reader/page_content_retriever.py +17 -5
  68. notionary/page/writer/handler/__init__.py +2 -0
  69. notionary/page/writer/handler/code_handler.py +12 -40
  70. notionary/page/writer/handler/column_handler.py +12 -12
  71. notionary/page/writer/handler/column_list_handler.py +13 -13
  72. notionary/page/writer/handler/equation_handler.py +74 -0
  73. notionary/page/writer/handler/line_handler.py +4 -4
  74. notionary/page/writer/handler/regular_line_handler.py +31 -37
  75. notionary/page/writer/handler/table_handler.py +8 -72
  76. notionary/page/writer/handler/toggle_handler.py +14 -12
  77. notionary/page/writer/handler/toggleable_heading_handler.py +22 -16
  78. notionary/page/writer/markdown_to_notion_converter.py +28 -9
  79. notionary/page/writer/markdown_to_notion_converter_context.py +30 -0
  80. notionary/page/writer/markdown_to_notion_formatting_post_processor.py +73 -0
  81. notionary/page/writer/markdown_to_notion_post_processor.py +0 -0
  82. notionary/page/writer/markdown_to_notion_text_length_post_processor.py +0 -0
  83. notionary/page/writer/notion_text_length_processor.py +150 -0
  84. notionary/telemetry/service.py +0 -1
  85. notionary/user/notion_user_manager.py +22 -95
  86. notionary/util/concurrency_limiter.py +0 -0
  87. notionary/workspace.py +4 -4
  88. notionary-0.2.22.dist-info/METADATA +237 -0
  89. {notionary-0.2.21.dist-info → notionary-0.2.22.dist-info}/RECORD +92 -77
  90. notionary/page/markdown_whitespace_processor.py +0 -80
  91. notionary/page/notion_text_length_utils.py +0 -119
  92. notionary/user/notion_user_provider.py +0 -1
  93. notionary-0.2.21.dist-info/METADATA +0 -229
  94. /notionary/page/reader/handler/{context.py → equation_renderer.py} +0 -0
  95. {notionary-0.2.21.dist-info → notionary-0.2.22.dist-info}/LICENSE +0 -0
  96. {notionary-0.2.21.dist-info → notionary-0.2.22.dist-info}/WHEEL +0 -0
@@ -0,0 +1,237 @@
1
+ Metadata-Version: 2.3
2
+ Name: notionary
3
+ Version: 0.2.22
4
+ Summary: Python library for programmatic Notion workspace management - databases, pages, and content with advanced Markdown support
5
+ License: MIT
6
+ Author: Mathis Arends
7
+ Author-email: mathisarends27@gmail.com
8
+ Requires-Python: >=3.9
9
+ Classifier: License :: OSI Approved :: MIT License
10
+ Classifier: Programming Language :: Python :: 3
11
+ Classifier: Programming Language :: Python :: 3.9
12
+ Classifier: Programming Language :: Python :: 3.10
13
+ Classifier: Programming Language :: Python :: 3.11
14
+ Classifier: Programming Language :: Python :: 3.12
15
+ Classifier: Programming Language :: Python :: 3.13
16
+ Requires-Dist: aiofiles (>=24.1.0,<25.0.0)
17
+ Requires-Dist: httpx (>=0.28.0)
18
+ Requires-Dist: isort (>=6.0.1,<7.0.0)
19
+ Requires-Dist: posthog (>=6.3.1,<7.0.0)
20
+ Requires-Dist: pydantic (>=2.11.4)
21
+ Requires-Dist: python-dotenv (>=1.1.0)
22
+ Project-URL: Homepage, https://github.com/mathisarends/notionary
23
+ Description-Content-Type: text/markdown
24
+
25
+ <picture>
26
+ <source media="(prefers-color-scheme: dark)" srcset="./static/notionary-dark.png">
27
+ <source media="(prefers-color-scheme: light)" srcset="./static/notionary-light.png">
28
+ <img alt="Notionary logo: dark mode shows a white logo, light mode shows a black logo." src="./static/browser-use.png" width="full">
29
+ </picture>
30
+
31
+ <h1 align="center">Notion API simplified for Python developers 🐍</h1>
32
+
33
+ <div align="center">
34
+
35
+ [![Python Version](https://img.shields.io/badge/python-3.8%2B-blue.svg)](https://www.python.org/downloads/)
36
+ [![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
37
+ [![Documentation](https://img.shields.io/badge/docs-mathisarends.github.io-blue.svg)](https://mathisarends.github.io/notionary/)
38
+
39
+ Transform complex Notion API interactions into simple, Pythonic code. Build AI agents, automate workflows, and create dynamic content with ease.
40
+
41
+ </div>
42
+
43
+ ---
44
+
45
+ ## Why Notionary?
46
+
47
+ - **Smart Discovery**: Find pages and databases by name—no more hunting for URLs or IDs
48
+ - **Rich Markdown**: Convert extended Markdown (callouts, toggles, columns) directly into beautiful Notion blocks
49
+ - **Async-First**: Built for modern Python with full async/await support and high performance
50
+ - **AI-Ready**: Perfect foundation for AI agents that generate and manage Notion content
51
+ - **Round-Trip**: Read existing content, modify it, and write it back while preserving formatting
52
+
53
+ ---
54
+
55
+ ## Quick Start
56
+
57
+ ```bash
58
+ pip install notionary
59
+ ```
60
+
61
+ Set up your [Notion integration](https://www.notion.so/profile/integrations) and add your token:
62
+
63
+ ```bash
64
+ NOTION_SECRET=your_integration_key
65
+ ```
66
+
67
+ ### Simple Flow: Find → Create → Update
68
+
69
+ ```python
70
+ import asyncio
71
+ from notionary import NotionPage, NotionDatabase
72
+
73
+ async def main():
74
+ # Work with pages - find by name, no exact match needed!
75
+ page = await NotionPage.from_page_name("Meeting Notes")
76
+
77
+ # Direct Markdown - quick & intuitive
78
+ await page.append_markdown("""
79
+ ## Action Items
80
+ - Review project proposal
81
+ - Schedule team meeting
82
+ - Update documentation
83
+
84
+ [callout](Important meeting decisions require follow-up "💡")
85
+ """)
86
+
87
+ # Builder Pattern - type-safe & powerful for complex layouts
88
+ await page.append_markdown(lambda builder: (
89
+ builder
90
+ .h2("Project Status")
91
+ .callout("Project milestone reached!", "🎉")
92
+ .columns(
93
+ lambda col: (col
94
+ .h3("Completed")
95
+ .bulleted_list(["API design", "Database setup", "Authentication"])
96
+ ),
97
+ lambda col: (col
98
+ .h3("In Progress")
99
+ .bulleted_list(["Frontend UI", "Testing", "Documentation"])
100
+ )
101
+ )
102
+ .table(
103
+ headers=["Task", "Owner", "Due Date"],
104
+ rows=[
105
+ ["Launch prep", "Alice", "2024-03-15"],
106
+ ["Marketing", "Bob", "2024-03-20"]
107
+ ]
108
+ )
109
+ ))
110
+
111
+ asyncio.run(main())
112
+ ```
113
+
114
+ ### Create Rich Database Entries
115
+
116
+ ```python
117
+ # Work with databases - connect and create styled entries
118
+ db = await NotionDatabase.from_database_name("Projects")
119
+
120
+ # Create new project with full styling
121
+ project = await db.create_blank_page()
122
+ await project.set_title("New Marketing Campaign")
123
+ await project.set_emoji_icon("🚀")
124
+ await project.set_random_gradient_cover()
125
+
126
+ # Set database properties
127
+ await project.set_property_value_by_name("Status", "Planning")
128
+ await project.set_property_value_by_name("Priority", "High")
129
+ await project.set_property_value_by_name("Team Lead", "sarah@company.com")
130
+
131
+ # Add rich content to the new page
132
+ await project.replace_content(lambda builder: (
133
+ builder
134
+ .h1("Campaign Overview")
135
+ .callout("New marketing initiative targeting Q2 growth", "🎯")
136
+ .h2("Goals & Objectives")
137
+ .numbered_list([
138
+ "Increase brand awareness by 25%",
139
+ "Generate 500 qualified leads",
140
+ "Launch in 3 target markets"
141
+ ])
142
+ .h2("Budget Breakdown")
143
+ .table(
144
+ headers=["Category", "Allocated", "Spent", "Remaining"],
145
+ rows=[
146
+ ["Digital Ads", "$15,000", "$3,200", "$11,800"],
147
+ ["Content Creation", "$8,000", "$1,500", "$6,500"],
148
+ ["Events", "$12,000", "$0", "$12,000"]
149
+ ]
150
+ )
151
+ .divider()
152
+ .toggle("Technical Requirements", lambda toggle: (
153
+ toggle
154
+ .paragraph("Platform specifications and integration details.")
155
+ .bulleted_list([
156
+ "CRM integration with Salesforce",
157
+ "Analytics tracking setup",
158
+ "Landing page development"
159
+ ])
160
+ ))
161
+ ))
162
+
163
+ print(f"✅ Created styled project: {project.url}")
164
+ ```
165
+
166
+ ### Extended Markdown Syntax
167
+
168
+ Notionary supports rich formatting with callouts, toggles, multi-column layouts, tables, media embeds, and more. Use either direct markdown syntax or the type-safe builder pattern.
169
+
170
+ See the complete [Block Types documentation](https://mathisarends.github.io/notionary/blocks/) for all available formatting options and syntax examples.
171
+
172
+ ## What You Can Build
173
+
174
+ - **AI Content Generation** - Perfect for AI agents that create structured reports and documentation
175
+ - **Workflow Automation** - Update project status, sync data between databases, generate reports
176
+ - **Dynamic Documentation** - Auto-generate team docs, API references, and knowledge bases
177
+ - **Content Management** - Bulk page updates, template generation, and content migration
178
+
179
+ ## Core Features
180
+
181
+ | Feature | Description |
182
+ | -------------------- | ------------------------------------------------------ |
183
+ | **Smart Discovery** | Find pages/databases by name with fuzzy matching |
184
+ | **Rich Markdown** | Extended syntax for callouts, toggles, columns, tables |
185
+ | **Async-First** | Modern Python with full async/await support |
186
+ | **Round-Trip** | Read content as markdown, edit, and write back |
187
+ | **AI-Ready** | Generate system prompts for AI content creation |
188
+ | **All Block Types** | Support for every Notion block type |
189
+ | **Type Safety** | Full type hints for better IDE support |
190
+ | **High Performance** | Efficient batch operations and caching |
191
+
192
+ ## Examples & Documentation
193
+
194
+ Explore comprehensive guides and real-world examples:
195
+
196
+ - **[📖 Full Documentation](https://mathisarends.github.io/notionary/)** - Complete API reference and guides
197
+ - **[Getting Started](https://mathisarends.github.io/notionary/get-started/)** - Quick setup and first steps
198
+ - **[Page Management](https://mathisarends.github.io/notionary/page/)** - Work with page content and properties
199
+ - **[Database Operations](https://mathisarends.github.io/notionary/database/)** - Query and manage databases
200
+ - **[Block Types](https://mathisarends.github.io/notionary/blocks/)** - Complete formatting reference
201
+
202
+ Check out the `examples/` directory for hands-on tutorials:
203
+
204
+ ### Core Examples
205
+
206
+ - **[Page Management](examples/page_example.py)** - Create, update, and manage pages
207
+ - **[Database Operations](examples/database.py)** - Connect to and query databases
208
+ - **[Workspace Discovery](examples/workspace_discovery.py)** - Explore your workspace
209
+
210
+ ### Markdown Examples
211
+
212
+ - **[Basic Formatting](examples/markdown/basic.py)** - Text, lists, and links
213
+ - **[Callouts](examples/markdown/callout.py)** - Eye-catching information boxes
214
+ - **[Toggles](examples/markdown/toggle.py)** - Collapsible content sections
215
+ - **[Multi-Column](examples/markdown/columns.py)** - Side-by-side layouts
216
+ - **[Tables](examples/markdown/table.py)** - Structured data presentation
217
+
218
+ ## Contributing
219
+
220
+ We'd love your help making Notionary even better!
221
+
222
+ Whether it's fixing bugs, adding features, improving docs, or sharing examples - all contributions are welcome.
223
+
224
+ See our [Contributing Guide](https://mathisarends.github.io/notionary/contributing/) to get started.
225
+
226
+ ---
227
+
228
+ <div align="center">
229
+
230
+ **Ready to transform your Notion workflow?**
231
+
232
+ [📖 Read the Docs](https://mathisarends.github.io/notionary/) • [Getting Started](https://mathisarends.github.io/notionary/get-started/) • [Examples](examples/)
233
+
234
+ Built with ❤️ for the Python community
235
+
236
+ </div>
237
+
@@ -1,116 +1,124 @@
1
1
  notionary/__init__.py,sha256=u6I31uJ8E_lqg17QIzylzz-mnvnLc4hmVuBGvnDwFgI,607
2
2
  notionary/base_notion_client.py,sha256=EKExy91oeVHdknK-XU2IkKB6SJgN96ZfbblRK05wnV4,7071
3
3
  notionary/blocks/__init__.py,sha256=CGaDCEmUepqnjkcm7X1OKdxAhtbcIZAu3fxJeySyu6o,76
4
- notionary/blocks/_bootstrap.py,sha256=8leYmTKgbOSouqJFRnEQAhEjCT-fmeb7LZvFCBcjdEY,9199
4
+ notionary/blocks/_bootstrap.py,sha256=8xs6EDSPdGNr7NsrxmH2pg1dvVjfbghX5N74tRALKog,9450
5
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
6
+ notionary/blocks/audio/audio_element.py,sha256=owVZmgsEulL7NBexp0smMBONXj8uVVesup7970vLfOg,4615
7
+ notionary/blocks/audio/audio_markdown_node.py,sha256=xYaKYJq7OZ3ky5BxActwFYESNoPBtw3VjCjmEeD9ep0,1140
8
8
  notionary/blocks/audio/audio_models.py,sha256=ts281Wgjh0FQBK4a6IKKNGPcG0U18T1euCgo83-JSg4,229
9
- notionary/blocks/base_block_element.py,sha256=WXQIf6StrD5EcS6wtlaZ03fJTWQ-07qH9qPsqzwsvHU,1009
9
+ notionary/blocks/base_block_element.py,sha256=r9W3EHIwQ2A824x2MlFGTfQpZjMvfB-fUVTI2x3peyc,1546
10
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
11
+ notionary/blocks/bookmark/bookmark_element.py,sha256=y6wkdRor3cn9n5gE1pFnH6bc5B43YYqrwWHTXrC0GPs,3399
12
+ notionary/blocks/bookmark/bookmark_markdown_node.py,sha256=5DCTQ8AlGLiJUUl4Z0WGEGF4IrJ127f3KNGFm2ZD-ug,1383
13
13
  notionary/blocks/bookmark/bookmark_models.py,sha256=kJTitF93xd0YITvP_FuwpjnBUNLeDMr7fDAXV8MAJrk,375
14
14
  notionary/blocks/breadcrumbs/__init__.py,sha256=vw7--1u5TAcX4l3J0eu98HbxG6wxsnPrkt7YouT_ESA,498
15
- notionary/blocks/breadcrumbs/breadcrumb_element.py,sha256=NGS5AgXs4mFCWDDrKyXPKPpEo1F0_bTaP2AYzPSkmDU,1256
15
+ notionary/blocks/breadcrumbs/breadcrumb_element.py,sha256=cVZHiMqaYL4EGphnX1OCh3Inf93TFwFosB-1PGCS2do,1268
16
16
  notionary/blocks/breadcrumbs/breadcrumb_markdown_node.py,sha256=tbcQOzMHx-dQGa5UAE2jowzPM_wItsb76bCGU4YIKw4,745
17
17
  notionary/blocks/breadcrumbs/breadcrumb_models.py,sha256=-XGIIMYiQuGe5iXmW-1Y9Y9Yca0w6u3HbiD1SBue8sI,237
18
18
  notionary/blocks/bulleted_list/__init__.py,sha256=2EvFm2h-X6KUHGQhQiOYBqh-DvZbL0qT453eokd8eyw,549
19
- notionary/blocks/bulleted_list/bulleted_list_element.py,sha256=ctNT9GrYjkPBc5sS7HUssOAKMrfj1Pi4fG7bNrYJwCI,2195
19
+ notionary/blocks/bulleted_list/bulleted_list_element.py,sha256=YY2kOCgFinD7Mk6Ns9KLxm4KlNtlZoT87zcrEpq97HM,3095
20
20
  notionary/blocks/bulleted_list/bulleted_list_markdown_node.py,sha256=1MmGbQAbkeV3vwPlqC4ItcR-Abw8JymYWyGLEV2-HfI,827
21
21
  notionary/blocks/bulleted_list/bulleted_list_models.py,sha256=2rOHv8KIfTcx0z4JtK968BnLc4lkCrF8So-e5QL_FEY,561
22
22
  notionary/blocks/callout/__init__.py,sha256=iDLuJ4szAOY4tCL0NK_bqCzlTC109o51c1cGgDoruZg,431
23
- notionary/blocks/callout/callout_element.py,sha256=0U05Y1xPiBJQAs8sUoZD157-nHZEqSdkQ6eEDF5H6O0,2616
23
+ notionary/blocks/callout/callout_element.py,sha256=6Ss1jv1cqAM4GuNGvuy7dCFjpp-dLavf-wXevn3IEmw,3575
24
24
  notionary/blocks/callout/callout_markdown_node.py,sha256=TMd2wQ0BfoQ0mgHSy5MrqCvpJvovSw7zsLrXnRrJoQs,948
25
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
26
+ notionary/blocks/child_database/__init__.py,sha256=FzjjHOS9Je2oXuxLK9S9Oq56-EDEZRTJBfDzkacFpY0,368
27
+ notionary/blocks/child_database/child_database_element.py,sha256=9Sho1ZuA6GA4xZHpj_iaK18WYd9mXLGr0yvkFIKLqGU,2450
28
+ notionary/blocks/child_database/child_database_models.py,sha256=SP6S9tKTetKNdCkYY3QCxeXd2lq1DyfdNvDhKlhD22Q,264
28
29
  notionary/blocks/child_page/__init__.py,sha256=qaHvJqF8Bfzj0NVE1Q5uN_4o3Jl4RuNYspMZ6E7bUuk,182
30
+ notionary/blocks/child_page/child_page_element.py,sha256=iZIJ91CQ9ZztivtSNKKA8-OD6YIGZvGsxeuD8vZ1PLg,3389
29
31
  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
32
+ notionary/blocks/client.py,sha256=9rhfWM3LNxYrB0bez2RKLGE2gVnBaJbrQa1qu6FSKVE,8692
31
33
  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_element.py,sha256=-8b63RxD7qJzOkMMF_eLo-z9TdsI33r0JUJc5cyFAzs,5661
35
+ notionary/blocks/code/code_markdown_node.py,sha256=r25-n8FkV2alrAionnaZIPVGYLnmEw0zeJ_5HpBTWh8,3050
34
36
  notionary/blocks/code/code_models.py,sha256=hK-Ka9whQO-xWASr0sbhRcz-FUc5VY5Pjqa8LPW041o,2178
35
37
  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_element.py,sha256=1BtZ5EWq1QpUEAh-OEpvZOTZfeFFDyDKCZCSo8nskJw,2338
39
+ notionary/blocks/column/column_list_element.py,sha256=gyAZ_Q79g5sEp24IbHHXZvyX8BRmN1jo6ahoVxXxR4E,2398
38
40
  notionary/blocks/column/column_list_markdown_node.py,sha256=RXwPz-d-vfAb39HZapaXiomuY8eKkUuBBEm7rPyLHl0,1396
39
41
  notionary/blocks/column/column_markdown_node.py,sha256=Nc7QReXOWZ0CIuUpgE9dhME4bINo18P1luC6bL0bpPA,1632
40
42
  notionary/blocks/column/column_models.py,sha256=Dv1jBWmuFjjSqyOajkh05jmxEwxF9b-LuDA4Sgw8RJI,664
41
43
  notionary/blocks/divider/__init__.py,sha256=GX3D_Oksg65Dam4lRGdrOGWuZec35ghuYuvF9HDt_y8,431
42
- notionary/blocks/divider/divider_element.py,sha256=Ms9c5a2CbbttyPF8nkU-Qc_xo7BPtxaXAlAUJyzRjpM,1628
44
+ notionary/blocks/divider/divider_element.py,sha256=MHPctdc5-EwxTrcoA4EjEgiFzWnDZqHziKBoz6xZMrQ,1395
43
45
  notionary/blocks/divider/divider_markdown_node.py,sha256=XMa4txNnzeJPheNKke4poD5t36DE0Fqj963-QZ3gh8M,583
44
46
  notionary/blocks/divider/divider_models.py,sha256=A7jUBYZnE_yRLTZi-sr9sbDCrWNhAdriFNzCpDEBwGU,219
45
47
  notionary/blocks/embed/__init__.py,sha256=EgWphqJaJdt3CMjILKEjVexDSTz1KU0NE2rMDNZaCQ0,399
46
- notionary/blocks/embed/embed_element.py,sha256=PeN2kMmSuFiR0oy6KvrGV71FHwj-ADNWrMWnKwshHWk,2444
48
+ notionary/blocks/embed/embed_element.py,sha256=xzDBA4OS2O4OASXRoy2oFO5WEm3hF4dVEryokGm8bwk,3594
47
49
  notionary/blocks/embed/embed_markdown_node.py,sha256=8pcLAT4Il1e50wIdCSL11Leq6fnGLOlwNAuKTFY-i98,908
48
50
  notionary/blocks/embed/embed_models.py,sha256=utXtHlIIK5QA24ZJW7l0XfDtrt12DureH1DugOi9mNw,366
49
51
  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_element.py,sha256=EME_KVHjdO9e7xnuFxlmkbzRcL1b8LrEikYzXXZGNMM,4750
53
+ notionary/blocks/equation/equation_element_markdown_node.py,sha256=9Hj6S5uNMWbbHWdKRskLZyCvl8Q8B2HpDS__aZsXDmc,911
52
54
  notionary/blocks/equation/equation_models.py,sha256=WIpnqHmwh2rpNTVvt6eFNzkhHejW8XMWDQbwtLIcxKw,245
53
55
  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.py,sha256=ShjPjsUolIrBJyTHm_QORq_aNanQwJQ0ZFNj-0wfuaA,4394
57
+ notionary/blocks/file/file_element_markdown_node.py,sha256=YJoMkmlbcz7FsysnDMTc7EGubJKdRr8u1zyUnaUtgsU,1148
56
58
  notionary/blocks/file/file_element_models.py,sha256=1eia1-OamnF52AUYtC3Ru-xi6HHsnjw9hcuslkHKXuI,850
59
+ notionary/blocks/guards.py,sha256=WaZLfPWUcoPwLzhBUQ5vvVM07dZpCXnw2ObtF1mM62c,586
57
60
  notionary/blocks/heading/__init__.py,sha256=dg2hCVsqWv84hvtb6HAb4m1i8b0jyLXokPIYwe5NwZ8,557
58
- notionary/blocks/heading/heading_element.py,sha256=H0xZTgTEFti9_QtvEkAsOKlwb1ww9qXd22n75XOZ12E,2959
61
+ notionary/blocks/heading/heading_element.py,sha256=Hdnlzj94AoYCMYZuVOl91tREn1S6hwolA4vWwMtAFWk,3894
59
62
  notionary/blocks/heading/heading_markdown_node.py,sha256=I8_9fg_CsZ-iTMA6PV6V8DBxwa5BDcMfF6NS70iKCbo,881
60
63
  notionary/blocks/heading/heading_models.py,sha256=nOEnb66tYt_653PIt-AqjGaOgefFOK6hKG09epCKSSc,794
61
64
  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
65
+ notionary/blocks/image_block/image_element.py,sha256=02Xkvg4IYZhx5Bb8RBQQAfg7I1fwkrFPGwTW-aMAcus,3610
66
+ notionary/blocks/image_block/image_markdown_node.py,sha256=KpE2FFetUZh96ppuXkpOfauchgT5eWxqZQmfRotK-qY,1280
64
67
  notionary/blocks/image_block/image_models.py,sha256=vmuGwgq3uP9ojb-6IOdjsEqIKI-9uTa5_0BCMkzJV_A,229
65
- notionary/blocks/models.py,sha256=_Arzezv5B_GV0kf5uYD6Z9JNjyCCISei0QZo8HwSDy4,5746
68
+ notionary/blocks/mixins/captions/__init__.py,sha256=hGq6UOBiSgnaWB9UXgvtuG2sLPNgs5GAaz-8vrBmh2Q,166
69
+ notionary/blocks/mixins/captions/caption_markdown_node_mixin.py,sha256=uaT_k7cfJgDhvdAavPmRJJHeEcwVECe21dcawcffHVE,1021
70
+ notionary/blocks/mixins/captions/caption_mixin.py,sha256=6H69_bkUWSy2vNdW01kEJuOyIopZYoL3fMQ3T7xe6XI,3342
71
+ notionary/blocks/models.py,sha256=cwUgc3wjrKA6MiEnZzCpHS35Y54jPHlIrKRPUNjZm0s,5835
66
72
  notionary/blocks/numbered_list/__init__.py,sha256=NcHMDTveGoYccNo6SYBgPdrIX_ZEAh37jOVpvWFKa4s,549
67
- notionary/blocks/numbered_list/numbered_list_element.py,sha256=m54zZTjbVnIHVv2r2YxXRxb8M53lc4zdgnGoy4kFX9U,1836
73
+ notionary/blocks/numbered_list/numbered_list_element.py,sha256=ZPoLYCj0xJXeWdjeJImuTeVWd1fqeByLzMj29V4Yf1Y,2755
68
74
  notionary/blocks/numbered_list/numbered_list_markdown_node.py,sha256=Lf2QyBQql1JGPKrI-55ywpMcNGvoQDgKQelK5XNrSZU,785
69
75
  notionary/blocks/numbered_list/numbered_list_models.py,sha256=dx2abI0GawwfjGnOKKUCtM5kzMs_fSFiHOZM3vOM3d4,587
70
76
  notionary/blocks/paragraph/__init__.py,sha256=GjDP9az7qoYeDAaYR0utq6f0F8cFaDb-JhobLhf7ZRY,479
71
- notionary/blocks/paragraph/paragraph_element.py,sha256=A5qNB5RvdUjm-ePM21eDwB_BWvqYihGVH8ONYnooyko,1487
77
+ notionary/blocks/paragraph/paragraph_element.py,sha256=cp90cL0hi9gvIoefmxd-U_xM4z5YiTYt3yO7NQ-Hyvg,2478
72
78
  notionary/blocks/paragraph/paragraph_markdown_node.py,sha256=PCu_KLDk5iIJ2jqB0QYziYDridrrE-Mg_ajfALh8p2s,669
73
79
  notionary/blocks/paragraph/paragraph_models.py,sha256=Hm4IXYNrKqNqMy6QUt6SnIiVNZU_4a-27BH7fNBjc0o,429
74
80
  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
81
+ notionary/blocks/pdf/pdf_element.py,sha256=AIUe2FFlYnxV_WpcMD9MNI4bFDajYJ9z5hikBE1_p-k,4056
82
+ notionary/blocks/pdf/pdf_markdown_node.py,sha256=V1J9egeGlvvo4zBTb1Eyv1vQ1oGuWxdm0rJ1naIMjg0,1156
77
83
  notionary/blocks/pdf/pdf_models.py,sha256=k3GB01LNDWnvcxj-gtHSMYAwElrDqFdXkw6DFjlpZNY,293
78
84
  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
85
+ notionary/blocks/quote/quote_element.py,sha256=X7YZrhg94rgvWuRi96hbetbMx_FJbYGsmto1P_Am34I,2795
86
+ notionary/blocks/quote/quote_markdown_node.py,sha256=G0539a5xeMMViAzTz5PvN8KYwSZgwrs8itUfXkZ2qlQ,630
81
87
  notionary/blocks/quote/quote_models.py,sha256=XT1hDfYw8SZUEg-rPfHiC4_0LNVWK-Vs7J6h9PIGgNE,506
82
88
  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
89
+ notionary/blocks/registry/block_registry.py,sha256=B01_6jwrIExvMpgxFHDD8P3mXtrkK0SDriNhV7o7NWY,3195
90
+ notionary/blocks/registry/block_registry_builder.py,sha256=a-oID7OpW4b1bEhhsQOOnwK8evlJem-MralvdhaMYno,8866
85
91
  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
92
+ notionary/blocks/rich_text/name_to_id_resolver.py,sha256=crAiY1mzE8RZVvWfkGcEPdGGvRmXa51WTDxca10oWA0,6373
93
+ notionary/blocks/rich_text/rich_text_models.py,sha256=QPCHA-vo8DoH7sLAVzOXervoeeV39JRuJkR-IGVA63Y,6278
94
+ notionary/blocks/rich_text/text_inline_formatter.py,sha256=ICvQFiXDBX56EDrrTha8OvE9eao_9QDxybHP6Bex9ls,18409
95
+ notionary/blocks/syntax_prompt_builder.py,sha256=VwvpR8JyyKR13_ni0jUt--F7w6DoD_nzJB2LbwiJXJc,4626
88
96
  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
97
+ notionary/blocks/table/table_element.py,sha256=eeqFHlyQ1dG1ZxB3zdrdvF5qXPsLqSEVyNQJ70W9Rwg,8002
90
98
  notionary/blocks/table/table_markdown_node.py,sha256=9TJj0C380U-1iykAFouMGtlEM00Ig5-u9lmaWa-nPR8,1402
91
99
  notionary/blocks/table/table_models.py,sha256=P0VUkX8FOE6aFWAyhOVVMVAYGtj_LO0sqSYtlbyCpQA,643
92
100
  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
101
+ notionary/blocks/table_of_contents/table_of_contents_element.py,sha256=p4bYHB3jvkptdaB_fjKdqw_LTZmxckuXOKVUiikyc5I,2622
94
102
  notionary/blocks/table_of_contents/table_of_contents_markdown_node.py,sha256=en8NdehkYl6mntphjnIwCZPGXnN2o2XTQm3Q5X-hZ_o,897
95
103
  notionary/blocks/table_of_contents/table_of_contents_models.py,sha256=ECC5m-q-nDX34XWAqlt5sONxlbQSB0LhLJZpsjpV5xk,531
96
104
  notionary/blocks/todo/__init__.py,sha256=HBjy9vRu1yEUk_P4-el1aZMw9SRwpJXGcFFtUEp4Xb8,383
97
- notionary/blocks/todo/todo_element.py,sha256=6av4diok6FbJSb8SWIeTfbQtZTZSEJYVLyA9VDbBGjs,2173
105
+ notionary/blocks/todo/todo_element.py,sha256=8rH84wHH1FEFnVd76AZrT-c-BpkwaN9hLQK7CWMCbBY,3092
98
106
  notionary/blocks/todo/todo_markdown_node.py,sha256=MBRHtUQBNvJdX0plxY02r-XW7vkzBc_PFZxtW03UrHo,996
99
107
  notionary/blocks/todo/todo_models.py,sha256=ADM2YEFPn6zXan5paS6-eYKqa9-HQ52FQjfUVInJoBI,530
100
108
  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
109
+ notionary/blocks/toggle/toggle_element.py,sha256=O_gv3Xz0vxtJ3-1Hi07xBbrpgLDo9FKZ_OESOhbvpAQ,4618
110
+ notionary/blocks/toggle/toggle_markdown_node.py,sha256=EFGSFVsnl7bM6wm-geQ7tUplHyyZrCzZnwVzb-NbcO8,1270
103
111
  notionary/blocks/toggle/toggle_models.py,sha256=Tkqmz7bzKX7v-T9xWZLy9Eiw_ksGg4UZaacE30uZmwI,521
104
112
  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
113
+ notionary/blocks/toggleable_heading/toggleable_heading_element.py,sha256=y3tBDWmi3IeyhFyJEmsFndhlrQls5XhJVUGUVORnXUY,4428
106
114
  notionary/blocks/toggleable_heading/toggleable_heading_markdown_node.py,sha256=kSo7rnYjX_9PT6kfmCbMCvndwNbtHNnLYdtznXhWXe4,1626
107
- notionary/blocks/types.py,sha256=oHqlFJSyV9bW8TpZnXBHLdxkc0kEn8q4RF-raAhhpxA,1676
115
+ notionary/blocks/types.py,sha256=qAmcxIGQcekrLsbNZVjOcI3HYmvHz5bzFFj8Asuh8JI,3567
108
116
  notionary/blocks/video/__init__.py,sha256=z_lz1agYtSRv9A9bFRwPlpzmpfgf49w9uJMVkHTTsR0,376
109
- notionary/blocks/video/video_element.py,sha256=kQrSH0n6DUndPDDDUujzl75mdlInUXWma1zmkY-7Ccw,3524
117
+ notionary/blocks/video/video_element.py,sha256=nDYcr1HwCZYVBSLPEo1qHuqU9AQ8yzS9OHQTIe3rVyA,4417
110
118
  notionary/blocks/video/video_element_models.py,sha256=CYK2tq0qhrOxjO_ctOgRvEHM9hLjQCBXrP7wcTNlUPw,229
111
- notionary/blocks/video/video_markdown_node.py,sha256=zjO7Cd5mR1FqyGByg3tFQVeKekbZnFqI_scs--Rk6VM,909
119
+ notionary/blocks/video/video_markdown_node.py,sha256=u5OaoxLzg10PAdvo70OYgi1d-eFtTK_kUdYLAKQWdtM,1151
112
120
  notionary/database/__init__.py,sha256=4tdML0fBzkOCpiWT6q-L--5NELFLbTPD0IUA_E8yZno,155
113
- notionary/database/client.py,sha256=_6YMlIXF3RacOHNsYBu9gjfoeQ1aet9v5W2XlxgMwmw,4660
121
+ notionary/database/client.py,sha256=mN_8XHvIQkRxiWbgBfvncgw4IRiCFX3bVLMLBvtk1Ig,5398
114
122
  notionary/database/database.py,sha256=sdo830KVInR4enaEaeMHaPadNfYnPLy5R3OW2f74w28,16558
115
123
  notionary/database/database_filter_builder.py,sha256=YIkdghD5VbdwLJISMRiJ0WIJTm8jcDIL22yrvZau4sA,5950
116
124
  notionary/database/database_provider.py,sha256=HB-hZ9pMjronLJS8w_b1GiQ-Ecz1uJbrWpnePL67BCA,8956
@@ -120,47 +128,54 @@ notionary/database/models.py,sha256=4LjnsltPLK4xddz_d_L7I-TnmixyCuqmKV5Mapa2i1I,
120
128
  notionary/database/notion_database.py,sha256=DNsb_YuMg9Fix8OmKMBBN0FSlCGNWbDbG7GIsrSOgK0,16744
121
129
  notionary/file_upload/__init__.py,sha256=7TNyiIgLMD_IGRXTwRiAmStokF3rLoG4zXPwNb9KQqk,168
122
130
  notionary/file_upload/client.py,sha256=X3LInvHWuJgiL_phytLRzW6rrocXegm30TmTL0sCcfY,8531
123
- notionary/file_upload/models.py,sha256=lvGrdHtgs0Oi26pPwuPyRvu8jnAhbAzpEaNmaHYCUi8,1627
131
+ notionary/file_upload/models.py,sha256=bbACznMXdg7WAlAZ6uJ6qVAj7r3GP9LlEv2T5hxcIrI,1621
124
132
  notionary/file_upload/notion_file_upload.py,sha256=Ul3CMicJpUodUa3SU3ihrkWU_Wa5z36mKOqSVXNc_DM,13173
125
133
  notionary/markdown/___init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
126
134
  notionary/markdown/makdown_document_model.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
127
- notionary/markdown/markdown_builder.py,sha256=SPcJXMh3vGyo_PkXb5BLtAX0_P5OSF4em5MJpId7kfs,25567
135
+ notionary/markdown/markdown_builder.py,sha256=q9J7FduIxrf8hSPu_5P4ZwYaGVZdvpe-qa0dyaRsBJ0,26379
128
136
  notionary/markdown/markdown_document_model.py,sha256=i9zMINcTlTwlqpHV9zeQfMVlni2VAl6BMjAdKSdoUeg,6409
129
137
  notionary/markdown/markdown_node.py,sha256=u8ApehnTCo1KnTFbtYzGuTAyUQrYPc3RSMJaUMyg0LI,717
130
138
  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
139
+ notionary/page/client.py,sha256=qSXWWeSpi0EnNpUOjqmvgdAMDCyKYvK9AxoMWZpIJzM,4594
133
140
  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
141
+ notionary/page/notion_page.py,sha256=qgu4Oxfx2asyiXi2a0BmeRE3AOgsfmfVNcXv9kMC_3c,22438
142
+ notionary/page/page_content_deleting_service.py,sha256=ZxGUMmT7k85IPLALfZkIJ5oQA3tMHWVW4acjdp5cB0k,4540
143
+ notionary/page/page_content_writer.py,sha256=6WMDTbgjYRgJhmCrMnK4XokgVDhRWSRm55_1xceo0CA,6856
144
+ notionary/page/page_context.py,sha256=qpy9J5zDdE_v7kHEE4SA14NQJP9Dj8j5gfkqccz23dU,1982
137
145
  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
146
+ notionary/page/reader/handler/__init__.py,sha256=ROMH1KvGGdQ0ANLhmIP_4LtMks9jsTTwnZKP8W0uwls,644
147
+ notionary/page/reader/handler/base_block_renderer.py,sha256=HZwv727bvu6suT1-uzK4y-4ci54VCdi0FF_yOJYBB1g,1513
140
148
  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
149
+ notionary/page/reader/handler/block_rendering_context.py,sha256=o3ASovI71jtffDeKVtx7hZqg7P6-qXvkWBft7ZqOa_s,1583
142
150
  notionary/page/reader/handler/column_list_renderer.py,sha256=rYh4lOmr74j-KE8VqddVbqVyXcZ4ZRg2ig_XNJAKmX8,2011
143
151
  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
152
+ notionary/page/reader/handler/equation_renderer.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
153
+ notionary/page/reader/handler/line_renderer.py,sha256=TvgLZo1URsRQ4UEcaQtbAU4tGIuAX4uh3Kmemp9aRrA,2905
154
+ notionary/page/reader/handler/numbered_list_renderer.py,sha256=tFDfMYxFme1PuNBNi2kbIb13MGNLP5n2-NpLoEklR1E,3480
146
155
  notionary/page/reader/handler/toggle_renderer.py,sha256=D-kDJc1JbqM9BSGdgJxBsu1Fb8gpKU9ziNFqkS4_Tu8,2593
147
156
  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
157
+ notionary/page/reader/page_content_retriever.py,sha256=ruzRISReupp5TbVwmVjURBk8wE35YYatNpDFpSpnEEQ,2854
149
158
  notionary/page/search_filter_builder.py,sha256=m8NbFUoxxCEBpcWZIxClyix8NNzeohsOw7D-Fddi-qA,4599
150
159
  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
160
+ notionary/page/writer/handler/__init__.py,sha256=8rAzBvmeaPYoYIB5Fd3XHCKFMmbSdlDZ-C8xN-Qxx0s,794
161
+ notionary/page/writer/handler/code_handler.py,sha256=Xn5SitI2fnJkS38_RGtMEY0EOqwy8m-wnqaNetRx7hY,2671
162
+ notionary/page/writer/handler/column_handler.py,sha256=JIwvWMPiNsMKAG6UEMpkiglD0kKsXQFu1dP1V6L5Keg,5415
163
+ notionary/page/writer/handler/column_list_handler.py,sha256=k_exJ87d8i9MGV_uKxAB_mdpmcf5nfOZQ1bqHUoJHiA,5309
164
+ notionary/page/writer/handler/equation_handler.py,sha256=vflcoaSNNnLxbI_8oE_o33etmF3CxvWYnVQCJ7gbbd8,2844
165
+ notionary/page/writer/handler/line_handler.py,sha256=miuU7MXJj1Ae_B_r4a84s9tJaJ8xWNo-LAeD6RqJ-aM,1163
156
166
  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
167
+ notionary/page/writer/handler/regular_line_handler.py,sha256=2T8xOi4ybcugMJL-sPyVvU0KRVQzFSPpvLibrixIJLA,3223
168
+ notionary/page/writer/handler/table_handler.py,sha256=5r-Uh5Unc0iTbl3PXEDvE6qVCrp6YSprpOP9FRnaLY8,2581
169
+ notionary/page/writer/handler/toggle_handler.py,sha256=3ZmaAxGh4PDqk9U0Gq4FhSWdmdU4-qgQRNvv_8vQf_Q,5823
170
+ notionary/page/writer/handler/toggleable_heading_handler.py,sha256=ae0Cuzzdd5c-xKBFMYjzqRkj47wErgyFoBOZ9ytd0b4,6858
171
+ notionary/page/writer/markdown_to_notion_converter.py,sha256=ENeP7I2ui532rx9hOULrJC6DHwcYELSkItY5epzBWi4,3272
172
+ notionary/page/writer/markdown_to_notion_converter_context.py,sha256=Tys52QEGOzE_zDICI8W6pawCKSFGAjEqOyWTscUUysU,1033
173
+ notionary/page/writer/markdown_to_notion_formatting_post_processor.py,sha256=E41t_TQYLbFTmOzREDrGOUy4gGiSu9pAP8No5Qpsi28,2368
174
+ notionary/page/writer/markdown_to_notion_post_processor.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
175
+ notionary/page/writer/markdown_to_notion_text_length_post_processor.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
176
+ notionary/page/writer/notion_text_length_processor.py,sha256=WfXGouHs2KUFH1ASqloRkV6y7q2jS4vqbiEEMrmd7Qw,5744
162
177
  notionary/telemetry/__init__.py,sha256=uzPrvkPIpbzPSHCu-tObCTmZA18l3VWqk42L8WLT-XM,511
163
- notionary/telemetry/service.py,sha256=b4tWa2uRcgzc6YjPjAdwlCLZNRNjxAaxsZ1xRZ_AWmQ,4765
178
+ notionary/telemetry/service.py,sha256=FujT1ZuSHzTO0Rxa6oKlycE_Y-Qpe5lc59EGzzDf-jc,4725
164
179
  notionary/telemetry/views.py,sha256=FgFZGYaxP7pRYx-9wg18skMh_MJAwf4W3rCfe9JOZe4,1796
165
180
  notionary/user/__init__.py,sha256=qcAWjWQVn_3WxAJZpToTj2WuCHhKLdtv3bblmx7SG2U,281
166
181
  notionary/user/base_notion_user.py,sha256=qeCUmVvi62HZDQMLaT4bEuu6Dkeit8L0hBMtJaNndJI,1502
@@ -168,9 +183,9 @@ notionary/user/client.py,sha256=8gHEjiE6aNrKGlo3PMoLhIeO8R5gBgF6W7TDOsM1A4E,4515
168
183
  notionary/user/models.py,sha256=G6Emj8TqAFTGCmyfKk8hq0bZC_tL7uNdI6USNWTVfP4,2065
169
184
  notionary/user/notion_bot_user.py,sha256=AbkyBXM2__yNfGd8czxVqDEKvtFuzgQguyL5da5lvcs,7772
170
185
  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
186
+ notionary/user/notion_user_manager.py,sha256=WVgKRgodwOZU30f6NrPTyOjKwoqUjgj4_sySG_l0AoY,3897
173
187
  notionary/util/__init__.py,sha256=umFas1H4zUoxibNn-Ff6dTCWt3mkhmAG4Lu2viZ-XAU,386
188
+ notionary/util/concurrency_limiter.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
174
189
  notionary/util/factory_decorator.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
175
190
  notionary/util/factory_only.py,sha256=q-ZXUEvQ8lsuD1JQwx-ai6e9Lhie65waRE1BcRhCR_4,1235
176
191
  notionary/util/fuzzy.py,sha256=y7EroToodFSIQLD0FAfFrPEDXOUlZaDGN9ko3XjfHMw,2063
@@ -178,8 +193,8 @@ notionary/util/logging_mixin.py,sha256=WLziC-IVovKIe3n3R-ns3YYE2aP5bZVu0r_y5joxh
178
193
  notionary/util/page_id_utils.py,sha256=AA00kRO-g3Cc50tf_XW_tb5RBuPKLuBxRa0D8LYhLXg,736
179
194
  notionary/util/singleton.py,sha256=CKAvykndwPRZsA3n3MAY_XdCR59MBjjKP0vtm2BcvF0,428
180
195
  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,,
196
+ notionary/workspace.py,sha256=QP4WcOIdQnlVr4M7hpGaFT-Fori_QRhsV-SBC2lnwTU,3809
197
+ notionary-0.2.22.dist-info/LICENSE,sha256=zOm3cRT1qD49eg7vgw95MI79rpUAZa1kRBFwL2FkAr8,1120
198
+ notionary-0.2.22.dist-info/METADATA,sha256=fCrsj7caTmiKxc9Vo-hLyF1yCfxPdX_puiJIzT7DNjU,9116
199
+ notionary-0.2.22.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
200
+ notionary-0.2.22.dist-info/RECORD,,
@@ -1,80 +0,0 @@
1
- class MarkdownWhitespaceProcessor:
2
- """Helper class for processing markdown whitespace."""
3
-
4
- def __init__(self):
5
- self.processed_lines = []
6
- self.in_code_block = False
7
- self.current_code_block = []
8
-
9
- def process_lines(self, lines: list[str]) -> str:
10
- """Process all lines and return the processed markdown."""
11
- self.processed_lines = []
12
- self.in_code_block = False
13
- self.current_code_block = []
14
-
15
- for line in lines:
16
- self._process_single_line(line)
17
-
18
- # Handle unclosed code block
19
- if self.in_code_block and self.current_code_block:
20
- self._finish_code_block()
21
-
22
- return "\n".join(self.processed_lines)
23
-
24
- def _process_single_line(self, line: str) -> None:
25
- """Process a single line of markdown."""
26
- if self._is_code_block_marker(line):
27
- self._handle_code_block_marker(line)
28
- return
29
-
30
- if self.in_code_block:
31
- self.current_code_block.append(line)
32
- return
33
-
34
- # Regular text - remove leading whitespace
35
- self.processed_lines.append(line.lstrip())
36
-
37
- def _handle_code_block_marker(self, line: str) -> None:
38
- """Handle code block start/end markers."""
39
- if not self.in_code_block:
40
- # Starting new code block
41
- self.in_code_block = True
42
- self.processed_lines.append(self._normalize_code_block_start(line))
43
- self.current_code_block = []
44
- else:
45
- # Ending code block
46
- self._finish_code_block()
47
-
48
- def _finish_code_block(self) -> None:
49
- """Finish processing current code block."""
50
- self.processed_lines.extend(
51
- self._normalize_code_block_content(self.current_code_block)
52
- )
53
- self.processed_lines.append("```")
54
- self.in_code_block = False
55
-
56
- def _is_code_block_marker(self, line: str) -> bool:
57
- """Check if line is a code block marker."""
58
- return line.lstrip().startswith("```")
59
-
60
- def _normalize_code_block_start(self, line: str) -> str:
61
- """Normalize code block opening marker."""
62
- language = line.lstrip().replace("```", "", 1).strip()
63
- return "```" + language
64
-
65
- def _normalize_code_block_content(self, code_lines: list[str]) -> list[str]:
66
- """Normalize code block indentation."""
67
- if not code_lines:
68
- return []
69
-
70
- # Find minimum indentation from non-empty lines
71
- non_empty_lines = [line for line in code_lines if line.strip()]
72
- if not non_empty_lines:
73
- return [""] * len(code_lines)
74
-
75
- min_indent = min(len(line) - len(line.lstrip()) for line in non_empty_lines)
76
- if min_indent == 0:
77
- return code_lines
78
-
79
- # Remove common indentation
80
- return ["" if not line.strip() else line[min_indent:] for line in code_lines]