Skip to main content

Utilities for traversing Wagtail StreamField block definitions and values

Project description

wagtail-traverse

Utilities for traversing Wagtail StreamField and StreamValue objects.

Installation

pip install wagtail-traverse

Usage

This is a set of two functions:

  • traverse_block(block, parent=None) walks a StreamField's block definition tree (the schema, not page data).

    Given a root block, it yields back (path, block) tuples for every block reachable from that root, including the root itself. This is intended to be used to discover what block types and paths can exist in a StreamField.

    from wagtailtraverse import traverse_block
    
    streamfield = MyPage._meta.get_field("body")
    for child_name in streamfield.stream_block.child_blocks:
        for path, block in traverse_block(
            streamfield.stream_block.child_blocks[child_name]
        ):
            print(f"{path}: {block.__class__.__name__}")
    

    For a page with a body field containing heading, paragraph, and a hero StructBlock that has an image and caption, this would print:

    heading: CharBlock
    paragraph: RichTextBlock
    hero: StructBlock
    hero.image: ImageChooserBlock
    hero.caption: CharBlock
    
  • traverse_value(value, parent=None) walks the value of a StreamField on a page.

    It yields (path, bound_block) tuples for every block in the stream value, recursing into StreamValues, StructValues, ListValues, and TypedTables. This is intended to be used for deeply inspecting or migrating the content stored in a StreamField.

    from wagtail_traverse import traverse_value
    
    page = MyPage.objects.get(slug="example")
    for path, bound_block in traverse_value(page.body):
        print(f"{path}: {bound_block.block.__class__.__name__} = {bound_block.value}")
    

Paths

Both functions produce dotted path strings like hero.image or section.list.item that describe where a block sits in the tree.

License

This project is licensed under the MIT License. See LICENSE for details.

These functions originate in the wagtail-content-audit library as part of a block usage auditing. I have broken them out in this small utility library for convenience, since the ability to traverse StreamFields and their values is something I occasionally have found need to do.

Project details


Download files

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

Source Distribution

wagtail_traverse-1.0.1.tar.gz (10.2 kB view details)

Uploaded Source

Built Distribution

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

wagtail_traverse-1.0.1-py3-none-any.whl (10.3 kB view details)

Uploaded Python 3

File details

Details for the file wagtail_traverse-1.0.1.tar.gz.

File metadata

  • Download URL: wagtail_traverse-1.0.1.tar.gz
  • Upload date:
  • Size: 10.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for wagtail_traverse-1.0.1.tar.gz
Algorithm Hash digest
SHA256 f39014fe6cf94f9981f3841563d325ed2552bdd0efea50c9842d2f91a8964f14
MD5 9b2b3aea2ff66aad471d3ff896d3415d
BLAKE2b-256 eb29696ccb3e8e7c778b68a12e5cd99223f080b6b666954f62ae35cebc5936ea

See more details on using hashes here.

Provenance

The following attestation bundles were made for wagtail_traverse-1.0.1.tar.gz:

Publisher: publish.yml on willbarton/wagtail-traverse

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

File details

Details for the file wagtail_traverse-1.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for wagtail_traverse-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 d4f4d1cad2db48744742a07479f283f88536aac35cbfe68f15b3c13bf4581fc9
MD5 590ffc3c11ca058d28833dd79632e765
BLAKE2b-256 4fd77c8c0ed062657803328cc9825d7ed4b7dadc2042a0f26d21a1399a1a3861

See more details on using hashes here.

Provenance

The following attestation bundles were made for wagtail_traverse-1.0.1-py3-none-any.whl:

Publisher: publish.yml on willbarton/wagtail-traverse

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

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