potion
potion copied to clipboard
A functional, easy to use Python wrapper of Notion Api.
Potion
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..
Install
pip install notion-potion
Usage
Quick Start
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))
Basic Example
Here lists examples reimplemented by potion from official shell examples
Database | Pages | Blocks | Users | Search | Comment |
---|---|---|---|---|---|
Query a Database | Retrieve a page | Retrieve a block | Retrieve a user | Search | Retrieve Comments |
Create a database | Create a page | Update a block | List all users | Create Comment | |
Retrieve a database | Update page | Retrieve block children | Retrieve your token's bot user | ||
Update database | Retrieve a page property item | Append block children | |||
Delete a block | |||||
Object Oriented Api
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()
Backup
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])
Api List
See api.md for details.
Development & Contribute
git clone https://github.com/sailist/potion
python setup
Any issue and pr is welcome.
TODOs
- [ ] 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.