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.

Download files

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

Source Distribution

bblocks_projects-1.1.1.tar.gz (50.3 kB view details)

Uploaded Source

Built Distribution

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

bblocks_projects-1.1.1-py3-none-any.whl (54.9 kB view details)

Uploaded Python 3

File details

Details for the file bblocks_projects-1.1.1.tar.gz.

File metadata

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

File hashes

Hashes for bblocks_projects-1.1.1.tar.gz
Algorithm Hash digest
SHA256 7d9c59f37362242f856fb75a747dfac7ce8102a62c0861fd5339ddbca8a0c5b2
MD5 2b2e19bb2616ae3ea61d47b0958e1f18
BLAKE2b-256 bf7178009e4bcbda05382354cba33c6c0eb412a44f67612866519c54b687a0ca

See more details on using hashes here.

Provenance

The following attestation bundles were made for bblocks_projects-1.1.1.tar.gz:

Publisher: publish.yml on ONEcampaign/bblocks-projects

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

File details

Details for the file bblocks_projects-1.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for bblocks_projects-1.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 9ceab18c1d7f516e769514053fabeb0cfaa94f7c06923bea9f84b92dd714efae
MD5 54e2beef293ac99ad1bb94e8cb70cfd8
BLAKE2b-256 0c1fd11d585821402c550ab702eed854a14bff97e27a4e30424d3367de629a3c

See more details on using hashes here.

Provenance

The following attestation bundles were made for bblocks_projects-1.1.1-py3-none-any.whl:

Publisher: publish.yml on ONEcampaign/bblocks-projects

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

1.1.1 This release

2 files

1.1.0

2 files

1.0.3

2 files

1.0.2

2 files

1.0.1

2 files

1.0.0

2 files

0.2.2

2 files

0.2.1

2 files

0.2.0

2 files

0.1.2

2 files

0.1.1

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