click-compose


Nameclick-compose JSON
Version 2025.10.27.2 PyPI version JSON
download
home_pageNone
SummaryComposable Click callback utilities for building flexible CLI applications.
upload_time2025-10-27 10:37:17
maintainerNone
docs_urlNone
authorNone
requires_python>=3.10
licenseNone
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"
}
        
Elapsed time: 1.18120s