notionary 0.2.12__py3-none-any.whl → 0.2.14__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- notionary/__init__.py +3 -20
- notionary/{notion_client.py → base_notion_client.py} +92 -98
- notionary/blocks/__init__.py +61 -0
- notionary/{elements → blocks}/audio_element.py +6 -4
- notionary/{elements → blocks}/bookmark_element.py +3 -6
- notionary/{elements → blocks}/bulleted_list_element.py +5 -7
- notionary/{elements → blocks}/callout_element.py +5 -8
- notionary/{elements → blocks}/code_block_element.py +4 -6
- notionary/{elements → blocks}/column_element.py +3 -6
- notionary/{elements → blocks}/divider_element.py +3 -6
- notionary/{elements → blocks}/embed_element.py +4 -6
- notionary/{elements → blocks}/heading_element.py +5 -9
- notionary/{elements → blocks}/image_element.py +4 -6
- notionary/{elements → blocks}/mention_element.py +3 -7
- notionary/blocks/notion_block_client.py +26 -0
- notionary/blocks/notion_block_element.py +34 -0
- notionary/{elements → blocks}/numbered_list_element.py +4 -7
- notionary/{elements → blocks}/paragraph_element.py +4 -7
- notionary/{prompting/element_prompt_content.py → blocks/prompts/element_prompt_builder.py} +1 -40
- notionary/blocks/prompts/element_prompt_content.py +41 -0
- notionary/{elements → blocks}/qoute_element.py +4 -6
- notionary/{elements → blocks}/registry/block_registry.py +4 -26
- notionary/{elements → blocks}/registry/block_registry_builder.py +26 -25
- notionary/{elements → blocks}/table_element.py +6 -8
- notionary/{elements → blocks}/text_inline_formatter.py +1 -4
- notionary/{elements → blocks}/todo_element.py +6 -8
- notionary/{elements → blocks}/toggle_element.py +3 -6
- notionary/{elements → blocks}/toggleable_heading_element.py +5 -8
- notionary/{elements → blocks}/video_element.py +4 -6
- notionary/cli/main.py +245 -53
- notionary/cli/onboarding.py +117 -0
- notionary/database/__init__.py +0 -0
- notionary/database/client.py +132 -0
- notionary/database/database_exceptions.py +13 -0
- notionary/database/factory.py +0 -0
- notionary/database/filter_builder.py +175 -0
- notionary/database/notion_database.py +339 -128
- notionary/database/notion_database_provider.py +230 -0
- notionary/elements/__init__.py +0 -0
- notionary/models/notion_database_response.py +294 -13
- notionary/models/notion_page_response.py +9 -31
- notionary/models/search_response.py +0 -0
- notionary/page/__init__.py +0 -0
- notionary/page/client.py +110 -0
- notionary/page/content/page_content_retriever.py +5 -20
- notionary/page/content/page_content_writer.py +3 -4
- notionary/page/formatting/markdown_to_notion_converter.py +1 -3
- notionary/{prompting → page}/markdown_syntax_prompt_generator.py +1 -2
- notionary/page/notion_page.py +354 -317
- notionary/page/notion_to_markdown_converter.py +1 -4
- notionary/page/properites/property_value_extractor.py +0 -64
- notionary/page/{properites/property_formatter.py → property_formatter.py} +7 -4
- notionary/page/search_filter_builder.py +131 -0
- notionary/page/utils.py +60 -0
- notionary/util/__init__.py +12 -3
- notionary/util/factory_decorator.py +33 -0
- notionary/util/fuzzy_matcher.py +82 -0
- notionary/util/page_id_utils.py +0 -21
- notionary/util/singleton_metaclass.py +22 -0
- notionary/workspace.py +69 -0
- {notionary-0.2.12.dist-info → notionary-0.2.14.dist-info}/METADATA +4 -1
- notionary-0.2.14.dist-info/RECORD +72 -0
- notionary/database/database_discovery.py +0 -142
- notionary/database/notion_database_factory.py +0 -193
- notionary/elements/notion_block_element.py +0 -70
- notionary/exceptions/database_exceptions.py +0 -76
- notionary/exceptions/page_creation_exception.py +0 -9
- notionary/page/metadata/metadata_editor.py +0 -150
- notionary/page/metadata/notion_icon_manager.py +0 -77
- notionary/page/metadata/notion_page_cover_manager.py +0 -56
- notionary/page/notion_page_factory.py +0 -332
- notionary/page/properites/database_property_service.py +0 -302
- notionary/page/properites/page_property_manager.py +0 -152
- notionary/page/relations/notion_page_relation_manager.py +0 -350
- notionary/page/relations/notion_page_title_resolver.py +0 -104
- notionary/page/relations/page_database_relation.py +0 -68
- notionary/telemetry/__init__.py +0 -7
- notionary/telemetry/telemetry.py +0 -226
- notionary/telemetry/track_usage_decorator.py +0 -76
- notionary/util/warn_direct_constructor_usage.py +0 -54
- notionary-0.2.12.dist-info/RECORD +0 -70
- /notionary/util/{singleton.py → singleton_decorator.py} +0 -0
- {notionary-0.2.12.dist-info → notionary-0.2.14.dist-info}/WHEEL +0 -0
- {notionary-0.2.12.dist-info → notionary-0.2.14.dist-info}/entry_points.txt +0 -0
- {notionary-0.2.12.dist-info → notionary-0.2.14.dist-info}/licenses/LICENSE +0 -0
- {notionary-0.2.12.dist-info → notionary-0.2.14.dist-info}/top_level.txt +0 -0
notionary/telemetry/telemetry.py
DELETED
@@ -1,226 +0,0 @@
|
|
1
|
-
import os
|
2
|
-
import uuid
|
3
|
-
import atexit
|
4
|
-
import signal
|
5
|
-
import threading
|
6
|
-
from pathlib import Path
|
7
|
-
from typing import Dict, Any, Optional
|
8
|
-
from posthog import Posthog
|
9
|
-
from dotenv import load_dotenv
|
10
|
-
|
11
|
-
from notionary.util import LoggingMixin
|
12
|
-
from notionary.util import singleton
|
13
|
-
|
14
|
-
load_dotenv()
|
15
|
-
|
16
|
-
@singleton
|
17
|
-
class NotionaryTelemetry(LoggingMixin):
|
18
|
-
"""
|
19
|
-
Anonymous telemetry for Notionary - enabled by default.
|
20
|
-
Disable via: ANONYMIZED_TELEMETRY=false
|
21
|
-
"""
|
22
|
-
|
23
|
-
USER_ID_PATH = str(Path.home() / ".cache" / "notionary" / "telemetry_user_id")
|
24
|
-
PROJECT_API_KEY = (
|
25
|
-
"phc_gItKOx21Tc0l07C1taD0QPpqFnbWgWjVfRjF6z24kke" # write-only so no worries
|
26
|
-
)
|
27
|
-
HOST = "https://eu.i.posthog.com"
|
28
|
-
|
29
|
-
_logged_init_message = False
|
30
|
-
|
31
|
-
def __init__(self):
|
32
|
-
# Default: enabled, disable via ANONYMIZED_TELEMETRY=false
|
33
|
-
telemetry_setting = os.getenv("ANONYMIZED_TELEMETRY", "true").lower()
|
34
|
-
self.enabled = telemetry_setting != "false"
|
35
|
-
|
36
|
-
self._user_id = None
|
37
|
-
self._client = None
|
38
|
-
self._shutdown_lock = threading.Lock()
|
39
|
-
self._is_shutdown = False
|
40
|
-
self._shutdown_registered = False
|
41
|
-
|
42
|
-
if self.enabled:
|
43
|
-
self._initialize_client()
|
44
|
-
self._register_shutdown_handlers()
|
45
|
-
|
46
|
-
def _register_shutdown_handlers(self):
|
47
|
-
"""Register shutdown handlers for clean exit"""
|
48
|
-
with self._shutdown_lock:
|
49
|
-
if self._shutdown_registered:
|
50
|
-
return
|
51
|
-
|
52
|
-
try:
|
53
|
-
# Register atexit handler for normal program termination
|
54
|
-
atexit.register(self._atexit_handler)
|
55
|
-
|
56
|
-
# Register signal handlers for SIGINT (Ctrl+C) and SIGTERM
|
57
|
-
signal.signal(signal.SIGINT, self._signal_handler)
|
58
|
-
signal.signal(signal.SIGTERM, self._signal_handler)
|
59
|
-
|
60
|
-
self._shutdown_registered = True
|
61
|
-
self.logger.debug("Telemetry shutdown handlers registered")
|
62
|
-
|
63
|
-
except Exception as e:
|
64
|
-
self.logger.debug(f"Failed to register shutdown handlers: {e}")
|
65
|
-
|
66
|
-
def _signal_handler(self, signum, frame):
|
67
|
-
"""Handle SIGINT (Ctrl+C) and SIGTERM signals"""
|
68
|
-
signal_name = "SIGINT" if signum == signal.SIGINT else f"SIG{signum}"
|
69
|
-
self.logger.debug(f"Received {signal_name}, shutting down telemetry...")
|
70
|
-
|
71
|
-
self.shutdown(timeout=5.0) # Quick shutdown for signals
|
72
|
-
|
73
|
-
# Let the original signal handler take over (or exit)
|
74
|
-
if signum == signal.SIGINT:
|
75
|
-
# Restore default handler and re-raise
|
76
|
-
signal.signal(signal.SIGINT, signal.SIG_DFL)
|
77
|
-
os.kill(os.getpid(), signal.SIGINT)
|
78
|
-
|
79
|
-
def _atexit_handler(self):
|
80
|
-
"""Handle normal program exit"""
|
81
|
-
self.logger.debug("Normal program exit, shutting down telemetry...")
|
82
|
-
self.shutdown(timeout=10.0)
|
83
|
-
|
84
|
-
@property
|
85
|
-
def user_id(self) -> str:
|
86
|
-
"""Anonymous, persistent user ID"""
|
87
|
-
if self._user_id:
|
88
|
-
return self._user_id
|
89
|
-
|
90
|
-
try:
|
91
|
-
if not os.path.exists(self.USER_ID_PATH):
|
92
|
-
os.makedirs(os.path.dirname(self.USER_ID_PATH), exist_ok=True)
|
93
|
-
with open(self.USER_ID_PATH, "w") as f:
|
94
|
-
new_user_id = str(uuid.uuid4())
|
95
|
-
f.write(new_user_id)
|
96
|
-
self._user_id = new_user_id
|
97
|
-
else:
|
98
|
-
with open(self.USER_ID_PATH, "r") as f:
|
99
|
-
self._user_id = f.read().strip()
|
100
|
-
|
101
|
-
return self._user_id
|
102
|
-
except Exception as e:
|
103
|
-
self.logger.debug(f"Error getting user ID: {e}")
|
104
|
-
return "anonymous_user"
|
105
|
-
|
106
|
-
def capture(self, event_name: str, properties: Optional[Dict[str, Any]] = None):
|
107
|
-
"""
|
108
|
-
Safe event tracking that never affects library functionality
|
109
|
-
|
110
|
-
Args:
|
111
|
-
event_name: Event name (e.g. 'page_factory_used')
|
112
|
-
properties: Event properties as dictionary
|
113
|
-
"""
|
114
|
-
if not self.enabled or not self._client or self._is_shutdown:
|
115
|
-
return
|
116
|
-
|
117
|
-
try:
|
118
|
-
# Add base properties
|
119
|
-
event_properties = {
|
120
|
-
"library": "notionary",
|
121
|
-
"library_version": self._get_notionary_version(),
|
122
|
-
**(properties or {}),
|
123
|
-
}
|
124
|
-
|
125
|
-
self._client.capture(
|
126
|
-
distinct_id=self.user_id, event=event_name, properties=event_properties
|
127
|
-
)
|
128
|
-
|
129
|
-
except Exception:
|
130
|
-
pass
|
131
|
-
|
132
|
-
def flush(self, timeout: float = 5.0):
|
133
|
-
"""
|
134
|
-
Flush events with timeout
|
135
|
-
|
136
|
-
Args:
|
137
|
-
timeout: Maximum time to wait for flush to complete
|
138
|
-
"""
|
139
|
-
if not self.enabled or not self._client or self._is_shutdown:
|
140
|
-
return
|
141
|
-
|
142
|
-
try:
|
143
|
-
# PostHog flush doesn't support timeout directly, so we do it in a thread
|
144
|
-
flush_thread = threading.Thread(target=self._client.flush)
|
145
|
-
flush_thread.daemon = True
|
146
|
-
flush_thread.start()
|
147
|
-
flush_thread.join(timeout=timeout)
|
148
|
-
|
149
|
-
if flush_thread.is_alive():
|
150
|
-
self.logger.warning(f"Telemetry flush timed out after {timeout}s")
|
151
|
-
else:
|
152
|
-
self.logger.debug("Telemetry events flushed successfully")
|
153
|
-
|
154
|
-
except Exception as e:
|
155
|
-
self.logger.debug(f"Error during telemetry flush: {e}")
|
156
|
-
|
157
|
-
def shutdown(self, timeout: float = 10.0):
|
158
|
-
"""
|
159
|
-
Clean shutdown of telemetry with timeout
|
160
|
-
|
161
|
-
Args:
|
162
|
-
timeout: Maximum time to wait for shutdown
|
163
|
-
"""
|
164
|
-
with self._shutdown_lock:
|
165
|
-
if self._is_shutdown:
|
166
|
-
return
|
167
|
-
|
168
|
-
self._is_shutdown = True
|
169
|
-
|
170
|
-
try:
|
171
|
-
if self._client:
|
172
|
-
# First try to flush remaining events
|
173
|
-
self.logger.debug("Flushing telemetry events before shutdown...")
|
174
|
-
self.flush(timeout=timeout * 0.7) # Use 70% of timeout for flush
|
175
|
-
|
176
|
-
# Then shutdown the client
|
177
|
-
shutdown_thread = threading.Thread(target=self._client.shutdown)
|
178
|
-
shutdown_thread.daemon = True
|
179
|
-
shutdown_thread.start()
|
180
|
-
shutdown_thread.join(timeout=timeout * 0.3) # Use 30% for shutdown
|
181
|
-
|
182
|
-
if shutdown_thread.is_alive():
|
183
|
-
self.logger.warning(f"Telemetry client shutdown timed out after {timeout}s")
|
184
|
-
else:
|
185
|
-
self.logger.debug("Telemetry client shut down successfully")
|
186
|
-
|
187
|
-
except Exception as e:
|
188
|
-
self.logger.debug(f"Error during telemetry shutdown: {e}")
|
189
|
-
finally:
|
190
|
-
self._client = None
|
191
|
-
|
192
|
-
def _initialize_client(self):
|
193
|
-
"""Initializes PostHog client and shows startup message"""
|
194
|
-
try:
|
195
|
-
self._client = Posthog(
|
196
|
-
project_api_key=self.PROJECT_API_KEY,
|
197
|
-
host=self.HOST,
|
198
|
-
disable_geoip=True,
|
199
|
-
)
|
200
|
-
if not self._logged_init_message:
|
201
|
-
self.logger.info(
|
202
|
-
"Anonymous telemetry enabled to improve Notionary. "
|
203
|
-
"To disable: export ANONYMIZED_TELEMETRY=false"
|
204
|
-
)
|
205
|
-
self._logged_init_message = True
|
206
|
-
|
207
|
-
self._track_initialization()
|
208
|
-
|
209
|
-
except Exception as e:
|
210
|
-
self.logger.debug(f"Telemetry initialization failed: {e}")
|
211
|
-
self.enabled = False
|
212
|
-
self._client = None
|
213
|
-
|
214
|
-
def _track_initialization(self):
|
215
|
-
"""Tracks library initialization"""
|
216
|
-
self.capture(
|
217
|
-
"notionary_initialized",
|
218
|
-
{
|
219
|
-
"version": self._get_notionary_version(),
|
220
|
-
},
|
221
|
-
)
|
222
|
-
|
223
|
-
def _get_notionary_version(self) -> str:
|
224
|
-
"""Determines the Notionary version"""
|
225
|
-
import notionary
|
226
|
-
return getattr(notionary, "__version__", "0.2.10")
|
@@ -1,76 +0,0 @@
|
|
1
|
-
from functools import wraps
|
2
|
-
from typing import Any, Callable, Dict, Optional
|
3
|
-
from notionary.telemetry import NotionaryTelemetry
|
4
|
-
|
5
|
-
|
6
|
-
def track_usage(event_name: Optional[str] = None, properties: Optional[Dict[str, Any]] = None):
|
7
|
-
"""
|
8
|
-
Simple decorator to track function usage.
|
9
|
-
|
10
|
-
Args:
|
11
|
-
event_name: Custom event name (defaults to function name)
|
12
|
-
properties: Additional properties to track
|
13
|
-
|
14
|
-
Usage:
|
15
|
-
@track_usage()
|
16
|
-
def my_function():
|
17
|
-
pass
|
18
|
-
|
19
|
-
@track_usage('custom_event_name')
|
20
|
-
def my_function():
|
21
|
-
pass
|
22
|
-
|
23
|
-
@track_usage('custom_event', {'feature': 'advanced'})
|
24
|
-
def my_function():
|
25
|
-
pass
|
26
|
-
"""
|
27
|
-
def decorator(func: Callable) -> Callable:
|
28
|
-
@wraps(func)
|
29
|
-
def wrapper(*args, **kwargs):
|
30
|
-
telemetry = NotionaryTelemetry()
|
31
|
-
|
32
|
-
# Generate event name and properties
|
33
|
-
event = event_name or _generate_event_name(func, args)
|
34
|
-
event_properties = _build_properties(func, args, properties)
|
35
|
-
|
36
|
-
# Track and execute
|
37
|
-
telemetry.capture(event, event_properties)
|
38
|
-
return func(*args, **kwargs)
|
39
|
-
|
40
|
-
return wrapper
|
41
|
-
return decorator
|
42
|
-
|
43
|
-
|
44
|
-
def _get_class_name(func: Callable, args: tuple) -> Optional[str]:
|
45
|
-
"""Extract class name from function or arguments."""
|
46
|
-
if args and hasattr(args[0], '__class__'):
|
47
|
-
return args[0].__class__.__name__
|
48
|
-
|
49
|
-
if hasattr(func, '__qualname__') and '.' in func.__qualname__:
|
50
|
-
return func.__qualname__.split('.')[0]
|
51
|
-
|
52
|
-
return None
|
53
|
-
|
54
|
-
|
55
|
-
def _generate_event_name(func: Callable, args: tuple) -> str:
|
56
|
-
"""Generate event name from function and class info."""
|
57
|
-
class_name = _get_class_name(func, args)
|
58
|
-
|
59
|
-
if class_name:
|
60
|
-
return f"{class_name.lower()}_{func.__name__}_used"
|
61
|
-
|
62
|
-
return f"{func.__name__}_used"
|
63
|
-
|
64
|
-
|
65
|
-
def _build_properties(func: Callable, args: tuple, properties: Optional[Dict[str, Any]]) -> Dict[str, Any]:
|
66
|
-
"""Build event properties with function and class info."""
|
67
|
-
event_properties = {
|
68
|
-
'function_name': func.__name__,
|
69
|
-
**(properties or {})
|
70
|
-
}
|
71
|
-
|
72
|
-
class_name = _get_class_name(func, args)
|
73
|
-
if class_name:
|
74
|
-
event_properties['class_name'] = class_name
|
75
|
-
|
76
|
-
return event_properties
|
@@ -1,54 +0,0 @@
|
|
1
|
-
import functools
|
2
|
-
import inspect
|
3
|
-
from typing import Callable, Any, TypeVar, cast
|
4
|
-
|
5
|
-
F = TypeVar("F", bound=Callable[..., Any])
|
6
|
-
|
7
|
-
|
8
|
-
def warn_direct_constructor_usage(func: F) -> F:
|
9
|
-
"""
|
10
|
-
Method decorator that logs a warning when the constructor is called directly
|
11
|
-
instead of through a factory method.
|
12
|
-
|
13
|
-
This is an advisory decorator - it only logs a warning and doesn't
|
14
|
-
prevent direct constructor usage.
|
15
|
-
"""
|
16
|
-
|
17
|
-
@functools.wraps(func)
|
18
|
-
def wrapper(self, *args, **kwargs):
|
19
|
-
# Get the call stack
|
20
|
-
stack = inspect.stack()
|
21
|
-
|
22
|
-
self._from_factory = False
|
23
|
-
|
24
|
-
search_depth = min(6, len(stack))
|
25
|
-
|
26
|
-
for i in range(1, search_depth):
|
27
|
-
if i >= len(stack):
|
28
|
-
break
|
29
|
-
|
30
|
-
caller_frame = stack[i]
|
31
|
-
caller_name = caller_frame.function
|
32
|
-
|
33
|
-
# Debug logging might be helpful during development
|
34
|
-
# print(f"Frame {i}: {caller_name}")
|
35
|
-
|
36
|
-
# If called from a factory method, mark it and break
|
37
|
-
if caller_name.startswith("create_from_") or caller_name.startswith(
|
38
|
-
"from_"
|
39
|
-
):
|
40
|
-
self._from_factory = True
|
41
|
-
break
|
42
|
-
|
43
|
-
# If not from factory, log warning
|
44
|
-
if not self._from_factory and hasattr(self, "logger"):
|
45
|
-
self.logger.warning(
|
46
|
-
"Advisory: Direct constructor usage is discouraged. "
|
47
|
-
"Consider using factory methods like create_from_page_id(), "
|
48
|
-
"create_from_url(), or create_from_page_name() instead."
|
49
|
-
)
|
50
|
-
|
51
|
-
# Call the original __init__
|
52
|
-
return func(self, *args, **kwargs)
|
53
|
-
|
54
|
-
return cast(F, wrapper)
|
@@ -1,70 +0,0 @@
|
|
1
|
-
notionary/__init__.py,sha256=I4kPJ_LEy_IIQuBVGZ-U_kiIUWeRUP9DZ_F3w9BvS-4,809
|
2
|
-
notionary/notion_client.py,sha256=gkREAr8LkUUKK9cOvq72r8jNjlXDleBP2fYm7LjjbjM,7311
|
3
|
-
notionary/cli/main.py,sha256=GmUfdrJZjHYo689ZhrMuA4Lr_sBE2YeqrkFloXgrfvY,6663
|
4
|
-
notionary/cli/onboarding.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
5
|
-
notionary/database/database_discovery.py,sha256=l9IjthwdA_Y_k_JXcAW-KnvZDwNYylIbsrQ5cpgtb5w,4484
|
6
|
-
notionary/database/notion_database.py,sha256=yTGMK1EOuJDNiP6boc_dvWDLTTEhOOYa_ZdJWiOP19c,7695
|
7
|
-
notionary/database/notion_database_factory.py,sha256=pOu4MDu7jaSkNQHk-TSEezsJ1pPGJXiSTOouygh2JuY,6783
|
8
|
-
notionary/database/models/page_result.py,sha256=Vmm5_oYpYAkIIJVoTd1ZZGloeC3cmFLMYP255mAmtaw,233
|
9
|
-
notionary/elements/audio_element.py,sha256=wXSo0DQs_KIVdLB-Ax5Yk4puW-_gFwAbJHcgcpwZjoA,5392
|
10
|
-
notionary/elements/bookmark_element.py,sha256=bDJEMTLC1E3qUIjphFJC9l60ZAeJqZOWEvS__Y5Iq00,8192
|
11
|
-
notionary/elements/bulleted_list_element.py,sha256=Ax6tIGtc92O57QKVWRKi2Sgkbmd6KqkSmssTcj17Tjg,2711
|
12
|
-
notionary/elements/callout_element.py,sha256=w45gJogoqf4Z9aVqSq7toaU06IWWM_et5dCWywj_oeo,4539
|
13
|
-
notionary/elements/code_block_element.py,sha256=PrsV58fzblmZz0vRkuAG2TT0kpiMglq0UlKaR-B-dJw,7576
|
14
|
-
notionary/elements/column_element.py,sha256=yfWSLEClcxrWLteQClabaIvjay2h8krB6u5rfbnBRBI,12781
|
15
|
-
notionary/elements/divider_element.py,sha256=bdGTgMgW8Uk6Fu7oy2UBrDaQ_2XiLzPNwF3JmrBS00I,2379
|
16
|
-
notionary/elements/embed_element.py,sha256=QYyiKTbAM6COPqe61a3jSg6m2a4orUpA6l37lrn4-G0,4626
|
17
|
-
notionary/elements/heading_element.py,sha256=XDO_hgiG-J2nVF3hwcpvsXte6uGDAAwyHx661lD-1H8,3215
|
18
|
-
notionary/elements/image_element.py,sha256=agV8ZNwoJNOIvaJNARs2osdbe1T5MHPNbrzu7L19uRI,4805
|
19
|
-
notionary/elements/mention_element.py,sha256=-8GbeaiGNglw5MZulomSa-hUh32HaZowAROeCgzMqdA,8274
|
20
|
-
notionary/elements/notion_block_element.py,sha256=cou_87mAkj7U3LLU0kXJrbxVl8VusnlVBYYb4cchOPo,2603
|
21
|
-
notionary/elements/numbered_list_element.py,sha256=iiDzjOwc5Fnv2RQsaTLeOtRVQdshG4rRQJa4LMJjCvY,2710
|
22
|
-
notionary/elements/paragraph_element.py,sha256=EWUac9oq5zXso0svE5vTKNWlpq6sRdJxxVWYMEmYLz4,3302
|
23
|
-
notionary/elements/qoute_element.py,sha256=cIa7S0G9Kb4qR5EXWOLJGPn0IzWm1zLujnzzO6t4-D0,6169
|
24
|
-
notionary/elements/table_element.py,sha256=acIEoDz8tblj9pPmE5Gr0Ov-S9qJOTkEDNcUPBfsN4I,11296
|
25
|
-
notionary/elements/text_inline_formatter.py,sha256=q1WePwTxhSkjhTFylcyAbhxaWLo_sjYS3Q_mIPgsKb4,8625
|
26
|
-
notionary/elements/todo_element.py,sha256=r7H1KcEW7Iq6pQrhsPRBwHn_3ok26tR2fJf53U_kr5I,4171
|
27
|
-
notionary/elements/toggle_element.py,sha256=caPT8wAo7ccwT2pzUzySrImnUlVB2cigFBGe32vwjJk,11129
|
28
|
-
notionary/elements/toggleable_heading_element.py,sha256=mUzR1HrkOJEgzjIgVgtInvLoi4YzsPJ0pR3FO_OlD5U,10007
|
29
|
-
notionary/elements/video_element.py,sha256=Y2JOvb4fovnY2nPAtTPSbdtk-HaRdWqg6RXr-_a2WOw,5774
|
30
|
-
notionary/elements/registry/block_registry.py,sha256=g0id_Q6guzTyNY6HfnB9AjOBvCR4CvtpnUeFAY8kgY0,5027
|
31
|
-
notionary/elements/registry/block_registry_builder.py,sha256=5zRKnw2102rAeHpANs6Csu4DVufOazf1peEovChWcgs,9572
|
32
|
-
notionary/exceptions/database_exceptions.py,sha256=I-Tx6bYRLpi5pjGPtbT-Mqxvz3BFgYTiuZxknJeLxtI,2638
|
33
|
-
notionary/exceptions/page_creation_exception.py,sha256=4v7IuZD6GsQLrqhDLriGjuG3ML638gAO53zDCrLePuU,281
|
34
|
-
notionary/models/notion_block_response.py,sha256=gzL4C6K9QPcaMS6NbAZaRceSEnMbNwYBVVzxysza5VU,6002
|
35
|
-
notionary/models/notion_database_response.py,sha256=FMAasQP20S12J_KMdMlNpcHHwxFKX2YtbE4Q9xn-ruQ,1213
|
36
|
-
notionary/models/notion_page_response.py,sha256=r4fwMwwDocj92JdbSmyrzIqBKsnEaz4aDUiPabrg9BM,1762
|
37
|
-
notionary/page/notion_page.py,sha256=CnEr5S425t7r8n4mZERwShlXsXnR2G7bbYjO8yb2oaU,18032
|
38
|
-
notionary/page/notion_page_factory.py,sha256=p75yhr6FdYl9aG8Ttpf5pyuQiMJB0CAYMkfcVLI8HP0,12028
|
39
|
-
notionary/page/notion_to_markdown_converter.py,sha256=vUQss0J7LUFLULGvW27PjaTFuWi8OsRQAUBowSYorkM,6408
|
40
|
-
notionary/page/content/notion_page_content_chunker.py,sha256=kWJnV9GLU5YLgSVPKOjwMBbG_CMAmVRkuDtwJYb_UAA,3316
|
41
|
-
notionary/page/content/page_content_retriever.py,sha256=MoRNwVyBacQEPFu-XseahKEFait0q8tjuhFUXHOBrMo,2208
|
42
|
-
notionary/page/content/page_content_writer.py,sha256=PkH3i3sE8zbAUS8dtMbWHwKyq8yubuvzXCzeBZeUFKA,7436
|
43
|
-
notionary/page/formatting/markdown_to_notion_converter.py,sha256=-CdGefHdeXtF3TyipOLkyrD6yFJbFDLmZMveoDiYBLo,17463
|
44
|
-
notionary/page/formatting/spacer_rules.py,sha256=j2RHvdXT3HxXPVBEuCtulyy9cPxsEcOmj71pJqV-D3M,15677
|
45
|
-
notionary/page/metadata/metadata_editor.py,sha256=0I-h5BbLpI_VbAobSdslK8G7TPWoHJb_fAPDtDEOc08,5116
|
46
|
-
notionary/page/metadata/notion_icon_manager.py,sha256=_K23i1qsBW052ZuDez5X1l3S9zTRwkRoTnHnoeED98g,2562
|
47
|
-
notionary/page/metadata/notion_page_cover_manager.py,sha256=2dQLw890gUGz2nEorAhGNkgLLQNlQKDa1VExABXiUOc,2201
|
48
|
-
notionary/page/properites/database_property_service.py,sha256=RWNsze5bImUz4TXVReeFNtNSxlqOylEYS4EOL3bHxdQ,9895
|
49
|
-
notionary/page/properites/page_property_manager.py,sha256=1Ga1Qf91yfxaLT55qNJuf5UMz9Z3-8xDZwEHptTqGdM,5729
|
50
|
-
notionary/page/properites/property_formatter.py,sha256=k5yFPh87PX5yMaJqZiYjP2ZI8xbxXToYc6PMwNZ8Mpw,3653
|
51
|
-
notionary/page/properites/property_value_extractor.py,sha256=5coK0-hSogSLeFL2P337ruGXuHHc447hP_Ry5niOI6M,2342
|
52
|
-
notionary/page/relations/notion_page_relation_manager.py,sha256=PiwmOex8I4iR_9T8J0v_W58vS-E_BbTE1fsnnXD3nU4,11055
|
53
|
-
notionary/page/relations/notion_page_title_resolver.py,sha256=LN89y-Tc0Rk81TiTeA5WsFqhittLLykdzn3x5Ok29YI,3561
|
54
|
-
notionary/page/relations/page_database_relation.py,sha256=nkelofYzfuIFjmM7vR6IGJpWUG9XPmSDnU1WR8WtQrs,2231
|
55
|
-
notionary/prompting/element_prompt_content.py,sha256=tHref-SKA81Ua_IQD2Km7y7BvFtHl74haSIjHNYE3FE,4403
|
56
|
-
notionary/prompting/markdown_syntax_prompt_generator.py,sha256=_1qIYlqSfI6q6Fut10t6gGwTQuS8c3QBcC_5DBme9Mo,5084
|
57
|
-
notionary/telemetry/__init__.py,sha256=qdFGrhOhUb_HPMLS4kLSr1BJNfb5-LzHwLmx-NYCDsw,156
|
58
|
-
notionary/telemetry/telemetry.py,sha256=SEwEsegNhX7xblKnlk9qCDqKOTtf8sGtnNWbLiOVk7g,8182
|
59
|
-
notionary/telemetry/track_usage_decorator.py,sha256=rmxwySb1PfZI1mXXU0G_W9Fpn6ByslYrDjsU4JYnMJ4,2421
|
60
|
-
notionary/util/__init__.py,sha256=ra1jHFFiQNWYDzmVb81OVhtshzkZ0GcLVI8YDODYj3w,235
|
61
|
-
notionary/util/logging_mixin.py,sha256=d5sRSmUtgQeuckdNBkO025IXPGe4oOb-7ueVAIP8amU,1846
|
62
|
-
notionary/util/page_id_utils.py,sha256=EYNMxgf-7ghzL5K8lKZBZfW7g5CsdY0Xuj4IYmU8RPk,1381
|
63
|
-
notionary/util/singleton.py,sha256=CKAvykndwPRZsA3n3MAY_XdCR59MBjjKP0vtm2BcvF0,428
|
64
|
-
notionary/util/warn_direct_constructor_usage.py,sha256=vyJR73F95XVSRWIbyij-82IGOpAne9SBPM25eDpZfSU,1715
|
65
|
-
notionary-0.2.12.dist-info/licenses/LICENSE,sha256=zOm3cRT1qD49eg7vgw95MI79rpUAZa1kRBFwL2FkAr8,1120
|
66
|
-
notionary-0.2.12.dist-info/METADATA,sha256=vZNayJWGNmJAJBfitVjQXYEkJC2YjJRE0fmEK6s3Aeg,7582
|
67
|
-
notionary-0.2.12.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
68
|
-
notionary-0.2.12.dist-info/entry_points.txt,sha256=V7X21u3QNm7h7p6Cx0Sx2SO3mtmA7gVwXM8lNYnv9fk,54
|
69
|
-
notionary-0.2.12.dist-info/top_level.txt,sha256=fhONa6BMHQXqthx5PanWGbPL0b8rdFqhrJKVLf_adSs,10
|
70
|
-
notionary-0.2.12.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|