跳转到主要内容

一个用于操作从notion API获取的对象的Python库

项目描述

notion-objects

Build Status PyPI Version PyPI License Codestyle

一个基于 notion-sdk-py 的Python库,它使得使用notion数据库变得容易。它提供了一个高级API,带有数据映射器,允许您定义notion数据库记录与您的Python对象之间的自定义映射。

使用notion-objects您可以

用户指南

定义模型

假设您的数据库 tasks 有四个字段,标题 Task、日期范围 Date、人员 Assigned to 和状态字段 Status。您想将notion数据库查询转换为

{
  "task": "my task",
  "date_start": "2022-01-01",
  "date_end": "2022-01-02",
  "assigned_to": "Thomas",
  "status": "In progress"
}

首先,声明一个包含所有必要转换的描述符的模型

from notion_objects import *

class Task(NotionObject):
    task = TitleText("Task")
    assigned_to = Person("Assigned to")
    date_start = DateRangeStart("Date")
    date_end = DateRangeEnd("Date")
    closed_at = Date("Closed at")
    status = Status("Status")

现在,当您查询数据库时,可以使用API调用的结果实例化 Task 对象

response = requests.post("https://api.notion.com/v1/databases/{database_id}/query", ...)

for item in response.json()['results']:
    t = Task(item)
    print(t.task)  # access attribute values
    print(t.to_json())  # prints the record in the json format show earlier

查询数据库

notion-objects在 notion-sdk-py 的周围添加了数据映射。它使用的 Database 类使用类型参数将notion对象映射到您定义的数据模型。

以下是一个代码片段,展示了如何使用我们的内置 Page 模型(它包含根页属性)迭代2022-10-08之后更新的数据库中的所有页面。

from notion_client import Client
from notion_objects import Database, Page

notion = Client(auth=os.environ['NOTION_TOKEN'])

database: Database[Page] = Database(Page, database_id="123456789abcdef1234567890abcdef1", client=notion)

result = database.query({
    "filter": {
        "timestamp": "last_edited_time",
        "last_edited_time": {
            "after": "2022-10-08"
        }
    }
})
for page in result:
    print(page.id, page.created_time, page.last_edited_time)

如果您懒得为您的数据库创建模型,也可以使用 DynamicNotionObject。notion-objects将尽最大努力映射数据类型。您也可以直接迭代数据库以获取所有记录

from notion_objects import Database, DynamicNotionObject

database = Database(DynamicNotionObject, ...)

for record in database:
    print(record.to_json())  # will print your database record as JSON

注意并非所有类型都已实现。类型映射非常基础。

更新记录

您可以通过使用正常的Python赋值来更新数据库记录。数据映射器将正确地将类型映射到Notion的内部格式。然后,您可以调用Database.update(...)来执行更新API调用。notion-objects将跟踪对对象所做的所有更改,并且只发送更改。

database: Database[Task] = Database(Task, ...)

task = database.find_by_id("...")
task.status = "Done"
task.closed_at = datetime.utcnow()
database.update(task)

注意并非所有属性都可以设置。

创建记录

同样,您也可以创建新页面。您可以在任何子类上使用NotionObject.new()来创建该类型的新未管理实例。然后,调用Database.create(...)来在数据库中创建新条目。

database: Database[Task] = Database(Task, ...)

task = Task.new()
task.task = "My New Task"
task.status = "In progress"
task.assigned_to = "6aa4d3cd-3928-4f61-9072-f74a3ebfc3ca"

task = database.create(task)
print(task.id)  # will print the page ID that was created

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

notion-objects-0.6.2.tar.gz (18.5 kB 查看哈希值)

上传时间

构建分布

notion_objects-0.6.2-py3-none-any.whl (18.2 kB 查看哈希值)

上传时间 Python 3

支持者: