Skip to main content

Forward all arguments using click without any parsing and without -

Project description

clickforward

Forward all click arguments without any parsing and any options from the first non-option positional argument.

See https://github.com/pallets/click/pull/2686

Usage

This change introduces a new clickforward.FORWARD argument type, which stops the parser from further parsing arguments. Is it now possible to forward arguments without any parsing.

Set the argument with nargs=-1 and type=clickforward.FORWARD to perfectly capture all arguments.

Example implementation of docker run` command:

import clickforward
import click


@click.group()
@click.option("-v", "--verbose", is_flag=True)
def docker(verbose):
    pass


@docker.command()
@click.option("-v", "--verbose", is_flag=True)
@click.option("-u", "--user")
@click.argument("image")
@click.argument("command", nargs=-1, type=clickforward.FORWARD)
def run(verbose, user, image, command):
    cmdline: List[str] = (
        ["docker"]
        + ["run"]
        + ([f"-u{user}"] if user else [])
        + [image]
        + list(command)
    )
    click.echo(" ".join(shlex.quote(x) for x in cmdline))


docker()

Allows for forwarding sh --help -u -v to the docker container.

$ python ./docker.py -v run -u kamil alpine sh --help -u -v
['docker', 'run', '-ukamil', 'alpine', 'sh', '--help', '-u', '-v']

How it works

The act of importing the module replaces the click.parser.OptionParser parsing function of arguments with custom logic.

I have only tested with click==8.1.7.

Epilogue

Written by Kamil Cukrowski

Project details


Download files

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

Source Distribution

clickforward-0.0.1.tar.gz (4.0 kB view details)

Uploaded Source

Built Distribution

clickforward-0.0.1-py3-none-any.whl (3.5 kB view details)

Uploaded Python 3

File details

Details for the file clickforward-0.0.1.tar.gz.

File metadata

  • Download URL: clickforward-0.0.1.tar.gz
  • Upload date:
  • Size: 4.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.2 CPython/3.11.8

File hashes

Hashes for clickforward-0.0.1.tar.gz
Algorithm Hash digest
SHA256 a9af8aa5863e5a923fc63867358e11b574059b7f970dc09e18e4344122bfed91
MD5 f6ea9fe0c0a62314c46ee08b0a0d9899
BLAKE2b-256 3cef4e95e87c9651495ff2f897ec8027c723040f955059e714a63201a3520a1d

See more details on using hashes here.

File details

Details for the file clickforward-0.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for clickforward-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 229ca6ab5e11a23205409e9623f029241d287c5351e33aa9e15870f6fcf8dd8f
MD5 4028bdf80a3aa37308138b5254d02fcd
BLAKE2b-256 603e58aaaaf927f68aaeb8f64e88c6ddfeee5880ec7646bcbcdce3b7b4b086c3

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page