Skip to main content

A tiny declarative Argparse wrapper.

Project description

Do You Know Every Selection?

dykes helps you get a handle on your tools.

It uses typing.NamedTuples or dataclasses to declaratively set up your argument parser and then returns an instance of your argument class.

An example usage, in example_application.py

from dataclasses import dataclass
from pathlib import Path
from typing import Annotated

import dykes

@dataclass
class ExampleApplication:
    path: Annotated[Path, "The paths to operate on."]
    dry_run: bool
    prompt: dykes.StoreFalse
    verbosity: dykes.Count

if __name__ == "__main__":
    arguments = dykes.parse_args(ExampleApplication)
    print(arguments)

Use this from the command line:

python example_application.py ~ -d -vv

And the output looks like:

ExampleApplication(path=Path('~'), dry_run=True, prompt=True, verbosity=2)

Inlining dykes

While dykes is packaged to be used with pip, it is self-contained and uses relative imports for its own code. If you would like to vendor it, take the files under src/dykes/ and include it in your own project.

What works

  • Positional parameters
  • Store True flags
    • Two variants: type a bool or use dykes.StoreTrue
  • Store False flags
  • Count flags
  • A StrEnum of Argparse actions. dykes.Action instances can be passed to directly to argparse.add_parameter
  • Parameter help strings: provide a bare string via Annotated
  • Application description via your dataclass or NamedTuple's docstring.
  • snake_case field names converted to --kebab-case long options.
  • Number of Args
    • Implicitly with arg: list[T]
    • explicitly via arg: Annotated[list[T], dykes.options.NArgs("+")]
    • Explicit can use positional arguments with a default factory via dataclasses.field as well.

What works but is underwhelming

  • Parameter defaults. (positional parameters can't use them, and the other supported fields have good ones.)

Coming Soon

  • More actions
    • Store Const
    • Append
    • Append Const
    • Extend
    • Version
  • More Options
    • Defining custom flags (currently derived from names)
    • const
    • choices
    • required
    • deprecated
  • Proper documentation

Coming Maybe

  • Application framework based on __call__
  • Subcommands

Isn't That Name Insensitive?

Author and maintainer here: I am a transgender lesbian and I find it funny. If you don't want that word in your project, that's fine! Please see instructions above on how to inline the project. Feel free to rename it.

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

dykes-0.5.0.tar.gz (8.1 kB view details)

Uploaded Source

Built Distribution

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

dykes-0.5.0-py3-none-any.whl (9.9 kB view details)

Uploaded Python 3

File details

Details for the file dykes-0.5.0.tar.gz.

File metadata

  • Download URL: dykes-0.5.0.tar.gz
  • Upload date:
  • Size: 8.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for dykes-0.5.0.tar.gz
Algorithm Hash digest
SHA256 9cc966f3a8cbedf911c76ec127123701344eff1ed9f5045d0d32ee849828a590
MD5 f1a80b5a6fc7a7ff28e27076898744a8
BLAKE2b-256 ef032dde60ec6ea87352fa1962c78cc2334e9e3048d3919b4f01af5fdc3ce21f

See more details on using hashes here.

Provenance

The following attestation bundles were made for dykes-0.5.0.tar.gz:

Publisher: release.yml on pathunstrom/dykes

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

File details

Details for the file dykes-0.5.0-py3-none-any.whl.

File metadata

  • Download URL: dykes-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 9.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for dykes-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 22f1c1df22c8e79978d9d5578d7d8d69dd2a7fd24abe8e91354262656e34881c
MD5 e98d0601f2d28be62e61fd93207bb90a
BLAKE2b-256 f392a54a3bbd2c4df079fd73b255a4045976645a2ac9195792ba208badb6b647

See more details on using hashes here.

Provenance

The following attestation bundles were made for dykes-0.5.0-py3-none-any.whl:

Publisher: release.yml on pathunstrom/dykes

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

Supported by

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