Abstraction layer for the Notion API with declarative schema mapping
Project description
notion-api-utils
Abstraction layer for the Notion API. Define schemas declaratively and convert Python dicts to Notion's JSON format without writing boilerplate.
Install
pip install notion-api-utils
Usage
from notion_api_utils import Schema, Field, Title, RichText, Number, Select, Date, to_notion_properties
# Define a schema mapping your data to Notion properties
schema = Schema(fields={
"name": Field("Name", Title),
"email": Field("Email", Email),
"age": Field("Age", Number),
"status": Field("Status", Select),
"date": Field("Created At", Date),
})
# Your data
data = {
"name": "Lucas",
"email": "lucas@example.com",
"age": 25,
"status": "Active",
"date": "2026-03-25",
}
# Convert to Notion properties JSON
properties = to_notion_properties(data, schema)
# Use `properties` in your Notion API call body
Output:
{
"Name": {"title": [{"text": {"content": "Lucas"}}]},
"Email": {"email": "lucas@example.com"},
"Age": {"number": 25},
"Status": {"select": {"name": "Active"}},
"Created At": {"date": {"start": "2026-03-25"}}
}
Supported Property Types
| Type | Input |
|---|---|
Title |
str |
RichText |
str |
Number |
int | float |
Select |
str |
MultiSelect |
list[str] |
Date |
str | date | datetime or {"start": ..., "end": ...} |
Checkbox |
bool |
Email |
str |
Url |
str |
PhoneNumber |
str |
Status |
str |
Relation |
list[str] (page IDs) |
People |
list[str] (user IDs) |
Files |
list[str] (URLs) |
Custom Source Key
When your dict key differs from the schema key:
schema = Schema(fields={
"nome": Field("Name", Title, source_key="nome_completo"),
})
data = {"nome_completo": "Lucas"}
properties = to_notion_properties(data, schema)
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
iaxys_notion_utils-0.2.1.tar.gz
(15.1 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file iaxys_notion_utils-0.2.1.tar.gz.
File metadata
- Download URL: iaxys_notion_utils-0.2.1.tar.gz
- Upload date:
- Size: 15.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.27 {"installer":{"name":"uv","version":"0.9.27","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Linux Mint","version":"22.3","id":"zena","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7f016f6382d1d43122d81135ffb9fe371dc2b11e3651610c3eb108b5bbe27f96
|
|
| MD5 |
40ba9c2a3de66db31e8b6cfbe00a99b8
|
|
| BLAKE2b-256 |
01d83f2845095cae954a0f30805ffb154021ba745259b9c1be41a4f162736f9a
|
File details
Details for the file iaxys_notion_utils-0.2.1-py3-none-any.whl.
File metadata
- Download URL: iaxys_notion_utils-0.2.1-py3-none-any.whl
- Upload date:
- Size: 7.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.27 {"installer":{"name":"uv","version":"0.9.27","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Linux Mint","version":"22.3","id":"zena","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
db46b433c1b4ccadb5087e541704219d67f4b75b888cbf48b61e49695ce48b3d
|
|
| MD5 |
08f09fa7bc820711ed472216a6863b76
|
|
| BLAKE2b-256 |
7f60d582ec633789a458324e85ab8ca573753a74348e91a9ab986bb68422d1ce
|