Skip to main content

Unified Timeback client for all education APIs (OneRoster, Caliper, Edubridge)

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.1.11b20260226182517.tar.gz (15.7 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.1.11b20260226182517-py3-none-any.whl (14.0 kB view details)

Uploaded Python 3

File details

Details for the file timeback_core-0.1.11b20260226182517.tar.gz.

File metadata

  • Download URL: timeback_core-0.1.11b20260226182517.tar.gz
  • Upload date:
  • Size: 15.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.6 {"installer":{"name":"uv","version":"0.10.6","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.1.11b20260226182517.tar.gz
Algorithm Hash digest
SHA256 26d12dd7ff908a373065ae61b9795b807c79c778b452cd5ea4009e7cbac4742e
MD5 d84f889e066ddad0036ecd774cc4e4d0
BLAKE2b-256 9e018856dc2be7d69445304413a7d15bd19ce1f7eea647189107b15df2bd39da

See more details on using hashes here.

File details

Details for the file timeback_core-0.1.11b20260226182517-py3-none-any.whl.

File metadata

  • Download URL: timeback_core-0.1.11b20260226182517-py3-none-any.whl
  • Upload date:
  • Size: 14.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.6 {"installer":{"name":"uv","version":"0.10.6","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.1.11b20260226182517-py3-none-any.whl
Algorithm Hash digest
SHA256 2f8f47d54292d497a6cdbaf2843d9305c265a5d22251ea8434b34657eed51e2d
MD5 5e66e118e53ccb9d9ffe3f28df237c08
BLAKE2b-256 a94ae8b26eb89bf89dab69aed8ebed579ed0d22d1f78f45ea03c2514191c6d6c

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