diff --git a/README.md b/README.md index d603290..17b70c7 100644 --- a/README.md +++ b/README.md @@ -44,19 +44,12 @@

---- - ## About > [!WARNING] > _Writing command-line interfaces can get messy!_ -It is not uncommon for CLIs to consist of many commands, -subcommands, arguments, options and aliases, on -top of dealing with other aspects such as documentation and input types when -it comes to argument parsing. - -Designing such an interface can quickly spiral into chaos without the help of +Designing a _good_ CLI can quickly spiral into chaos without the help of an intuitive CLI builder. **Feud builds on [Click](https://click.palletsprojects.com/en/8.1.x/) for @@ -657,6 +650,10 @@ $ python generate.py "dog barking" "cat meowing" --output audio.txt +_By relying on Pydantic to handle the hard work of validation, we can contain all +of the required CLI constraints in a simple function signature, leaving you to focus +on the important part – implementing your commands._ + ### Highly configurable and extensible > [!IMPORTANT] @@ -857,72 +854,119 @@ Feud either relies heavily on, or was inspired by the following packages. It would be greatly appreciated if you also supported the below maintainers and the work they have done that Feud has built upon. -### [Click](https://github.com/pallets/click) + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ProjectDescription
+ +##### [Click](https://github.com/pallets/click) -by [@pallets](https://github.com/pallets) +by [@pallets](https://github.com/pallets) - -> _Click is a Python package for creating beautiful command line interfaces in a composable way with as little code as necessary._ + + Feud is essentially a wrapper around Click that takes classes and functions with type hints and intelligently 'compiles' them into a ready-to-use Click generated CLI. -### [Rich Click](https://github.com/ewels/rich-click) +
+ +##### [Rich Click](https://github.com/ewels/rich-click) -by [@ewels](https://github.com/ewels) +by [@ewels](https://github.com/ewels) -> _Richly rendered command line interfaces in click._ + A shim around Click that renders help output nicely using [Rich](https://github.com/Textualize/rich). -### [Pydantic](https://github.com/pydantic/pydantic) +
+ +##### [Pydantic](https://github.com/pydantic/pydantic) -by [@samuelcolvin](https://github.com/samuelcolvin) +by [@samuelcolvin](https://github.com/samuelcolvin) -> _Data validation using Python type hints._ + Pydantic is a validation package that makes it easy to declaratively validate input data based on type hints. -The package offers support for common standard library types (e.g. `int`, -`float`, `str`, `date`/`datetime`), plus more complex types which can also be -used as type hints in Feud commands for input validation. +The package offers support for common standard library types, plus more complex +types which can also be used as type hints in Feud commands for input validation. -### [Typer](https://github.com/tiangolo/typer) +
+ +##### [Typer](https://github.com/tiangolo/typer) -by [@tiangolo](https://github.com/tiangolo) +by [@tiangolo](https://github.com/tiangolo) -> _Typer is a library for building CLI applications that users will love using and developers will love creating._ + Typer shares a similar ideology to Feud, in that building CLIs should be simple and not require learning new functions or constantly referring to library documentation. Typer is also based on Click. -One source of motivation for creating Feud is that at the time of creation, -Pydantic was not yet supported as a type system for Typer. It is worth -noting that Pydantic as an optional dependency is on Typer's [tentative roadmap](https://github.com/tiangolo/typer/issues/678), -so it will be interesting to see how the implementation compares to Feud! - Typer is a more complete library for building CLIs overall, but currently lacks support for more complex types such as those offered by Pydantic. +
+ +##### [Thor](https://github.com/rails/thor) + + + +by [@rails](https://github.com/rails) + + + + + +Though not a Python package, the highly object-oriented design of Thor (a CLI +building package in Ruby) – in particular the use of classes to define command +groups – greatly influenced the implementation of the `feud.Group` class. + +
+ ## Contributing All contributions to this repository are greatly appreciated. Contribution guidelines can be found [here](/CONTRIBUTING.md). diff --git a/docs/source/index.rst b/docs/source/index.rst index 5b8b549..1bb269c 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -40,11 +40,7 @@ Feud ---- -It is not uncommon for CLIs to consist of many commands, subcommands, -arguments, options and aliases, on top of dealing with other aspects such as -documentation and input types when it comes to argument parsing. - -Designing such interfaces can spiral into chaos without the help of +Designing a *good* CLI can spiral into chaos without the help of an intuitive CLI builder. **Feud builds on** `Click `__ **for