All Projects → ramnes → notion-sdk-py

ramnes / notion-sdk-py

Licence: MIT license
Official Notion SDK rewritten in Python (sync + async)

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to notion-sdk-py

notion-sdk-net
A Notion SDK for .Net
Stars: ✭ 71 (-90.57%)
Mutual labels:  api-client, notion, notion-api
Notion-GCal-Sync
A Python script to automate the syncing of tasks between Google Calendar and the all-in-one productivity workspace, Notion. It utilizes API and is customizable for your own needs. Free to use.
Stars: ✭ 120 (-84.06%)
Mutual labels:  notion, notion-api
notion-nextjs-blog
A starter blog template powered by Next.js, Notion and Tailwind CSS.
Stars: ✭ 25 (-96.68%)
Mutual labels:  notion, notion-api
notionapi
A Notion API SDK, written in Golang
Stars: ✭ 351 (-53.39%)
Mutual labels:  notion, notion-api
Notion-and-Google-Calendar-2-Way-Sync
2 Way Sync Between Notion Database and Google Calendar
Stars: ✭ 205 (-72.78%)
Mutual labels:  notion, notion-api
memegentino
Meme generator for Notion
Stars: ✭ 18 (-97.61%)
Mutual labels:  notion, notion-api
cards
Turn your Notion database into a deck of cards
Stars: ✭ 37 (-95.09%)
Mutual labels:  notion, notion-api
notion-sdk-php
A complete Notion SDK for PHP developers.
Stars: ✭ 60 (-92.03%)
Mutual labels:  notion, notion-api
go-notion
Notion Official API Go Client.
Stars: ✭ 14 (-98.14%)
Mutual labels:  notion, notion-api
open-source-notionapi-apps
Collection of Apps, Integrations und Libraries that utilize the Notion API
Stars: ✭ 82 (-89.11%)
Mutual labels:  notion, notion-api
go-notion
Go client for the Notion API.
Stars: ✭ 261 (-65.34%)
Mutual labels:  notion, notion-api
shellbear.me
Source code of my personal website and blog ✨
Stars: ✭ 177 (-76.49%)
Mutual labels:  notion, notion-api
notionproxy
Notion as a web site, inspired by react-notion-x.
Stars: ✭ 24 (-96.81%)
Mutual labels:  notion, notion-api
notion-scholar
Reference management solution using Python and Notion.
Stars: ✭ 77 (-89.77%)
Mutual labels:  notion, notion-api
jahir.dev
My personal website 💎 – Built using Next.js, TypeScript, MDX, contentlayer, Notion and Stitches styled components
Stars: ✭ 119 (-84.2%)
Mutual labels:  notion, notion-api
NotionSwift
Unofficial Notion API SDK for iOS & macOS
Stars: ✭ 49 (-93.49%)
Mutual labels:  notion, notion-api
notionapi-agent
Unofficial Node.js API client for Notion.so
Stars: ✭ 89 (-88.18%)
Mutual labels:  api-client, notion
lpconnector
Python client for syncing LastPass Enterprise with a remote directory over LDAP
Stars: ✭ 14 (-98.14%)
Mutual labels:  api-client
typiform
⚛️ A serverless React powered online form builder that works like a doc.
Stars: ✭ 16 (-97.88%)
Mutual labels:  notion
sypht-golang-client
A Golang client for the Sypht API
Stars: ✭ 33 (-95.62%)
Mutual labels:  api-client

notion-sdk-py

PyPI Supported Python Versions License Code style
Code Quality Tests Docs

notion-sdk-py is a simple and easy to use client library for the official Notion API.

It is meant to be a Python version of the reference JavaScript SDK, so usage should be pretty similar between both. 😊

📢 Announcement (18-04-2022) — Notion API is officially out of beta, and we are too: 1.0.0 is now released! Beware, Notion-Version has been upgraded to 2022-02-22 and it brings breaking changes.

Installation

pip install notion-client

Usage

Before getting started, create an integration and find the token. → Learn more about authorization.

Import and initialize a client using an integration token or an OAuth access token.

import os
from notion_client import Client

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

In an asyncio environment, use the asynchronous client instead:

from notion_client import AsyncClient

notion = AsyncClient(auth=os.environ["NOTION_TOKEN"])

Make a request to any Notion API endpoint.

See the complete list of endpoints in the API reference.

from pprint import pprint

list_users_response = notion.users.list()
pprint(list_users_response)

or with the asynchronous client:

list_users_response = await notion.users.list()
pprint(list_users_response)

This would output something like:

{'results': [{'avatar_url': 'https://secure.notion-static.com/e6a352a8-8381-44d0-a1dc-9ed80e62b53d.jpg',
              'id': 'd40e767c-d7af-4b18-a86d-55c61f1e39a4',
              'name': 'Avocado Lovelace',
              'object': 'user',
              'person': {'email': '[email protected]'},
              'type': 'person'},
             ...]}

All API endpoints are available in both the synchronous and asynchronous clients.

Endpoint parameters are grouped into a single object. You don't need to remember which parameters go in the path, query, or body.

my_page = notion.databases.query(
    **{
        "database_id": "897e5a76-ae52-4b48-9fdf-e71f5945d1af",
        "filter": {
            "property": "Landmark",
            "rich_text": {
                "contains": "Bridge",
            },
        },
    }
)

Handling errors

If the API returns an unsuccessful response, an APIResponseError will be raised.

The error contains properties from the response, and the most helpful is code. You can compare code to the values in the APIErrorCode object to avoid misspelling error codes.

import logging
from notion_client import APIErrorCode, APIResponseError

try:
    my_page = notion.databases.query(
        **{
            "database_id": "897e5a76-ae52-4b48-9fdf-e71f5945d1af",
            "filter": {
                "property": "Landmark",
                "rich_text": {
                    "contains": "Bridge",
                },
            },
        }
    )
except APIResponseError as error:
    if error.code == APIErrorCode.ObjectNotFound:
        ...  # For example: handle by asking the user to select a different database
    else:
        # Other error handling code
        logging.error(error)

Logging

The client emits useful information to a logger. By default, it only emits warnings and errors.

If you're debugging an application, and would like the client to log request & response bodies, set the log_level option to logging.DEBUG.

notion = Client(
    auth=os.environ["NOTION_TOKEN"],
    log_level=logging.DEBUG,
)

You may also set a custom logger to emit logs to a destination other than stdout. Have a look at Python's logging cookbook if you want to create your own logger.

Client options

Client and AsyncClient both support the following options on initialization. These options are all keys in the single constructor parameter.

Option Default value Type Description
auth None string Bearer token for authentication. If left undefined, the auth parameter should be set on each request.
log_level logging.WARNING int Verbosity of logs the instance will produce. By default, logs are written to stdout.
timeout_ms 60_000 int Number of milliseconds to wait before emitting a RequestTimeoutError
base_url "https://api.notion.com" string The root URL for sending API requests. This can be changed to test with a mock server.
logger Log to console logging.Logger A custom logger.

Requirements

This package supports the following minimum versions:

  • Python >= 3.7
  • httpx >= 0.15.0

Earlier versions may still work, but we encourage people building new applications to upgrade to the current stable.

Getting help

If you have a question about the library, or are having difficulty using it, chat with the community in GitHub Discussions.

If you're experiencing issues with the Notion API, such as a service interruption or a potential bug in the platform, reach out to Notion help.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].