Skip to main content

Strapi Client

PyPI - Version

Interact with Strapi from Python using the REST API

Install

pip install strapi-client-enhanced

Documentation

Full API Reference

Examples

Quick start (sync version):

from strapi_client_enhanced import StrapiClient

with StrapiClient(base_url='YOUR_STRAPI_URL', token='YOUR_STRAPI_TOKEN') as client:
    # await strapi.authorize(identifier='user_identifier', password='user_password')  # Optional
    users = client.get_documents('users', filters={'username': {'$eq': 'Pavel'}})
    user_id = users.data[0]['documentId']
    client.update_document('users', user_id, data={'username': 'Mark'})
    # support  upsert
    response = await client.upsert_document(
                plural_api_id="users", 
                data=data,
                unique_value="slug"
                unique_value="just"
            )

Quick start (async version):

import asyncio
from strapi_client_enhanced import StrapiClientAsync


async def main():
    async with StrapiClientAsync(base_url='YOUR_STRAPI_URL', token='YOUR_STRAPI_TOKEN') as client:
        # await strapi.authorize(identifier='user_identifier', password='user_password')  # Optional
        users = await client.get_documents('users', filters={'username': {'$eq': 'Pavel'}})
        user_id = users.data[0]['documentId']
        await client.update_document('users', user_id, data={'username': 'Mark'})


asyncio.run(main())

Quick start with SmartDocument ORM

import asyncio
from strapi_client_enhanced import StrapiClientAsync, SmartDocument, MediaImageDocument


class User(SmartDocument):
    __singular_api_id__ = 'user'
    username: str
    first_name: str
    photo: MediaImageDocument


class Session(SmartDocument):
    uid: str
    user: User | None


async def main():
    async with StrapiClientAsync(base_url='YOUR_STRAPI_URL', token='YOUR_STRAPI_TOKEN') as client:
        # Get with relations and media by ID
        user1 = await User.get_document(client, document_id='YOUR_DOCUMENT_ID')
        print(user1.photo)

        # List documents with automatic population
        sessions = await Session.get_documents(client, sort=['created_at'])
        for session in sessions:
            print(session.user.photo if session.user else 'No user')

        # Find one document
        user1 = await User.get_first_document(client, filters={'username': 'Mark'})
        if user1:
            print(user1)


asyncio.run(main())

Quick start with ActiveDocument ORM (experimental)

Relations and upserts are supported in experimental mode.

import asyncio
from strapi_client_enhanced import StrapiClientAsync, ActiveDocument, DocumentField


class User(ActiveDocument):
    username: str = DocumentField(unique=True)
    first_name: str


class Session(ActiveDocument):
    uid: str = DocumentField(unique=True)
    user: User | None = DocumentField(default=None, relation=True)


async def main():
    async with StrapiClientAsync(base_url='YOUR_STRAPI_URL', token='YOUR_STRAPI_TOKEN') as client:
        # Update existing document
        user1 = await User.get_document(client, document_id='YOUR_DOCUMENT_ID')
        user1.first_name = 'Mark'
        await user1.update_document(client)

        # Create or update document with relation
        session1 = await Session(uid='123', user=user1).upsert_document(client)
        await session1.refresh(client)  # populate fields from Strapi

        # Create and delete document
        user2 = await User(username='pavel', first_name='Pavel').create_document(client)
        await user2.delete_document(client)


asyncio.run(main())

Development

Create new release

Push changes to 'main' branch following Conventional Commits.

Update documentation

docs folder is being updated automatically by GitHub Actions when source files are changed.

Metadata

Release files for strapi-client-enhanced 1.0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for strapi-client-enhanced 1.0.2
File Size Uploaded
strapi_client_enhanced-1.0.2.tar.gz 26.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for strapi-client-enhanced 1.0.2
File Interpreter ABI Platform
strapi_client_enhanced-1.0.2-py3-none-any.whl Python 3 none any Details

Total release size: 52.5 kB

Release files / strapi_client_enhanced-1.0.2.tar.gz

Download URL strapi_client_enhanced-1.0.2.tar.gz
Size 26.9 kB
Tags Source
SHA-256 checksum
How to use checksums
5ab51b0ae2f1b5af377552cad68dbfe9529a5f8d57dd47acad36bef16b0caf6c
BLAKE2b-256 checksum
How to use checksums
c21bb51f5588d9a0e57a1efe6747938054c8509771522ed83f3d7b7e418f6cb6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.7

Release files / strapi_client_enhanced-1.0.2-py3-none-any.whl

Download URL strapi_client_enhanced-1.0.2-py3-none-any.whl
Size 25.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
68290160c2cd0bf9f5d13661893aebecd70dde10527da08432d36e9b6b7be9fc
BLAKE2b-256 checksum
How to use checksums
2694a54887b2e83a8b1bdbff1f5f8161c2b8739a36b57e154735c9e06ebcadb3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.7

Release history Release notifications | RSS feed

This release

1.0.2 This release

2 release files

1.0.1

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page