| Name | click-compose JSON |
| Version |
2025.10.27.2
JSON |
| download |
| home_page | None |
| Summary | Composable Click callback utilities for building flexible CLI applications. |
| upload_time | 2025-10-27 10:37:17 |
| maintainer | None |
| docs_url | None |
| author | None |
| requires_python | >=3.10 |
| license | None |
| keywords |
callbacks
cli
click
validation
|
| VCS |
 |
| bugtrack_url |
|
| requirements |
No requirements were recorded.
|
| Travis-CI |
No Travis.
|
| coveralls test coverage |
No coveralls.
|
click-compose
=============
Composable Click callback utilities for building flexible CLI applications.
.. contents::
:local:
Installation
------------
.. code-block:: shell
$ pip install click-compose
Or with ``uv``:
.. code-block:: shell
$ uv add click-compose
Quick Start
-----------
``click-compose`` provides two main utilities for composing Click callbacks:
multi_callback
~~~~~~~~~~~~~~
Combine multiple callbacks into a single callback that applies them in sequence:
.. code-block:: python
import click
from click_compose import multi_callback
def validate_positive(ctx, param, value):
if value <= 0:
raise click.BadParameter("Must be positive")
return value
def validate_max_100(ctx, param, value):
if value > 100:
raise click.BadParameter("Must be <= 100")
return value
@click.command()
@click.option(
"--count",
type=int,
callback=multi_callback([validate_positive, validate_max_100]),
)
def cmd(count):
click.echo(f"Count: {count}")
sequence_validator
~~~~~~~~~~~~~~~~~~
Apply a validator to each element in a sequence (useful with ``multiple=True``):
.. code-block:: python
import click
from click_compose import sequence_validator
def validate_positive(ctx, param, value):
if value <= 0:
raise click.BadParameter("Must be positive")
return value
@click.command()
@click.option(
"--numbers",
multiple=True,
type=int,
callback=sequence_validator(validate_positive),
)
def cmd(numbers):
click.echo(f"Sum: {sum(numbers)}")
Documentation
-------------
See the `full documentation <https://adamtheturtle.github.io/click-compose/>`__.
Raw data
{
"_id": null,
"home_page": null,
"name": "click-compose",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": null,
"keywords": "callbacks, cli, click, validation",
"author": null,
"author_email": "Adam Dangoor <adamdangoor@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/b4/14/8bc29f380b347328becb8c1e8f05647925bb60f725c5c5a41aac90c38ff8/click_compose-2025.10.27.2.tar.gz",
"platform": null,
"description": "click-compose\n=============\n\nComposable Click callback utilities for building flexible CLI applications.\n\n.. contents::\n :local:\n\nInstallation\n------------\n\n.. code-block:: shell\n\n $ pip install click-compose\n\nOr with ``uv``:\n\n.. code-block:: shell\n\n $ uv add click-compose\n\nQuick Start\n-----------\n\n``click-compose`` provides two main utilities for composing Click callbacks:\n\nmulti_callback\n~~~~~~~~~~~~~~\n\nCombine multiple callbacks into a single callback that applies them in sequence:\n\n.. code-block:: python\n\n import click\n from click_compose import multi_callback\n\n def validate_positive(ctx, param, value):\n if value <= 0:\n raise click.BadParameter(\"Must be positive\")\n return value\n\n def validate_max_100(ctx, param, value):\n if value > 100:\n raise click.BadParameter(\"Must be <= 100\")\n return value\n\n @click.command()\n @click.option(\n \"--count\",\n type=int,\n callback=multi_callback([validate_positive, validate_max_100]),\n )\n def cmd(count):\n click.echo(f\"Count: {count}\")\n\nsequence_validator\n~~~~~~~~~~~~~~~~~~\n\nApply a validator to each element in a sequence (useful with ``multiple=True``):\n\n.. code-block:: python\n\n import click\n from click_compose import sequence_validator\n\n def validate_positive(ctx, param, value):\n if value <= 0:\n raise click.BadParameter(\"Must be positive\")\n return value\n\n @click.command()\n @click.option(\n \"--numbers\",\n multiple=True,\n type=int,\n callback=sequence_validator(validate_positive),\n )\n def cmd(numbers):\n click.echo(f\"Sum: {sum(numbers)}\")\n\nDocumentation\n-------------\n\nSee the `full documentation <https://adamtheturtle.github.io/click-compose/>`__.\n",
"bugtrack_url": null,
"license": null,
"summary": "Composable Click callback utilities for building flexible CLI applications.",
"version": "2025.10.27.2",
"project_urls": {
"Source": "https://github.com/adamtheturtle/click-compose"
},
"split_keywords": [
"callbacks",
" cli",
" click",
" validation"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "ed265760f1cd6973e82300c0018e53f74a4fc24fdc7b62584d025b7975dd0960",
"md5": "de4e0b65d830947587de888d29ce2539",
"sha256": "a40b0671eef254ada687d7ea0ae78831cdbd91caf133ae9fcf224a9f766e30f4"
},
"downloads": -1,
"filename": "click_compose-2025.10.27.2-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "de4e0b65d830947587de888d29ce2539",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": ">=3.10",
"size": 4404,
"upload_time": "2025-10-27T10:37:15",
"upload_time_iso_8601": "2025-10-27T10:37:15.717361Z",
"url": "https://files.pythonhosted.org/packages/ed/26/5760f1cd6973e82300c0018e53f74a4fc24fdc7b62584d025b7975dd0960/click_compose-2025.10.27.2-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b4148bc29f380b347328becb8c1e8f05647925bb60f725c5c5a41aac90c38ff8",
"md5": "dbf14cac92285958e09c6c155384010f",
"sha256": "2388f2bf2256f1b2bcdd15e3ca62d2262d963c2654dc8a2780b9208e9f6d4aa5"
},
"downloads": -1,
"filename": "click_compose-2025.10.27.2.tar.gz",
"has_sig": false,
"md5_digest": "dbf14cac92285958e09c6c155384010f",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 16508,
"upload_time": "2025-10-27T10:37:17",
"upload_time_iso_8601": "2025-10-27T10:37:17.217878Z",
"url": "https://files.pythonhosted.org/packages/b4/14/8bc29f380b347328becb8c1e8f05647925bb60f725c5c5a41aac90c38ff8/click_compose-2025.10.27.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-10-27 10:37:17",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "adamtheturtle",
"github_project": "click-compose",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "click-compose"
}