Develop CLI tools with top-notch config management like a boss.
Project description
Hydraclick
Hydraclick is an open-source Python package that seamlessly integrates Hydra and Click to create production-grade command-line interfaces (CLIs). It leverages Hydra's powerful configuration management with Click's user-friendly CLI creation to provide a robust foundation for building complex CLI applications.
Features
- Configuration Management: Utilize Hydra's dynamic configuration capabilities for flexible CLI options.
- Structured Logging: Integrate with flogging for structured and efficient logging.
- Easy Decorators: Simple decorators to convert functions into CLI commands.
- Extensible: Easily extend and customize to fit your project's needs.
- Shell Completion: Support for generating shell completion scripts.
Installation
Install Hydraclick via pip:
pip install hydraclick
Supported Python Versions
Hydraclick supports the following Python versions:
- Python 3.9
- Python 3.10
- Python 3.11
- Python 3.12
Supported Operating Systems
Hydraclick is compatible with the following operating systems:
- Ubuntu (latest)
- macOS (latest)
Getting Started
Basic Usage
Define your function and decorate it with @hydra_command to create a CLI command.
from omegaconf import DictConfig
from hydraclick import hydra_command
@hydra_command(config_path="config_folder", config_name="file_without_extension")
def my_function(config: DictConfig):
print(f"Running with config: {config.pretty()}")
Running the CLI
After defining your function, you can run it from the command line:
python my_script.py --config-path path/to/config --config-name my_config
Example
Here's a complete example of creating a CLI with Hydraclick:
import sys
from omegaconf import DictConfig
from hydraclick import hydra_command
@hydra_command(config_path="configs", config_name="app_config", as_kwargs=True)
def main(**kwargs):
print(f"Running with config: {kwargs}")
if __name__ == "__main__":
main()
API Reference
hydra_command
Decorator to create CLI commands.
import omegaconf
def hydra_command(
config_path: str | Path | None = None,
config_name: str | None = "config",
version_base: str | None = None,
as_kwargs: bool = False,
preprocess_config: Callable[[DictConfig], DictConfig] | None = None,
print_config: bool = True,
resolve: bool = True,
use_flogging: bool = True,
terminal_effect: Callable | None = omegaconf.MISSING,
**flogging_kwargs: Any,
) -> Callable:
Configuration Options
Hydraclick provides several configuration options to customize your CLI:
config_path: Path to the configuration directory. Passed tohydra.main()config_name: Name of the configuration file. Passed tohydra.main()version_base: Base version of the configuration. Passed tohydra.main()as_kwargs: The mode in which to run the function. IfTrue, the function is run with the configuration as keyword arguments. In this case, the configuration is converted to a dictionary before passing it to the function. IfFalse, pass the configuration as a singleOmegaConf.DictConfigobject. Defaults toFalse.preprocess_config: Function to preprocess the configuration. It takes aDictConfigobject and returns aDictConfigobject.print_config: Whether to print the configuration before execution.resolve: Whether to resolve the configuration.use_flogging: Whether to use flogging for structured logging.**flogging_kwargs: Additional keyword arguments for flogging.terminal_effect: The terminal effect function to use when rendering the command help.
Logging with Flogging
Hydraclick integrates with flogging for structured logging. To enable flogging, ensure it's installed:
pip install hydraclick[flogging]
pip install flogging
If flogging is not available, Hydraclick will log a warning and disable structured logging.
Terminal Text Effects
Hydraclick supports terminal text effects using the Terminal Text Effects library to enhance the user experience with animated and styled text outputs in the terminal. Install the library with:
pip install hydraclick[terminaltexteffects]
pip install terminaltexteffects
Installing all the extras
To install all the extras, use the following command:
pip install hydraclick[all]
Shell Completion
Hydraclick supports generating shell completion scripts. Use the --shell-completion option to generate scripts for your preferred shell.
cli_app command --shell-completion install=bash > my_script_completion.sh
source my_script_completion.sh
Contribution
Contributions are welcome! Please follow these steps:
- Fork the repository.
- Create a new branch for your feature or bugfix.
- Commit your changes with clear messages.
- Submit a pull request detailing your changes.
For major changes, please open an issue first to discuss your ideas.
License
This project is licensed under the MIT License. See the LICENSE file for details.
Support
If you encounter any issues or have questions, feel free to open an issue on the GitHub repository.
Acknowledgements
- Hydra for powerful configuration management.
- Click for creating beautiful CLIs.
- Flogging for structured logging.
- Terminal Text Effects for enhancing terminal help text output.
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file hydraclick-0.0.8.tar.gz.
File metadata
- Download URL: hydraclick-0.0.8.tar.gz
- Upload date:
- Size: 23.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a7bce76a0bca4940f8b4583a6462c0456e3809bf7643633bbf18236b4b62696a
|
|
| MD5 |
248bdf9ed09766668c0fff59b25ac474
|
|
| BLAKE2b-256 |
1a702d9fe446e229f601eacfb5425d3a0b8f126e57d8941e50971fbf8d0ddfce
|
File details
Details for the file hydraclick-0.0.8-py3-none-any.whl.
File metadata
- Download URL: hydraclick-0.0.8-py3-none-any.whl
- Upload date:
- Size: 15.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
af384b0d2a3d30a274db095d72ad1ba97be920dba4441762dd9d1e5f25e7ce67
|
|
| MD5 |
701e5089001c6739d825c4624868539c
|
|
| BLAKE2b-256 |
354abb8012067d372b474ea6d651b687aa7413a272745ccaab512e05d8c1852d
|