Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
import json
from datetime import datetime
from icalendar import Calendar, Event
from notion.client import NotionClient
from notion.collection import CalendarView
from notion.block import BasicBlock
from notion.user import User
# Hack some representation stuff into notion-py
BasicBlock.__repr__ = BasicBlock.__str__ = lambda self: self.title
User.__repr__ = User.__str__ = lambda self: self.given_name or self.family_name
def get_ical(client, calendar_url, title_format):
calendar = client.get_block(calendar_url)
for view in calendar.views:
if isinstance(view, CalendarView):
calendar_view = view
break
else:
raise Exception(f"Couldn't find a calendar view in the following list: {calendar.views}")
calendar_query = calendar_view.build_query()
calendar_entries = calendar_query.execute()
collection = calendar.collection
class FactoryBlock(BasicBlock):
"""
Also known as a "Template Button". The title is the button text, and the children are the templates to clone.
"""
_type = "factory"
class HeaderBlock(BasicBlock):
_type = "header"
class SubheaderBlock(BasicBlock):
_type = "sub_header"
class SubsubheaderBlock(BasicBlock):
_type = "sub_sub_header"
class PageBlock(BasicBlock):
_type = "page"
icon = field_map(
"format.page_icon",
api_to_python=add_signed_prefix_as_needed,
class BulletedListBlock(BasicBlock):
_type = "bulleted_list"
class NumberedListBlock(BasicBlock):
_type = "numbered_list"
class ToggleBlock(BasicBlock):
_type = "toggle"
class QuoteBlock(BasicBlock):
_type = "quote"
class TextBlock(BasicBlock):
_type = "text"
class EquationBlock(BasicBlock):
latex = field_map(
["properties", "title"],
python_to_api=lambda x: [[x]],
api_to_python=lambda x: x[0][0],
)
_type = "code"
language = property_map("language")
wrap = field_map("format.code_wrap")
class FactoryBlock(BasicBlock):
"""
Also known as a "Template Button". The title is the button text, and the children are the templates to clone.
"""
_type = "factory"
class HeaderBlock(BasicBlock):
_type = "header"
class SubheaderBlock(BasicBlock):
_type = "sub_header"
class SubsubheaderBlock(BasicBlock):
_type = "sub_sub_header"
class PageBlock(BasicBlock):
class NumberedListBlock(BasicBlock):
_type = "numbered_list"
class ToggleBlock(BasicBlock):
_type = "toggle"
class QuoteBlock(BasicBlock):
_type = "quote"
class TextBlock(BasicBlock):
_type = "text"
class EquationBlock(BasicBlock):
latex = field_map(
["properties", "title"],
python_to_api=lambda x: [[x]],
api_to_python=lambda x: x[0][0],
)
_type = "equation"
class MediaBlock(Block):
"""
_type = "factory"
class HeaderBlock(BasicBlock):
_type = "header"
class SubheaderBlock(BasicBlock):
_type = "sub_header"
class SubsubheaderBlock(BasicBlock):
_type = "sub_sub_header"
class PageBlock(BasicBlock):
_type = "page"
icon = field_map(
"format.page_icon",
api_to_python=add_signed_prefix_as_needed,
python_to_api=remove_signed_prefix_as_needed,
)
class BulletedListBlock(BasicBlock):
class ToggleBlock(BasicBlock):
_type = "toggle"
class QuoteBlock(BasicBlock):
_type = "quote"
class TextBlock(BasicBlock):
_type = "text"
class EquationBlock(BasicBlock):
latex = field_map(
["properties", "title"],
python_to_api=lambda x: [[x]],
api_to_python=lambda x: x[0][0],
)
_type = "equation"
class MediaBlock(Block):
caption = property_map("caption")
def _str_fields(self):
return super()._str_fields() + ["caption"]
_type = "sub_sub_header"
class PageBlock(BasicBlock):
_type = "page"
icon = field_map(
"format.page_icon",
api_to_python=add_signed_prefix_as_needed,
python_to_api=remove_signed_prefix_as_needed,
)
class BulletedListBlock(BasicBlock):
_type = "bulleted_list"
class NumberedListBlock(BasicBlock):
_type = "numbered_list"
class ToggleBlock(BasicBlock):
_type = "toggle"
class QuoteBlock(BasicBlock):
api_to_python=lambda x: x == "Yes",
)
def _str_fields(self):
return super()._str_fields() + ["checked"]
class CodeBlock(BasicBlock):
_type = "code"
language = property_map("language")
wrap = field_map("format.code_wrap")
class FactoryBlock(BasicBlock):
"""
Also known as a "Template Button". The title is the button text, and the children are the templates to clone.
"""
_type = "factory"
class HeaderBlock(BasicBlock):
_type = "header"
class SubheaderBlock(BasicBlock):
_type = "sub_header"