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.1.tar.gz (407.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.1-py3-none-any.whl (37.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: cascade_cms_rest-3.1.1.tar.gz
  • Upload date:
  • Size: 407.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.1.tar.gz
Algorithm Hash digest
SHA256 18305d78d2f8bfd8594ed32618b8e76e26aa9556a11a76081d93bc4893d41300
MD5 434d002386ff8abada36bb468ab41252
BLAKE2b-256 224c60e4dc0504ac7f3d0c96581e81f98f8c95aa47cd7d03005d4af07c33dcec

See more details on using hashes here.

Provenance

The following attestation bundles were made for cascade_cms_rest-3.1.1.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.1-py3-none-any.whl.

File metadata

File hashes

Hashes for cascade_cms_rest-3.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 9d99ad52a354e90c2b9520b0a1644c881a2971379aa47c768503cac4fdf7420c
MD5 ad54165fbd3f21f32171d720c35b6265
BLAKE2b-256 5955f67539a3420ae85066b84eedbb205e2ffc27b51e86f5c56e4770ce371a04

See more details on using hashes here.

Provenance

The following attestation bundles were made for cascade_cms_rest-3.1.1-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

3.1.3

2 files

This release

3.1.1 This release

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