Skip to main content

scalio-platform

Shared building blocks of the Scalio apps (Nexus, Compass, Citadel, Foundry, Rosetta, Pulse, Beacon, Cockpit, ID, Monitor). Before this package each app kept its own copy of these files (architecture review C2/C4, ADR 0058 in scalio-docs). Nothing in this package is secret.

Module What it does
scalio_platform.job_lease Runs a background loop on one instance at a time (lease in db.job_leases). During an update two instances run side by side; without the lease both would act.
scalio_platform.migrations Schema migrations for MongoDB: ordered steps, each applied once, version in db.meta (schema_version).
scalio_platform.health The answer of GET /api/health that Scalio Monitor reads (ok / degraded / down, leases of the loops).
scalio_platform.error_report Sends unexpected errors to Scalio Monitor, only when ERROR_REPORT_URL and ERROR_REPORT_TOKEN are set.
scalio_platform.app_links Links and features of the product switcher (SCALIO_APP_LINKS, SCALIO_STAGE, SAAS_MODE).
scalio_platform.roles Permission catalog of the app, built-in and own roles (app_roles), require_perm for routes, shared role API (roles_router) for RoleAdmin in scalio-ui.
scalio_platform.tenant_jobs Runs one job per tenant side by side (for_each_tenant): at most TENANT_JOBS_PARALLEL at once (default 4), a time budget per tenant (TENANT_JOBS_TIMEOUT, default 900 s), a failing tenant never stops the others; for MSP instances with many customers (ADR 0063 mandant/M11).
scalio_platform.setup_wizard State of the Einrichtungsassistent (GET/PUT /api/setup/wizard, ADR 0060): wizard_state, save_wizard, parse_update.

Use in an app

scalio-platform==0.1.0            # backend/requirements.txt, exact version
from scalio_platform import error_report, health, job_lease
from scalio_platform.migrations import BASELINE, run_migrations

MIGRATIONS = BASELINE                      # append (2, migrate_002_...) and so on, never edit past steps

async def startup():
    await run_migrations(db, MIGRATIONS)   # before the background loops
    for name, loop in LOOPS.items():
        asyncio.create_task(job_lease.run_exclusive(db, name, loop))

error_report.install(app, "citadel", build_info)
code, body = await health.health_report(db, build_info(), lease_jobs=sorted(LOOPS))

# probe of the provisioning engine (SaaS on the Docker engine), header X-Provision-Health-Secret
code, body = await health.provision_report(db, build_info(), secret=os.environ.get("PROVISION_HEALTH_SECRET", ""),
                                           provided=request.headers.get("x-provision-health-secret", ""))

A migration step must be safe to run twice: two instances can start at the same moment.

Zurücksetzen (factory reset, ADR 0064 / 0069)

from scalio_platform.factory_reset import factory_reset_router

async def after_wipe(remove_license: bool):
    if remove_license:
        await licensing.runtime.refresh(db)      # free edition right away
    await login_policy.announce_setup_code()     # new setup code in the log

app.include_router(factory_reset_router(
    get_db=lambda: db, current_user=require_admin,
    password_hash=lambda u: u.get("password_hash"), verify_password=auth.verify_password,
    keep_meta=(f"{PRODUCT.code}_installation", "schema_version"), license_meta=(PRODUCT.meta_id,),
    saas_mode=saas_mode, after_wipe=after_wipe))

GET /api/admin/factory-reset answers {available, password} (SaaS: not available, the customer portal resets it); POST takes {confirm: "RESET", password, remove_license}. allowed(user) narrows who may (Foundry: platform owner), error(code) maps the codes reset_in_portal, reset_confirm_wrong, current_password_wrong to the app's own errors. The frontend is FactoryReset from @scalio-cloud/ui 0.27.0.

Develop and release

  • pip install -e ".[dev]", then pytest -q and ruff check . (both run in CI).
  • Release: bump pyproject.toml and __version__, open a scalio-docs PR with python3 tools/changelog.py --repo scalio-platform release <version> (changelog in scalio-docs changelog/scalio-platform/, ADR 0066), merge, then «Freigeben» in the Scalio Cockpit (workflow publish.yml: PyPI with trusted publishing, tag and GitHub release). Tags without v.
  • A change of behaviour changes every app on its next upgrade: say so in the PR and the CHANGELOG.

Metadata

Release files for scalio-platform 0.6.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for scalio-platform 0.6.0
File Size Uploaded Provenance Actions
scalio_platform-0.6.0.tar.gz 32.9 kB With provenance Details for scalio_platform-0.6.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for scalio-platform 0.6.0
File Interpreter ABI Platform Actions
scalio_platform-0.6.0-py3-none-any.whl Python 3 none any Details for scalio_platform-0.6.0-py3-none-any.whl

Total release size: 57.6 kB

Release files / scalio_platform-0.6.0.tar.gz

Download URL scalio_platform-0.6.0.tar.gz
Size 32.9 kB
Tags Source
SHA-256 checksum
How to use checksums
a002321059da572062a2f29061197c0d2aa800cbc3cfaa19712f2fda4650379c
BLAKE2b-256 checksum
How to use checksums
424fe5b86ea3ad6ba4226eedeefe296c4269880e4cb218a03739753bb5c20706
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 2, 2026.

Transparency log

Release files / scalio_platform-0.6.0-py3-none-any.whl

Download URL scalio_platform-0.6.0-py3-none-any.whl
Size 24.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d08fe4d92f7a414b062663fe16acb77bb4a4de6b8e20bb6dc5b710cf3fa72b7b
BLAKE2b-256 checksum
How to use checksums
22b443be18148eecc1248259916e7f69ec873f0c68b4ea153f6aa1cc342a8ffb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 2, 2026.

Transparency log

Security for scalio-platform 0.6.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for scalio_platform-0.6.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 2, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page