notionary 0.1.29__py3-none-any.whl → 0.2.1__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 (59) hide show
  1. notionary/__init__.py +5 -5
  2. notionary/database/notion_database.py +50 -59
  3. notionary/database/notion_database_factory.py +16 -20
  4. notionary/elements/audio_element.py +1 -1
  5. notionary/elements/bookmark_element.py +1 -1
  6. notionary/elements/bulleted_list_element.py +2 -8
  7. notionary/elements/callout_element.py +1 -1
  8. notionary/elements/code_block_element.py +1 -1
  9. notionary/elements/divider_element.py +1 -1
  10. notionary/elements/embed_element.py +1 -1
  11. notionary/elements/heading_element.py +2 -8
  12. notionary/elements/image_element.py +1 -1
  13. notionary/elements/mention_element.py +1 -1
  14. notionary/elements/notion_block_element.py +1 -1
  15. notionary/elements/numbered_list_element.py +2 -7
  16. notionary/elements/paragraph_element.py +1 -1
  17. notionary/elements/qoute_element.py +1 -1
  18. notionary/elements/registry/{block_element_registry.py → block_registry.py} +70 -26
  19. notionary/elements/registry/{block_element_registry_builder.py → block_registry_builder.py} +48 -32
  20. notionary/elements/table_element.py +1 -1
  21. notionary/elements/text_inline_formatter.py +13 -9
  22. notionary/elements/todo_element.py +1 -1
  23. notionary/elements/toggle_element.py +1 -1
  24. notionary/elements/toggleable_heading_element.py +1 -1
  25. notionary/elements/video_element.py +1 -1
  26. notionary/models/notion_block_response.py +264 -0
  27. notionary/models/notion_database_response.py +63 -0
  28. notionary/models/notion_page_response.py +100 -0
  29. notionary/notion_client.py +38 -5
  30. notionary/page/content/page_content_retriever.py +68 -0
  31. notionary/page/content/page_content_writer.py +103 -0
  32. notionary/page/markdown_to_notion_converter.py +5 -5
  33. notionary/page/metadata/metadata_editor.py +91 -63
  34. notionary/page/metadata/notion_icon_manager.py +55 -28
  35. notionary/page/metadata/notion_page_cover_manager.py +23 -20
  36. notionary/page/notion_page.py +223 -218
  37. notionary/page/notion_page_factory.py +102 -151
  38. notionary/page/notion_to_markdown_converter.py +5 -5
  39. notionary/page/properites/database_property_service.py +11 -55
  40. notionary/page/properites/page_property_manager.py +44 -67
  41. notionary/page/properites/property_value_extractor.py +3 -3
  42. notionary/page/relations/notion_page_relation_manager.py +165 -213
  43. notionary/page/relations/notion_page_title_resolver.py +59 -41
  44. notionary/page/relations/page_database_relation.py +7 -9
  45. notionary/{elements/prompts → prompting}/element_prompt_content.py +19 -4
  46. notionary/prompting/markdown_syntax_prompt_generator.py +92 -0
  47. notionary/util/logging_mixin.py +17 -8
  48. notionary/util/warn_direct_constructor_usage.py +54 -0
  49. {notionary-0.1.29.dist-info → notionary-0.2.1.dist-info}/METADATA +2 -1
  50. notionary-0.2.1.dist-info/RECORD +60 -0
  51. {notionary-0.1.29.dist-info → notionary-0.2.1.dist-info}/WHEEL +1 -1
  52. notionary/database/database_info_service.py +0 -43
  53. notionary/elements/prompts/synthax_prompt_builder.py +0 -150
  54. notionary/page/content/page_content_manager.py +0 -211
  55. notionary/page/properites/property_operation_result.py +0 -116
  56. notionary/page/relations/relation_operation_result.py +0 -144
  57. notionary-0.1.29.dist-info/RECORD +0 -58
  58. {notionary-0.1.29.dist-info → notionary-0.2.1.dist-info}/licenses/LICENSE +0 -0
  59. {notionary-0.1.29.dist-info → notionary-0.2.1.dist-info}/top_level.txt +0 -0
@@ -9,13 +9,24 @@ class NotionPageCoverManager(LoggingMixin):
9
9
  self.page_id = page_id
10
10
  self._client = client
11
11
 
12
- async def set_cover(self, external_url: str) -> Optional[Dict[str, Any]]:
13
- """Sets a cover image from an external URL."""
12
+ async def set_cover(self, external_url: str) -> Optional[str]:
13
+ """
14
+ Sets a cover image from an external URL and returns the new URL if successful.
14
15
 
15
- return await self._client.patch(
16
- f"pages/{self.page_id}",
17
- {"cover": {"type": "external", "external": {"url": external_url}}},
18
- )
16
+ Args:
17
+ external_url: The URL to be set as the external cover image.
18
+
19
+ Returns:
20
+ The URL of the new cover image, or None if the request failed.
21
+ """
22
+ data = {"cover": {"type": "external", "external": {"url": external_url}}}
23
+
24
+ try:
25
+ updated_page = await self._client.patch_page(self.page_id, data=data)
26
+ return updated_page.cover.external.url
27
+ except Exception as e:
28
+ self.logger.error("Failed to set cover image: %s", str(e))
29
+ return None
19
30
 
20
31
  async def set_random_gradient_cover(self) -> Optional[Dict[str, Any]]:
21
32
  """Sets a random gradient cover from Notion's default gradient covers."""
@@ -32,22 +43,14 @@ class NotionPageCoverManager(LoggingMixin):
32
43
 
33
44
  return await self.set_cover(random_cover_url)
34
45
 
35
- async def get_cover_url(self) -> str:
46
+ async def get_cover_url(self) -> Optional[str]:
36
47
  """Retrieves the current cover image URL of the page."""
37
-
38
48
  page_data = await self._client.get_page(self.page_id)
39
49
 
40
- if not page_data:
41
- return ""
42
-
43
- cover = page_data.get("cover")
44
-
45
- if not cover or not isinstance(cover, dict):
46
- return ""
47
-
48
- external = cover.get("external")
50
+ if not page_data or not page_data.cover:
51
+ return None
49
52
 
50
- if not external or not isinstance(external, dict):
51
- return ""
53
+ if page_data.cover.type == "external":
54
+ return page_data.cover.external.url
52
55
 
53
- return external.get("url", "")
56
+ return None