Skip to main content

An high-level interface for the Notion SDK.

Project description

notional

PyPI License Code style

A simplified object model for the Notion SDK. This is loosely modeled after concepts found in SQLAlchemy.

:warning: Work In Progress: The interfaces in this module are still in development and are likely to change frequently. Furthermore, documentation is pretty sparse so use at your own risk!

That being said, if you do use this library, please drop a message! I'd love to see your use case and how you are incorporating this into your project.

Installation

Install using PyPi:

pip install notional

Note: it is recommended to use a virtual environment (venv) for installing libraries to prevent conflicting dependency versions.

Usage

Connect to the API using an integration token or an OAuth access token:

import notional

notion = notional.connect(auth=AUTH_TOKEN)

# do some things

Iterators

The iterators provide convenient access to the Notion endpoints. Rather than looking for each page of data, the iterators take care of this and expose a standard Python iterator:

import notional

from notional.iterator import EndpointIterator

notion = notional.connect(auth=AUTH_TOKEN)

tasks = EndpointIterator(
    endpoint=notion.databases().query,
    database_id=task_db_id,
    sorts=[
        {
            'direction': 'ascending',
            'property': 'Last Update'
        }
    ]
)

for data in tasks:
    # do the things

Note that the parameters to the iterator follow the standard API parameters for the given endpoint.

Query Builder

Notional provides a query builder for interating with the Notion API. Query targets can be either a specific database ID or a custom ORM type.

notion = notional.connect(auth=auth_token)
sorts = [{"direction": "ascending", "property": "Last Update"}]
query = notion.databases.query(dbid).sort(sorts)

for data in query.execute():
    # something magic happens

For more information about querying, read the official documentation.

ORM

This library has support for defining custom data types that wrap Notion pages. Typically, these pages are entries in a database (collection) with a consistent schema.

from notional import types
from notional.records import Page, Property

class Task(Page, database=NOTION_DATABASE_ID):
    Title = Property('Title', types.Title)
    Priority = Property('Priority', types.SelectOne)
    DueDate = Property('Due Date', types.Date)

for task in notion.databases.query(Task).execute():
    print(f"{task.Title} => {task.Priority}")
    task.DueDate = date.today()
    task.commit()

See the examples for more information.

Token Security

It is generally a best practice to read the auth token from an environment variable or a secrets file. To prevent accidental exposure, it is NOT recommended to save the token in source. For more information, read about Notion authorization here.

Contributing

I built this module so that I could interact with Notion in a way that made sense to me. Hopefully, others will find it useful. If someone is particularly passionate about this area, I would be happy to consider other maintainers or contributors.

Any pull requests or other submissions are welcome. As most open source projects go, this is a side project. Large submissions will take time to review for acceptance, so breaking them into smaller pieces is always preferred. Thanks in advance!

Formatted using black and isort.

Known Issues

See Issues on github.

Feature Requests

See Issues on github.

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

notional-0.0.9.tar.gz (24.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

notional-0.0.9-py3-none-any.whl (26.7 kB view details)

Uploaded Python 3

File details

Details for the file notional-0.0.9.tar.gz.

File metadata

  • Download URL: notional-0.0.9.tar.gz
  • Upload date:
  • Size: 24.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.7

File hashes

Hashes for notional-0.0.9.tar.gz
Algorithm Hash digest
SHA256 1440b30521b54f3b1b766a4cb9015e025457a73a5650c8f8b2aa43da82beff60
MD5 9200dd9136bed9049b3709e4e8feb39a
BLAKE2b-256 c2f4d9e9ce5e75b438992d482e6383d3a01aed75eb2da8fe2618b9a502758a50

See more details on using hashes here.

File details

Details for the file notional-0.0.9-py3-none-any.whl.

File metadata

  • Download URL: notional-0.0.9-py3-none-any.whl
  • Upload date:
  • Size: 26.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.7

File hashes

Hashes for notional-0.0.9-py3-none-any.whl
Algorithm Hash digest
SHA256 6db23cf6a4b47f868295d011a61689073d8c04961426aa45df46098934f1b8ed
MD5 956902f9896efa5e918d244898513961
BLAKE2b-256 70d0b47a16607d878ffe6578e9c808ee71ec61f75e5ba06d6972c925cedc12e5

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page