Python client for Scute API
Project description
Scute Python Client
A Python client for the Scute API, with built-in support for authentication, users, and tokens.
Includes ready-to-use integration guide for Django REST Framework.
Table of Contents
Quickstart
🚀 Installation
pip install scute-client
Initialize the client:
from scute_client import ScuteClient
scute = ScuteClient(
app_id=SCUTE_APP_ID,
app_secret=SCUTE_APP_SECRET,
)
Usage Examples
Create a user
identifier = "user@example.com" # or phone number
scute_user = scute.users.create_user(identifier)
print(scute_user)
Get a user by ID
user = scute.users.get_user_by_id("scute_user_id")
print(user)
List all users
for scute_user in scute.users.list_all_users():
print(scute_user["id"], scute_user["email"])
Delete a user
scute.users.delete_user(user.sid)
🛠 Error Handling
All API errors raise APIRequestError:
from scute_client.exceptions import APIRequestError
try:
user = scute.users.get_user_by_id("invalid_id")
except APIRequestError as e:
print(f"Error: {e.status_code} - {e.message}")
🔑 Django REST Framework Integration
Add your Scute credentials to Django settings.py:
SCUTE_APP_ID = "your_app_id"
SCUTE_APP_SECRET = "your_app_secret"
Initialize the client:
from django.conf import settings
from scute_client import ScuteClient
scute = ScuteClient(
app_id=settings.SCUTE_APP_ID,
app_secret=settings.SCUTE_APP_SECRET,
)
First, ensure your User model has a sid (Scute ID) field. This field is required to link your local users with Scute users.
Example User model:
# users/models.py
from django.contrib.auth.models import AbstractUser
from django.db import models
class User(AbstractUser):
# Store Scute ID returned from Scute API
sid = models.CharField(max_length=255, unique=True, null=True, blank=True)
def __str__(self):
return self.username
Create a custom authentication class:
# authentication.py
from rest_framework.authentication import BaseAuthentication
from rest_framework.exceptions import AuthenticationFailed
from users.models import User
class ScuteAuthentication(BaseAuthentication):
keyword = "Scute"
def authenticate(self, request):
auth_header = request.headers.get("Authorization")
if not auth_header or not auth_header.startswith(self.keyword):
return None
token = auth_header.split(f"{self.keyword} ")[1]
try:
user_data = scute.auth.get_current_user(token)
except Exception as e:
raise AuthenticationFailed(f"Invalid token: {str(e)}")
sid = user_data.get("id")
if not sid:
raise AuthenticationFailed("No user ID found in Scute response")
user = User.objects.filter(sid=sid).first()
if not user:
raise AuthenticationFailed("User not found")
if not user.is_active:
raise AuthenticationFailed("Inactive user")
return user, token
Enable it in settings.py:
REST_FRAMEWORK = {
"DEFAULT_AUTHENTICATION_CLASSES": [
"path.to.authentication.ScuteAuthentication",
],
}
🔄 Workspace Sessions – Cross-App Login Solution
Official docs: https://docs.scute.io/guides/workspace-sessions
Initialize the client with workspace credentials:
from scute_client import ScuteClient
scute = ScuteClient(
workspace_id=SCUTE_WORKSPACE_ID,
workspace_secret=SCUTE_WORKSPACE_SECRET,
app_id=SCUTE_APP_ID,
app_secret=SCUTE_APP_SECRET,
)
🔐 Important
-
workspace_secret → Required for cross-app sessions
-
app_secret → Used for app-level operations
-
access_token → Comes from currently authenticated user
-
User CRUD operations automatically use the client’s workspace secret, so you can manage users without needing the app secret.
Usage Examples
Create app
name = "New App"
origin = "https://example.com"
scute_app = scute.apps.create_app(name, origin)
print(scute_app)
Get app by ID
app = scute.apps.get_app_by_id("scute_app_id")
print(app)
List all apps
scute_apps = scute.apps.list_apps()
print(scute_apps)
Delete app
scute.apps.delete_app(scute_app_id)
Overriding App ID
By default, all API requests use the app_id provided when initializing the client. However, you can override the app_id for individual requests by passing it directly to the method.
Example:
scute.users.create_user(
identifier="user@example.com",
app_id="another_app_id"
)
This allows you to manage users across multiple apps using the same client instance. All user methods support this optional parameter:
- create_user
- get_user_by_id
- list_users
- list_all_users
- delete_user
Create Workspace App Session (Cross-App Login)
This exchanges a user session from one app to another. Flow
-
User is authenticated in App A
-
Backend sends request with:
- User access_token (from App A)
- workspace_secret
- Target app_id (App B)
-
Scute returns new session tokens
-
User is authenticated in App B without login
access_token = "user_access_token_from_app_A"
target_app_id = "app_B_id"
scute_app_session = scute.apps.create_app_session(
access_token=access_token,
app_id=target_app_id
)
print(scute_app_session)
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 scute_client-1.1.6.tar.gz.
File metadata
- Download URL: scute_client-1.1.6.tar.gz
- Upload date:
- Size: 9.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
23a7a272fcb7a96aefa5d23841398b30468554393d3e6b31238c0fe7c6b8b67c
|
|
| MD5 |
ebf8de86f2cfe933d80116cfc9ef883e
|
|
| BLAKE2b-256 |
91abed422a312dc6b53568fdf058f9f60cc36bbf4de76adce308e5bb35374491
|
File details
Details for the file scute_client-1.1.6-py3-none-any.whl.
File metadata
- Download URL: scute_client-1.1.6-py3-none-any.whl
- Upload date:
- Size: 10.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4cbfac0a6ee2beb3863013fb99d412ec95ae564493ecee8982b153aae7b66633
|
|
| MD5 |
da0195bdaf87794bf827ae07b3ab1aeb
|
|
| BLAKE2b-256 |
b83f2e8e81e7571aab60545e40bd0ce44984866b51f8232d84e5a43792a1e0d6
|