Skip to main content

cascade-cms

A typed, async REST client for Hannon Hill Cascade CMS.

Full Documentation

Usage

from cascade_cms.cmstypes import Asset, IdentifierType
from cascade_cms.wrapper import CascadeWrapperBase

environment_variables = {
    "API_KEY": "...",
    "CASCADE_URL": "...",
    "SERVER": "prod",  # label used for logfile naming
}
configuration_variables = {
    "cache_name": "./cache/cache.sqlite",
    "allowed_codes": (200,),
    "allowed_methods": ("GET",),
}

with CascadeWrapperBase(environment_variables, configuration_variables) as cascade:
    identifier = IdentifierType(identifier="e868f539ac1001062cfa029c4c5df4d0", asset_type="folder")
    cascade.operations.read(identifier)
    results = cascade.submit_requests(Asset)

Operations that take an identifier (read, delete, copy, move, publish, checkIn, checkOut, listSubscribers, readAccessRights, readWorkflowSettings, readWorkflowInformation, performWorkflowTransition) accept either an IdentifierType (asset type + UUID) or a Path (asset type + site name + site-relative path) — see cascade_cms.cmstypes.resolve_identifier.

See examples/read_and_update_asset.py for a fuller walkthrough.

Operation chains

Every cascade.operations.<op>() call starts an operation chain and returns it. Chaining .then(callback) or another operation onto it adds a step to that chain; a fresh cascade.operations.<op>() call starts a separate one.

Steps inside a chain run strictly in order, each receiving the previous step's result, so a read can be transformed and written back in one pass:

def rewrite(asset):
    asset.keywords = "updated"
    return asset

with CascadeWrapperBase(environment_variables, configuration_variables) as cascade:
    cascade.operations.read(page_a).edit(page_a, rewrite).publish(page_a)
    cascade.operations.read(page_b).then(report)
    cascade.operations.delete(old_page)

    results = cascade.submit_requests()
  • Chains run concurrently, so a batch still costs one round of requests, not one per chain. Only the steps within a chain are sequential.
  • One result per chain, in the order the chains were builtresults[0] belongs to the first chain. No more matching responses back to requests by hand.
  • Failures are values, not gaps. A chain stops at its first failure and that object lands in the results: a CascadeError when the API rejects a request, or the exception a callback raised. Other chains are unaffected. Check with isinstance(result, CascadeError).
  • A callback returning None passes the previous result through, so side-effect callbacks (logging, reporting) don't break the chain.
  • edit() accepts a callable as its payload; it is invoked with the previous step's result, which is how a transformed asset gets written back.
  • Chains are cleared once submit_requests() returns, so a callback registered for one batch never re-runs in the next.

Logging

CascadeWrapperBase accepts an optional third debug argument. Leaving it as None (the default) runs in normal mode: a minimal console ([INIT]/[RUNNING]/Processed: n/N/ [DONE]/[EXIT]) plus a simple logfile at ./logs/{SERVER}_{timestamp}.log. Passing a dict switches to debug mode: a quiet console and a verbose, nested logfile at ./logs/{SERVER}_debug_{timestamp}.log describing every request, response, callback, and error.

debug_config = {
    "log_dir": "./logs",
    "log_operations": True,
    "log_callbacks": True,
    "log_responses": True,
    "show_payload_data": True,
    "show_network_headers": False,
    "show_error_variables": True,
    "response_line_limit": 8,   # -1 = dump full response body
}

with CascadeWrapperBase(environment_variables, configuration_variables, debug=debug_config) as cascade:
    ...

All keys are required in debug mode — there are no inferred defaults, so you always know what you opted into.

Development

pip install -e ".[dev]"
pytest

Download files

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

Source Distribution

cascade_cms_rest-3.1.3.tar.gz (55.1 kB view details)

Uploaded Source

Built Distribution

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

cascade_cms_rest-3.1.3-py3-none-any.whl (37.3 kB view details)

Uploaded Python 3

File details

Details for the file cascade_cms_rest-3.1.3.tar.gz.

File metadata

  • Download URL: cascade_cms_rest-3.1.3.tar.gz
  • Upload date:
  • Size: 55.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for cascade_cms_rest-3.1.3.tar.gz
Algorithm Hash digest
SHA256 a4f4d6f1c7deeb0f7ada87beb42d4bc3d1b21d057cc9e6e30833f229f96f8d3e
MD5 a5102b532d289dbf41ee1c6babce0933
BLAKE2b-256 a38aa6bc35aaa2b6d330815ba1e253e8cb5461d1bee15c272c8acf2ba132acf8

See more details on using hashes here.

Provenance

The following attestation bundles were made for cascade_cms_rest-3.1.3.tar.gz:

Publisher: release.yml on Sharkdroid/py-cascade-cms

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cascade_cms_rest-3.1.3-py3-none-any.whl.

File metadata

File hashes

Hashes for cascade_cms_rest-3.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 b30f1cf6a8cbadf8a4807c40a0e5183ee47ae07317c2ca1e6ec4edfd4cfe3e1e
MD5 555e7df2bb4db4fead1d289ffc145ac7
BLAKE2b-256 4fb5269305d8edbdc2fe18520b4f6204370345bfa2572a97481f1a0b202c485d

See more details on using hashes here.

Provenance

The following attestation bundles were made for cascade_cms_rest-3.1.3-py3-none-any.whl:

Publisher: release.yml on Sharkdroid/py-cascade-cms

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

3.1.3 This release

2 files

3.1.1

2 files

3.0.2

2 files

3.0.1

2 files

3.0.0

2 files

2.0.3

2 files

2.0.2

2 files

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