Skip to main content

Python client for Scute API

Project description

Scute Python Client

A Python client for the Scute API, with built-in support for authentication, users, devices, and tokens.
Includes ready-to-use integration with Django REST Framework.


Quickstart

🚀 Installation

pip install scute-client

⚙️ Configuration

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_client = ScuteClient(
    app_id=settings.SCUTE_APP_ID,
    app_secret=settings.SCUTE_APP_SECRET,
)

🔑 Django REST Framework Integration

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
from .scute_client import scute_client


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_client.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",
    ],
}

📖 Usage Examples

Create a user

identifier = "user@example.com"  # or phone number
scute_user = scute_client.users.create_user(identifier)
print(scute_user)

Delete a user

scute_client.users.delete_user(user.sid, request.token)

Get a user by ID

user = scute_client.users.get_user_by_id("scute_user_id")
print(user)

List all users

for scute_user in scute_client.users.list_all_users():
    print(scute_user["id"], scute_user["email"])

🛠 Error Handling

All API errors raise APIRequestError:

from scute.exceptions import APIRequestError

try:
    user = scute_client.users.get_user_by_id("invalid_id")
except APIRequestError as e:
    print(f"Error: {e.status_code} - {e.message}")

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

scute_client-0.1.1.tar.gz (7.1 kB view details)

Uploaded Source

Built Distribution

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

scute_client-0.1.1-py3-none-any.whl (7.9 kB view details)

Uploaded Python 3

File details

Details for the file scute_client-0.1.1.tar.gz.

File metadata

  • Download URL: scute_client-0.1.1.tar.gz
  • Upload date:
  • Size: 7.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.11

File hashes

Hashes for scute_client-0.1.1.tar.gz
Algorithm Hash digest
SHA256 30966378c425d46b451a4f78e4e7316109f3f496641a66f97157b8ccc81dc273
MD5 7a45e2bc5f3f85b02d0724e1607168b7
BLAKE2b-256 4966eccd14d447ed3b7cf0ce4a4d46e2c06dc60c0a693d0c4d01ff44df0ad333

See more details on using hashes here.

File details

Details for the file scute_client-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: scute_client-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 7.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.11

File hashes

Hashes for scute_client-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 8978d512ce76ae430000f9989055816c1395207bcf2fa64012647eaa6654ad5d
MD5 c0f67561d8c99551a92903a3d0e093b8
BLAKE2b-256 eea87442417643fa55c63b92ca1110e77fa834b5b5ca35afa54c8f06677df604

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