Skip to main content

bblocks-projects

A CLI for creating, updating, and auditing Python projects against a shared Copier template.

PyPI Python License

bblocks-projects is the ONE Campaign's tool for keeping its Python projects consistent. It scaffolds new repos, pulls template improvements into existing ones, and adds individual pieces (pre-commit, CI, ruff config) to projects that didn't start from the template.

Why this exists

Every Python project starts with the same decisions and boilerplate: which linter, which type checker, how to wire CI, where tests live, how publishing works. bblocks-projects keeps the choices in one place (the template repo) and gives you four commands to apply them: create, update, add, and doctor.

Install

Requires Python 3.12+, git, and uv on PATH.

# One-off, no install (recommended)
uvx bblocks-projects create my-project

# Install with uv
uv tool install bblocks-projects

# Or pipx / pip
pipx install bblocks-projects
pip install bblocks-projects

If you're signed into the GitHub CLI (gh auth login), create prefills your name, email, and username from your GitHub profile.

Usage

Create a new project. Interactive by default — answer a handful of questions about name, license, and project type:

bblocks-projects create my-analysis        # new subdirectory
bblocks-projects create --here             # current directory

You'll be asked to pick package (publishable to PyPI; src layout, pytest, py.typed) or project (analysis, pipeline, internal tool — adds data/raw/, data/processed/, optional notebooks, and ruff/ty configs that tolerate pandas/numpy stub gaps). To skip the prompts:

bblocks-projects create my-package --type package --defaults

Update an existing project when the template changes upstream:

cd my-analysis
uvx bblocks-projects update
git diff       # review what changed
uv sync

Previously-answered questions are reused silently. Pass --no-skip-answered to re-prompt for any of them, or --ref v1.2.0 to update to a specific template version instead of main.

Add a single component to any Python project — including ones that didn't start from the template:

uvx bblocks-projects add --list             # see what's available
uvx bblocks-projects add pre-commit         # one component
uvx bblocks-projects add ruff ci pytest     # several at once

Available components: pre-commit, ruff, ci, pytest, and pypi-publish (packages only). add merges into your existing pyproject.toml rather than overwriting it, and shows the diff before applying.

Run the doctor to check a project against the current standards:

uvx bblocks-projects doctor                 # diagnose the current directory
uvx bblocks-projects doctor --strict        # exit non-zero on findings (CI-friendly)
uvx bblocks-projects doctor --check-updates # is the template newer upstream?

When not to use this

  • You're not at ONE Data. The template encodes our specific choices (uv, ruff, ty, GitHub Actions, src-layout). If your team has different ones, fork the template repo — don't fight ours.
  • You don't want a Copier-managed project. create and update rely on .copier-answers.yml to track which template version generated the project. If you'd rather not have that file, use add to take a one-shot copy of the components you want and walk away.
  • Your project predates Copier and you want full template adoption. update requires .copier-answers.yml. Either start from add for the pieces you need, or follow the adoption guide.

What you get

Every generated project includes uv, ruff, ty, pre-commit, and a GitHub Actions CI workflow. Packages also get pytest with coverage, a py.typed marker, and a PyPI trusted-publishing workflow. Projects also get a data/ tree (raw/ gitignored, processed/ tracked) and an optional notebooks/ directory.

Next

  • Getting Started — a 15-minute walkthrough from zero to a generated project you've made a real change to.

Source · Issues · MIT — see LICENSE.

Metadata

Release files for bblocks-projects 1.1.1

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

Source distribution (sdist)

Source distribution for bblocks-projects 1.1.1
File Size Uploaded
bblocks_projects-1.1.1.tar.gz 50.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for bblocks-projects 1.1.1
File Interpreter ABI Platform
bblocks_projects-1.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 105.2 kB

Release files / bblocks_projects-1.1.1.tar.gz

Download URL bblocks_projects-1.1.1.tar.gz
Size 50.3 kB
Tags Source
SHA-256 checksum
How to use checksums
7d9c59f37362242f856fb75a747dfac7ce8102a62c0861fd5339ddbca8a0c5b2
BLAKE2b-256 checksum
How to use checksums
bf7178009e4bcbda05382354cba33c6c0eb412a44f67612866519c54b687a0ca
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 13, 2026.

Transparency log

Release files / bblocks_projects-1.1.1-py3-none-any.whl

Download URL bblocks_projects-1.1.1-py3-none-any.whl
Size 54.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9ceab18c1d7f516e769514053fabeb0cfaa94f7c06923bea9f84b92dd714efae
BLAKE2b-256 checksum
How to use checksums
0c1fd11d585821402c550ab702eed854a14bff97e27a4e30424d3367de629a3c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 13, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.1.1 This release

2 release files

1.1.0

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release 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