A functional, easy to use Python wrapper of Notion Api.
- easy-to-use low-level api
- integration local-backup function
- render notion object to markdown/html, etc..
pip install notion-potion
Authentication
from potion import Request, NotionHeader
token = ''
nh = NotionHeader(authorization=token)
req = Request(nh.headers)
Create an integration follow this official tutorial to get
token
.
A 'retrieve' example. (Full code can be found here)
from potion.api import *
print(req.get(url=database_retrieve('1bb0f79b87584afe8609d6e248285cfb')))
And a 'update' example. (Full code)
from potion.api import *
from potion.objects import *
property_list = [
sche.AnySchema('+1', args=Null), # delete property
sche.URL('Photo'), # update property type of `Photo`
sche.MultiSelect('Store availability', [ # update Options of MultiSelect perproty `Store availability`
sche.Option('Duc Loi Market'),
sche.Option('Rainbow Grocery'),
sche.Option('Gus\'s Community Market'),
sche.Option('The Good Life Grocery', color='orange'),
])
]
properties = Properties(*property_list)
# Create Database object
data = Database(properties=properties)
# Commit update operation
print(data)
print(req.patch(url=database_update('1bb0f79b87584afe8609d6e248285cfb'),
data=data))
Here lists examples reimplemented by potion from official shell examples
potion also provides object oriented operations for Notion page and Notion database:
from potion.beans import NotionPage, NotionDatabase
token = ''
# Retrieve
page = NotionPage(auth=token, id=...)
# Create a new one
page = NotionPage(auth=token, parent=...)
print(page)
# set property
page.set_text('title', 'temp')
page.set_number('End', 42)
page.flush_property()
# append content
page.append_code("""print('hello world!')""", 'python')
page.flush_children()
# page.parent
## page.parent_database
## page.parent_page
database = page.create_database()
# TODO
# database operations
database.add_property()
database.update_property()
database.create_page()
python -m potion.backup {token} {backup_dir}
# python -m potion.backup secret_umqPgKzCvvCaAc1FE408aRvYHymxaak5HriWIvaVzs ./backup
It will use dbrecord to generate two sqlite database file under
backup_dir
.
You can read backuped data simpily by using the code below:
from dbrecord import PList
backup_dir = ...
lis = PList(f'{backup_dir}/notion-backup.sqlite')
print(lis[0])
See api.md for details.
git clone https://github.com/sailist/potion
python setup
Any issue and pr is welcome.
- Some uncommon used Object, like Filter, Emoji, File, etc..(While, you can implement your idea without this Object by pass dict as args.)
- Parse json responses recurrsive into notion objects.