click-loglevel


Nameclick-loglevel JSON
Version 0.6.0 PyPI version JSON
download
home_pageNone
SummaryLog level parameter type for Click
upload_time2025-02-11 15:06:30
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseNone
keywords cli option click command line interface log level log option logging option parsing
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            |repostatus| |ci-status| |coverage| |pyversions| |conda| |license|

.. |repostatus| image:: https://www.repostatus.org/badges/latest/active.svg
    :target: https://www.repostatus.org/#active
    :alt: Project Status: Active — The project has reached a stable, usable
          state and is being actively developed.

.. |ci-status| image:: https://github.com/jwodder/click-loglevel/actions/workflows/test.yml/badge.svg
    :target: https://github.com/jwodder/click-loglevel/actions/workflows/test.yml
    :alt: CI Status

.. |coverage| image:: https://codecov.io/gh/jwodder/click-loglevel/branch/master/graph/badge.svg
    :target: https://codecov.io/gh/jwodder/click-loglevel

.. |pyversions| image:: https://img.shields.io/pypi/pyversions/click-loglevel.svg
    :target: https://pypi.org/project/click-loglevel/

.. |conda| image:: https://img.shields.io/conda/vn/conda-forge/click-loglevel.svg
    :target: https://anaconda.org/conda-forge/click-loglevel
    :alt: Conda Version

.. |license| image:: https://img.shields.io/github/license/jwodder/click-loglevel.svg
    :target: https://opensource.org/licenses/MIT
    :alt: MIT License

`GitHub <https://github.com/jwodder/click-loglevel>`_
| `PyPI <https://pypi.org/project/click-loglevel/>`_
| `Issues <https://github.com/jwodder/click-loglevel/issues>`_
| `Changelog <https://github.com/jwodder/click-loglevel/blob/master/CHANGELOG.md>`_

``click-loglevel`` provides a ``LogLevel`` parameter type for use in Click_ and
asyncclick_ programs that wish to let the user set the logging level.  It
accepts all of the ``logging`` log level names (``CRITICAL``, ``ERROR``,
``WARNING``, ``INFO``, ``DEBUG``, and ``NOTSET``, all case insensitive), and
converts them into their corresponding numeric values.  It also accepts integer
values and leaves them as-is.  Custom log levels are also supported.

Starting in version 0.4.0, shell completion of log level names (both built-in
and custom) is also supported.

.. _Click: https://palletsprojects.com/p/click/
.. _asyncclick: https://github.com/python-trio/asyncclick


Installation
============
``click-loglevel`` requires Python 3.8 or higher.  Just use `pip
<https://pip.pypa.io>`_ for Python 3 (You have pip, right?) to install it::

    python3 -m pip install click-loglevel


Examples
========

``myscript.py``:

.. code:: python

    import logging
    import click
    from click_loglevel import LogLevel


    @click.command()
    @click.option(
        "-l",
        "--log-level",
        type=LogLevel(),
        default="INFO",
        help="Set logging level",
        show_default=True,
    )
    def main(log_level: int) -> None:
        logging.basicConfig(
            format="[%(levelname)-8s] %(message)s",
            level=log_level,
        )
        logging.log(log_level, "Log level set to %r", log_level)


    if __name__ == "__main__":
        main()

Running ``myscript.py``:

.. code:: console

    $ python3 myscript.py
    [INFO    ] Log level set to 20
    $ python3 myscript.py --log-level DEBUG
    [DEBUG   ] Log level set to 10
    $ python3 myscript.py --log-level error
    [ERROR   ] Log level set to 40
    $ python3 myscript.py --log-level 15
    [Level 15] Log level set to 15

Script with custom log levels:

.. code:: python

    import logging
    import click
    from click_loglevel import LogLevel


    logging.addLevelName(15, "VERBOSE")
    logging.addLevelName(25, "NOTICE")


    @click.command()
    @click.option(
        "-l",
        "--log-level",
        type=LogLevel(extra=["VERBOSE", "NOTICE"]),
        default="INFO",
        help="Set logging level",
        show_default=True,
    )
    def main(log_level: int) -> None:
        logging.basicConfig(
            format="[%(levelname)-8s] %(message)s",
            level=log_level,
        )
        logging.log(log_level, "Log level set to %r", log_level)


    if __name__ == "__main__":
        main()


API
===

The ``click_loglevel`` module contains a single class:

``LogLevel``
------------

A subclass of ``click.ParamType`` that accepts the standard logging level names
(case insensitive) and converts them to their corresponding numeric values.  It
also accepts integer values and leaves them as-is.

Custom log levels can be added by passing them as the ``extra`` argument to the
constructor.  ``extra`` can be either an iterable of level names (in which case
the levels must have already been defined — typically at the module level — by
calling ``logging.addLevelName()``) or a mapping from level names to their
corresponding values.  All custom log levels will be recognized case
insensitively; if two different level names differ only in case, the result is
undefined.

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "click-loglevel",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "cli option, click, command line interface, log level, log option, logging, option parsing",
    "author": null,
    "author_email": "John Thorvald Wodder II <click-loglevel@varonathe.org>",
    "download_url": "https://files.pythonhosted.org/packages/ae/52/1245ab97ac766ad075fd43896c1ef4f9c742d2eccc5fd9a93cf7d051c466/click_loglevel-0.6.0.tar.gz",
    "platform": null,
    "description": "|repostatus| |ci-status| |coverage| |pyversions| |conda| |license|\n\n.. |repostatus| image:: https://www.repostatus.org/badges/latest/active.svg\n    :target: https://www.repostatus.org/#active\n    :alt: Project Status: Active \u2014 The project has reached a stable, usable\n          state and is being actively developed.\n\n.. |ci-status| image:: https://github.com/jwodder/click-loglevel/actions/workflows/test.yml/badge.svg\n    :target: https://github.com/jwodder/click-loglevel/actions/workflows/test.yml\n    :alt: CI Status\n\n.. |coverage| image:: https://codecov.io/gh/jwodder/click-loglevel/branch/master/graph/badge.svg\n    :target: https://codecov.io/gh/jwodder/click-loglevel\n\n.. |pyversions| image:: https://img.shields.io/pypi/pyversions/click-loglevel.svg\n    :target: https://pypi.org/project/click-loglevel/\n\n.. |conda| image:: https://img.shields.io/conda/vn/conda-forge/click-loglevel.svg\n    :target: https://anaconda.org/conda-forge/click-loglevel\n    :alt: Conda Version\n\n.. |license| image:: https://img.shields.io/github/license/jwodder/click-loglevel.svg\n    :target: https://opensource.org/licenses/MIT\n    :alt: MIT License\n\n`GitHub <https://github.com/jwodder/click-loglevel>`_\n| `PyPI <https://pypi.org/project/click-loglevel/>`_\n| `Issues <https://github.com/jwodder/click-loglevel/issues>`_\n| `Changelog <https://github.com/jwodder/click-loglevel/blob/master/CHANGELOG.md>`_\n\n``click-loglevel`` provides a ``LogLevel`` parameter type for use in Click_ and\nasyncclick_ programs that wish to let the user set the logging level.  It\naccepts all of the ``logging`` log level names (``CRITICAL``, ``ERROR``,\n``WARNING``, ``INFO``, ``DEBUG``, and ``NOTSET``, all case insensitive), and\nconverts them into their corresponding numeric values.  It also accepts integer\nvalues and leaves them as-is.  Custom log levels are also supported.\n\nStarting in version 0.4.0, shell completion of log level names (both built-in\nand custom) is also supported.\n\n.. _Click: https://palletsprojects.com/p/click/\n.. _asyncclick: https://github.com/python-trio/asyncclick\n\n\nInstallation\n============\n``click-loglevel`` requires Python 3.8 or higher.  Just use `pip\n<https://pip.pypa.io>`_ for Python 3 (You have pip, right?) to install it::\n\n    python3 -m pip install click-loglevel\n\n\nExamples\n========\n\n``myscript.py``:\n\n.. code:: python\n\n    import logging\n    import click\n    from click_loglevel import LogLevel\n\n\n    @click.command()\n    @click.option(\n        \"-l\",\n        \"--log-level\",\n        type=LogLevel(),\n        default=\"INFO\",\n        help=\"Set logging level\",\n        show_default=True,\n    )\n    def main(log_level: int) -> None:\n        logging.basicConfig(\n            format=\"[%(levelname)-8s] %(message)s\",\n            level=log_level,\n        )\n        logging.log(log_level, \"Log level set to %r\", log_level)\n\n\n    if __name__ == \"__main__\":\n        main()\n\nRunning ``myscript.py``:\n\n.. code:: console\n\n    $ python3 myscript.py\n    [INFO    ] Log level set to 20\n    $ python3 myscript.py --log-level DEBUG\n    [DEBUG   ] Log level set to 10\n    $ python3 myscript.py --log-level error\n    [ERROR   ] Log level set to 40\n    $ python3 myscript.py --log-level 15\n    [Level 15] Log level set to 15\n\nScript with custom log levels:\n\n.. code:: python\n\n    import logging\n    import click\n    from click_loglevel import LogLevel\n\n\n    logging.addLevelName(15, \"VERBOSE\")\n    logging.addLevelName(25, \"NOTICE\")\n\n\n    @click.command()\n    @click.option(\n        \"-l\",\n        \"--log-level\",\n        type=LogLevel(extra=[\"VERBOSE\", \"NOTICE\"]),\n        default=\"INFO\",\n        help=\"Set logging level\",\n        show_default=True,\n    )\n    def main(log_level: int) -> None:\n        logging.basicConfig(\n            format=\"[%(levelname)-8s] %(message)s\",\n            level=log_level,\n        )\n        logging.log(log_level, \"Log level set to %r\", log_level)\n\n\n    if __name__ == \"__main__\":\n        main()\n\n\nAPI\n===\n\nThe ``click_loglevel`` module contains a single class:\n\n``LogLevel``\n------------\n\nA subclass of ``click.ParamType`` that accepts the standard logging level names\n(case insensitive) and converts them to their corresponding numeric values.  It\nalso accepts integer values and leaves them as-is.\n\nCustom log levels can be added by passing them as the ``extra`` argument to the\nconstructor.  ``extra`` can be either an iterable of level names (in which case\nthe levels must have already been defined \u2014 typically at the module level \u2014 by\ncalling ``logging.addLevelName()``) or a mapping from level names to their\ncorresponding values.  All custom log levels will be recognized case\ninsensitively; if two different level names differ only in case, the result is\nundefined.\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Log level parameter type for Click",
    "version": "0.6.0",
    "project_urls": {
        "Bug Tracker": "https://github.com/jwodder/click-loglevel/issues",
        "Source Code": "https://github.com/jwodder/click-loglevel"
    },
    "split_keywords": [
        "cli option",
        " click",
        " command line interface",
        " log level",
        " log option",
        " logging",
        " option parsing"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "bec5797c162fd3bd8810fe273f27d296941e572aaeb4480a32a246c8e7556549",
                "md5": "8d6c780c89577389881704447d1cbfea",
                "sha256": "7f1ef9d33b3d2f4f9c516377efcfbdc16f4fc943b34144718cec941e8308b6e8"
            },
            "downloads": -1,
            "filename": "click_loglevel-0.6.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "8d6c780c89577389881704447d1cbfea",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 5386,
            "upload_time": "2025-02-11T15:06:28",
            "upload_time_iso_8601": "2025-02-11T15:06:28.602222Z",
            "url": "https://files.pythonhosted.org/packages/be/c5/797c162fd3bd8810fe273f27d296941e572aaeb4480a32a246c8e7556549/click_loglevel-0.6.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "ae521245ab97ac766ad075fd43896c1ef4f9c742d2eccc5fd9a93cf7d051c466",
                "md5": "186c99dacc21a99bd844be21104ab140",
                "sha256": "d582e62c373c43d98759942d07647a9299c50c5c290d6b0ac3a17ed1ecbb6eba"
            },
            "downloads": -1,
            "filename": "click_loglevel-0.6.0.tar.gz",
            "has_sig": false,
            "md5_digest": "186c99dacc21a99bd844be21104ab140",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 7506,
            "upload_time": "2025-02-11T15:06:30",
            "upload_time_iso_8601": "2025-02-11T15:06:30.443190Z",
            "url": "https://files.pythonhosted.org/packages/ae/52/1245ab97ac766ad075fd43896c1ef4f9c742d2eccc5fd9a93cf7d051c466/click_loglevel-0.6.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-02-11 15:06:30",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "jwodder",
    "github_project": "click-loglevel",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "tox": true,
    "lcname": "click-loglevel"
}
        
Elapsed time: 1.29220s