Skip to main content

workshopify

Skeleton and scaffolding for template-rendered, notebook-based workshop repositories.

A workshop repo declares everything mechanical in [tool.workshopify] tables in its pyproject.toml, and workshopify does the rest:

Command Does
workshopify render Re-render templated values and assets in place
workshopify check Report stale rendered values or assets; exit 1 if any
workshopify generate Generate the notebooks and notes from src/
workshopify build Assemble the published workshop tree into its branch worktree
workshopify set <key> <value> Set a [tool.workshopify.params] value and re-render
workshopify worktree <branch> Prepare a branch worktree without building

Configuration

Every command finds its workshop by walking up from the working directory to the nearest pyproject.toml with a [tool.workshopify] table. That file's directory is the repo root, and every path below is relative to it. Keys are kebab-case, and every one of them has a default, so a table with nothing to say may be left out entirely.

[tool.workshopify]

Key Default Does
context none Names the context module: the workshop's procedural half, whose module-level names become the namespace the templating runs in, and whose optional ASSETS dict maps a path in the published tree to the repo file copied there verbatim. Omit it for a workshop that templates nothing and declares no assets; a module that is named must exist.
params {} The workshop's own values, handed to the context module as params and rewritten in place by workshopify set. The keys are whatever that module reads.

[tool.workshopify.render]

Key Default Does
files [] Glob patterns naming the files render rewrites in place and check verifies. A pattern that matches nothing is an error — a typo'd glob would otherwise render nothing, forever, in silence — while declaring no patterns at all is a workshop that templates nothing.

[tool.workshopify.notebooks]

Key Default Does
src "src" The directory holding the py:percent sources. Which notebooks exist is decided by the [[tool.ipynb-scrubber.files]] entries; this only says where each one's source is read from, as <src>/<stem>.py.

[tool.workshopify.build]

Key Default Does
branch "workshop" The branch the published tree is assembled onto, in a worktree at <root>/<branch>. build writes that tree and prints how to review and push it; it commits nothing itself.
include [] Repo files and directories copied into the published tree at the same relative path. Entries must be relative and free of ...
keep-tables ["project", "tool.uv"] Dotted paths kept in the participants' derived pyproject.toml; everything else is dropped. A path names its whole subtree.
drop-keys [] Dotted paths carved back out of what keep-tables kept — the workspace wiring under [tool.uv], say, which participants have no checkout to point at.

A path in either list that matches nothing in the repo's own pyproject.toml is an error rather than a no-op, as is a path listed alongside one of its own descendants: both would otherwise ship a silently wrong pyproject.

What [tool.workshopify] does not say

Some of the published tree comes from places no key names:

  • static/ at the repo root is an overlay — every file under it is copied to the same path in the published tree, with the static/ prefix stripped.
  • [tool.jupytext] and [tool.ipynb-scrubber] are read as those tools define them, so the notebook formats, the scrub markers, and the set of generated notebooks and notes are configured there and not here.
  • uv.lock is derived from the repo's own lock, re-resolved offline, so participants get the versions contributors develop against — and a repo that has never run uv lock has nothing to build from.

Status

Extracted from a working workshop repository and being generalised. The configuration contract and command surface are still subject to change.

Download files

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

Source Distribution

workshopify-0.2.2.tar.gz (101.9 kB view details)

Uploaded Source

Built Distribution

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

workshopify-0.2.2-py3-none-any.whl (47.6 kB view details)

Uploaded Python 3

File details

Details for the file workshopify-0.2.2.tar.gz.

File metadata

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

File hashes

Hashes for workshopify-0.2.2.tar.gz
Algorithm Hash digest
SHA256 cf30417f2c56ccbbf243bf8c6db5ad649e8d7fb32ea131f0c1f06c888a467489
MD5 f3a35ed207cc9a7d5e4599c2c9d45dbb
BLAKE2b-256 7eb6d4d2bf658302175d1b723acac7b92478eeb9ae8d382480ca139ef38a6ec0

See more details on using hashes here.

Provenance

The following attestation bundles were made for workshopify-0.2.2.tar.gz:

Publisher: release.yml on jkeifer/workshopify

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

File details

Details for the file workshopify-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: workshopify-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 47.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for workshopify-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 a4e44ceeb9540a35d161fa3b57452f8823027fad45e168882e6908497f1f6a85
MD5 473ba926075a2b5b25a164aac5beaf1b
BLAKE2b-256 fa6fe2dc40e87630c4c4d09a2a5617ef5d0a73fee52777c6712bd711f1ce6a98

See more details on using hashes here.

Provenance

The following attestation bundles were made for workshopify-0.2.2-py3-none-any.whl:

Publisher: release.yml on jkeifer/workshopify

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

0.2.2 This release

2 files

0.2.1

2 files

0.2.0

2 files

0.1.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page