Interact with Strapi from Python using the REST API
Project description
Strapi Client
Interact with Strapi from Python using the REST API
Requirements
- Python 3.10+
- A running Strapi instance (public or self-hosted)
Installation
From PyPI:
pip install strapi-client
or
uv add strapi-client
Documentation
Examples
Quick start (sync version):
from strapi_client 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'})
Quick start (async version):
import asyncio
from strapi_client 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 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 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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
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 strapi_client-5.0.6.tar.gz.
File metadata
- Download URL: strapi_client-5.0.6.tar.gz
- Upload date:
- Size: 15.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f2ed592478947e501225fcd935f2cea6e59bf2a3ac1791780d7b4d92364fb2bb
|
|
| MD5 |
589c28a8e20675a2ff63e7bf27c77e4c
|
|
| BLAKE2b-256 |
839564bf31815bee012526577cb10abd45cb63c3a65f267f82c997fa7b184e0c
|
Provenance
The following attestation bundles were made for strapi_client-5.0.6.tar.gz:
Publisher:
build_and_release.yml on Roslovets-Inc/strapi-client
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
strapi_client-5.0.6.tar.gz -
Subject digest:
f2ed592478947e501225fcd935f2cea6e59bf2a3ac1791780d7b4d92364fb2bb - Sigstore transparency entry: 1005138260
- Sigstore integration time:
-
Permalink:
Roslovets-Inc/strapi-client@669159c5362d478598ac600d410277663c032f51 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Roslovets-Inc
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build_and_release.yml@669159c5362d478598ac600d410277663c032f51 -
Trigger Event:
push
-
Statement type:
File details
Details for the file strapi_client-5.0.6-py3-none-any.whl.
File metadata
- Download URL: strapi_client-5.0.6-py3-none-any.whl
- Upload date:
- Size: 24.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fae1d746b7282571e0eeeeb2435d0140eb1c3a6f55de4f461be14c00ef00d999
|
|
| MD5 |
567308e586f3083b780182fcaaaf33ae
|
|
| BLAKE2b-256 |
8cbf6c5545524e07bd9cd6811126b8d41e1581a947a9a5f820b6929ba1ca71c7
|
Provenance
The following attestation bundles were made for strapi_client-5.0.6-py3-none-any.whl:
Publisher:
build_and_release.yml on Roslovets-Inc/strapi-client
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
strapi_client-5.0.6-py3-none-any.whl -
Subject digest:
fae1d746b7282571e0eeeeb2435d0140eb1c3a6f55de4f461be14c00ef00d999 - Sigstore transparency entry: 1005138265
- Sigstore integration time:
-
Permalink:
Roslovets-Inc/strapi-client@669159c5362d478598ac600d410277663c032f51 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Roslovets-Inc
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build_and_release.yml@669159c5362d478598ac600d410277663c032f51 -
Trigger Event:
push
-
Statement type: