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.0.tar.gz
(13.7 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.0.tar.gz.
File metadata
- Download URL: iaxys_notion_utils-0.2.0.tar.gz
- Upload date:
- Size: 13.7 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 |
f5e3e5ea92340f566035dcc5dfdc1d62a3f68915ba8da5ce6ec3931d343a81d0
|
|
| MD5 |
8b6b83c5c3844fabe6f376cb7f0d68f9
|
|
| BLAKE2b-256 |
ece0e790f2364007c3a14d136c3a2191c073993ee1a3bd9511d0a593bb4d95df
|
File details
Details for the file iaxys_notion_utils-0.2.0-py3-none-any.whl.
File metadata
- Download URL: iaxys_notion_utils-0.2.0-py3-none-any.whl
- Upload date:
- Size: 6.9 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 |
b1d500d2ab6cc0b724f96a93d32bc2346525cbef2c362a1eb35122666e53e2ed
|
|
| MD5 |
6263847c82c833e126013dec816a176f
|
|
| BLAKE2b-256 |
422b4bc48dc607767f399318fca4d4126b23c44c5bc31b262452f8cb916bac21
|