Skip to main content

Unified Timeback client for all education APIs (OneRoster, Caliper, Edubridge, QTI, PowerPath, CLR, CASE, Webhooks)

Project description

timeback-core

Unified Python client for all Timeback education APIs.

Installation

# pip
pip install timeback-core

# uv (add to a project)
uv add timeback-core

# uv (install into current environment)
uv pip install timeback-core

Quick Start

from timeback_core import TimebackClient

async def main():
    client = TimebackClient(
        env="staging",  # or "production"
        client_id="your-client-id",
        client_secret="your-client-secret",
    )

    # OneRoster - rostering and gradebook
    users = await client.oneroster.users.list()
    for user in users:
        print(f"{user.given_name} {user.family_name}")

    # Edubridge - simplified enrollments and analytics
    analytics = await client.edubridge.analytics.summary()

    # Caliper - learning analytics events
    await client.caliper.events.send(sensor_id, events)

    await client.close()

Managing Multiple Clients

For applications that need to manage multiple TimebackClient instances, use TimebackManager:

from timeback_core import TimebackManager

async def main():
    manager = TimebackManager()
    manager.register("alpha", env="production", client_id="...", client_secret="...")
    manager.register("beta", env="production", client_id="...", client_secret="...")

    # Target a specific platform
    users = await manager.get("alpha").oneroster.users.list()

    # Broadcast to all platforms (uses asyncio.gather — never raises)
    async def create_user(client):
        return await client.oneroster.users.create(user_data)

    results = await manager.broadcast(create_user)

    # Check results
    if results.all_succeeded:
        print("Synced to all platforms!")

    for name, user in results.succeeded:
        print(f"Created on {name}: {user}")

    for name, error in results.failed:
        print(f"Failed on {name}: {error}")

    await manager.close()

Manager API

Method Description
register(name, **cfg) Add a named client
get(name) Retrieve a client by name
has(name) Check if a client is registered
names Get all registered client names
size Get number of registered clients
broadcast(fn) Execute on all clients, returns BroadcastResults
unregister(name) Remove a client
close() Close all clients

BroadcastResults API

Property/Method Description
succeeded Get successful results as [(name, value)]
failed Get failed results as [(name, error)]
all_succeeded True if all operations succeeded
any_failed True if any operation failed
values() Get all values (raises if any failed)

Configuration

The client supports three configuration modes:

Environment Mode (Recommended)

Derive all URLs from staging or production:

client = TimebackClient(
    env="staging",  # or "production"
    client_id="...",
    client_secret="...",
)
Environment API Base URL
staging api.staging.alpha-1edtech.ai
production api.alpha-1edtech.ai

Base URL Mode

For self-hosted or custom deployments with a single base URL:

client = TimebackClient(
    base_url="https://timeback.myschool.edu",
    auth_url="https://timeback.myschool.edu/oauth/token",
    client_id="...",
    client_secret="...",
)

Explicit Services Mode

Full control over each service URL:

client = TimebackClient(
    services={
        "oneroster": "https://roster.example.com",
        "caliper": "https://analytics.example.com",
        "edubridge": "https://api.example.com",
    },
    auth_url="https://auth.example.com/oauth/token",
    client_id="...",
    client_secret="...",
)

Individual Clients

For standalone usage, install individual packages:

pip install timeback-oneroster
pip install timeback-edubridge
pip install timeback-caliper
from timeback_oneroster import OneRosterClient

client = OneRosterClient(
    env="staging",
    client_id="...",
    client_secret="...",
)

Environment Variables

If credentials are not provided explicitly, the client reads from:

  • TIMEBACK_ENV - Environment (staging/production)
  • TIMEBACK_CLIENT_ID
  • TIMEBACK_CLIENT_SECRET
  • TIMEBACK_TOKEN_URL (optional)

Async Context Manager

async with TimebackClient(env="staging", client_id="...", client_secret="...") as client:
    schools = await client.oneroster.schools.list()
# Client is automatically closed

Error Handling

from timeback_core import OneRosterError, CaliperError, EdubridgeError

try:
    users = await client.oneroster.users.list()
except OneRosterError as e:
    print(f"OneRoster API error: {e}")
except CaliperError as e:
    print(f"Caliper API error: {e}")
except EdubridgeError as e:
    print(f"Edubridge API error: {e}")

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

timeback_core-0.2.2b20260401004302.tar.gz (17.1 kB view details)

Uploaded Source

Built Distribution

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

timeback_core-0.2.2b20260401004302-py3-none-any.whl (15.4 kB view details)

Uploaded Python 3

File details

Details for the file timeback_core-0.2.2b20260401004302.tar.gz.

File metadata

  • Download URL: timeback_core-0.2.2b20260401004302.tar.gz
  • Upload date:
  • Size: 17.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for timeback_core-0.2.2b20260401004302.tar.gz
Algorithm Hash digest
SHA256 d2a5b1c041403cb1f8947b5aa9a935f0a692848225d0f332a3341898e82e8d56
MD5 b6319e4a2ca571151c11659eb3c083a3
BLAKE2b-256 e39add3b9f432a48860776c1cb62e6c8fe2f091e4b34070ddfc28fa7fea625d6

See more details on using hashes here.

File details

Details for the file timeback_core-0.2.2b20260401004302-py3-none-any.whl.

File metadata

  • Download URL: timeback_core-0.2.2b20260401004302-py3-none-any.whl
  • Upload date:
  • Size: 15.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for timeback_core-0.2.2b20260401004302-py3-none-any.whl
Algorithm Hash digest
SHA256 208c784bbcaed9882d20948e15baffb6fb0b03118c07b8017530b2d65e376363
MD5 4211564af0c9729fea0ed6ea187d3013
BLAKE2b-256 fb3789474003deaf82882a932e8ecd3f89bc294cf366595bedecc1933164ea4c

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