Skip to main content

subscription-sdk-python

Python SDK for the Subscription and Entitlements Platform.

Installation

pip install subscription-sdk

Middleware Adapters

Flask

from flask import Flask, request, jsonify
from subscription_sdk.adapters.flask_adapter import subscription_flask

app = Flask(__name__)

# Apply Flask Middleware
subscription_flask(
    app,
    api_key="sub_live_...",
    base_url="https://api.infosub.io",
    get_org_id=lambda: request.headers.get("X-Org-Id")
)

@app.route("/api/v1/employees", methods=["GET"])
def get_employees():
    return jsonify({"data": []}), 200

FastAPI

from fastapi import FastAPI, Request
from subscription_sdk.adapters.fastapi_adapter import SubscriptionMiddleware

app = FastAPI()

# Apply FastAPI Middleware
app.add_middleware(
    SubscriptionMiddleware,
    api_key="sub_live_...",
    base_url="https://api.infosub.io",
    get_org_id=lambda req: req.headers.get("x-org-id")
)

@app.get("/api/v1/employees")
def get_employees(request: Request):
    return {"data": []}

Manual Client Usage

from subscription_sdk import SubscriptionClient

client = SubscriptionClient(api_key="sub_live_...", base_url="https://api.infosub.io")
client.start()  # Starts background poller thread

mapping = client.match_route("GET", "/api/v1/employees")
if mapping:
    check = client.check_entitlement(
        organization_external_id="tenant-acme",
        resource_mapping_id=mapping.id,
        quantity=1.0
    )
    if check.allowed:
        try:
            # Execute business logic...
            
            client.commit_reservation(check.reservationId)
        except Exception:
            client.cancel_reservation(check.reservationId)

Alternatively, you can simplify the manual transaction pattern using .execute(...), which handles the check-reserve-commit-cancel flow automatically.

Basic Example:

# The execute method takes a callback function to run
result = client.execute(
    organization_id="tenant-acme",
    resource_mapping_id=mapping.id,
    callback=lambda: save_employee(employee),
    quantity=1.0
)

Flask / FastAPI Route Handler Example:

@app.route("/employees-manual", methods=["POST"])
def create_employee_manual():
    org_id = request.headers.get("X-Org-Id") or request.args.get("orgId")
    mapping = client.match_route("POST", "/employees")
    
    if not mapping:
        return jsonify({"error": "Mapping not found"}), 500
        
    try:
        result = client.execute(
            organization_id=org_id,
            resource_mapping_id=mapping.id,
            quantity=1.0,
            callback=lambda: {
                "status": "success",
                "message": "Employee created successfully via manual execute wrapper."
            }
        )
        return jsonify(result), 200
    except PermissionError as err:
        # Throws PermissionError if entitlement check is denied (check.allowed is False)
        return jsonify({"status": "error", "message": str(err)}), 403
    except Exception as err:
        return jsonify({"status": "error", "message": str(err)}), 500

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

subscription_sdk-1.0.0.tar.gz (13.1 kB view details)

Uploaded Source

Built Distribution

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

subscription_sdk-1.0.0-py3-none-any.whl (10.6 kB view details)

Uploaded Python 3

File details

Details for the file subscription_sdk-1.0.0.tar.gz.

File metadata

  • Download URL: subscription_sdk-1.0.0.tar.gz
  • Upload date:
  • Size: 13.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for subscription_sdk-1.0.0.tar.gz
Algorithm Hash digest
SHA256 dad5be3eba72888c9e543b27729da765a869036cee8cf9ba2d688c6dbff567bd
MD5 8fe91b1f164f1878dab22312efc6b32e
BLAKE2b-256 691857bd54925389bc747be641955894e3f8b8a3d28db53324ce12f2203c10d4

See more details on using hashes here.

File details

Details for the file subscription_sdk-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for subscription_sdk-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0bbd2fc54c539ca97c14e380ae4947deb9d0581a7d21bb0ac0ddb495cb939c7e
MD5 d0f6b35d99275855f08913d72c741504
BLAKE2b-256 5245bd3c82029e7a8380b0a4f787a4d03d1c6e95181810276bbec3bcf1cdf13c

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page