Source code for notion.space

from typing import Union

from notion.block.basic import PageBlock
from notion.block.collection.media import CollectionViewPageBlock
from notion.maps import field_map
from notion.record import Record


[docs]class NotionSpace(Record): """ Class representing notion's Space - user workplace. """ _type = "space" _table = "space" _str_fields = "name", "domain" _child_list_key = "pages" name = field_map("name") domain = field_map("domain") icon = field_map("icon") @property def pages(self) -> list: # The page list includes pages the current user # might not have permissions on, so it's slow to query. # Instead, we just filter for pages with the space as the parent. return self._client.search_pages_with_parent(self.id) @property def users(self) -> list: ids = [p["user_id"] for p in self.get("permissions")] self._client.refresh_records(notion_user=ids) return [self._client.get_user(uid) for uid in ids]
[docs] def add_page( self, title, type: str = "page", shared: bool = False ) -> Union[PageBlock, CollectionViewPageBlock]: """ Create new page. Arguments --------- title : str Title for the newly created page. type : str, optional Type of the page. Must be one of "page" or "collection_view_page". Defaults to "page". shared : bool, optional Whether or not the page should be shared (public). TODO: is it true? Defaults to False. """ perms = [ { "role": "editor", "type": "user_permission", "user_id": self._client.current_user.id, } ] if shared: perms = [{"role": "editor", "type": "space_permission"}] page_id = self._client.create_record( "block", self, type=type, permissions=perms ) page = self._client.get_block(page_id) page.title = title return page