Skip to main content

Helpers to bild a CLI program

Project description

cli-base-utilities

tests codecov cli-base-utilities @ PyPi Python Versions License GPL-3.0-or-later

Helpers to build a CLI program and some useful tools for CLI programs.

pip install cli-base-utilities

Features

Some of the features are:

TODO: Document all features here ;)

start development

~$ git clone https://github.com/jedie/cli-base-utilities.git
~$ cd cli-base-utilities
~/cli-base-utilities$ ./dev-cli.py --help

dev CLI

usage: ./dev-cli.py [-h]
                    {check-code-style,coverage,fix-code-style,install,mypy,pip-audit,publish,test,
tox,update,update-test-snapshot-files,version}



╭─ options ──────────────────────────────────────────────────────────────────────────────────────╮
│ -h, --help        show this help message and exit                                              │
╰────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ subcommands ──────────────────────────────────────────────────────────────────────────────────╮
│ {check-code-style,coverage,fix-code-style,install,mypy,pip-audit,publish,test,tox,update,upda… │
│     check-code-style                                                                           │
│                   Check code style by calling darker + flake8                                  │
│     coverage      Run tests and show coverage report.                                          │
│     fix-code-style                                                                             │
│                   Fix code style of all cli_base source code files via darker                  │
│     install       Run pip-sync and install 'cli_base' via pip as editable.                     │
│     mypy          Run Mypy (configured in pyproject.toml)                                      │
│     pip-audit     Run pip-audit check against current requirements files                       │
│     publish       Build and upload this project to PyPi                                        │
│     test          Run unittests                                                                │
│     tox           Run tox                                                                      │
│     update        Update "requirements*.txt" dependencies files                                │
│     update-test-snapshot-files                                                                 │
│                   Update all test snapshot files (by remove and recreate all snapshot files)   │
│     version       Print version and exit                                                       │
╰────────────────────────────────────────────────────────────────────────────────────────────────╯

app CLI

usage: ./cli.py [-h] {update-readme-history,version}



╭─ options ──────────────────────────────────────────────────────────────────────────────────────╮
│ -h, --help        show this help message and exit                                              │
╰────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ subcommands ──────────────────────────────────────────────────────────────────────────────────╮
│ {update-readme-history,version}                                                                │
│     update-readme-history                                                                      │
│                   Update project history base on git commits/tags in README.md Will be exited  │
│                   with 1 if the README.md was updated otherwise with 0.                        │
│                                                                                                │
│                   Also, callable via e.g.:                                                     │
│                       python -m cli_base update-readme-history -v                              │
│     version       Print version and exit                                                       │
╰────────────────────────────────────────────────────────────────────────────────────────────────╯

DEMO app CLI

usage: ./cli.py [-h]
                {demo-endless-loop,demo-verbose-check-output-error,edit-settings,print-settings,sy
stemd-debug,systemd-remove,systemd-setup,systemd-status,systemd-stop,version}



╭─ options ──────────────────────────────────────────────────────────────────────────────────────╮
│ -h, --help                                                                                     │
│     show this help message and exit                                                            │
╰────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ subcommands ──────────────────────────────────────────────────────────────────────────────────╮
│ {demo-endless-loop,demo-verbose-check-output-error,edit-settings,print-settings,systemd-debug… │
│     demo-endless-loop                                                                          │
│     Just a useless example command, used in systemd DEMO: It just print some information in a  │
│     endless loop.                                                                              │
│     demo-verbose-check-output-error                                                            │
│     DEMO for a error calling cli_base.cli_tools.subprocess_utils.verbose_check_output()        │
│     edit-settings                                                                              │
│     Edit the settings file. On first call: Create the default one.                             │
│     print-settings                                                                             │
│     Display (anonymized) MQTT server username and password                                     │
│     systemd-debug                                                                              │
│     Print Systemd service template + context + rendered file content.                          │
│     systemd-remove                                                                             │
│     Write Systemd service file, enable it and (re-)start the service. (May need sudo)          │
│     systemd-setup                                                                              │
│     Write Systemd service file, enable it and (re-)start the service. (May need sudo)          │
│     systemd-status                                                                             │
│     Display status of systemd service. (May need sudo)                                         │
│     systemd-stop                                                                               │
│     Stops the systemd service. (May need sudo)                                                 │
│     version                                                                                    │
│     Print version and exit                                                                     │
╰────────────────────────────────────────────────────────────────────────────────────────────────╯

Generate project history base on git commits/tags

Add a test case similar to cli_base/tests/test_readme_history.py into your project. Add the needed start/end comments into your README.

To make a new release, do this:

  • Increase your project version number
  • Run tests to update the README
  • commit the changes
  • Create release

It's recommended to use git hookd (via pre-commit) to update the README. For this, add in your pyproject.toml:

[tool.cli_base]
version_module_name = "<your_package>" # Must provide the `__version__` attribute

Copy&paste .pre-commit-config.yaml into your project.

Add pre-commit to your requirements and install the git hooks by:

.venv/bin/pre-commit install
.venv/bin/pre-commit autoupdate

Update pre-commit hooks

Update version in .pre-commit-config.yaml and make a release.

The Problem: The hooks are broken, if the "new" version is not tagged yet. To create a release, it's possible to use all git commands (commit, push, etc) with --no-verify to skip the hooks.

It's easier to temporarily uninstall the hooks, create the release and install the hooks again, e.g.:

.../cli-base-utilities$ .venv/bin/pre-commit uninstall
# ...bump version, commit, push, merge... create release...
.../cli-base-utilities$ .venv/bin/pre-commit install

history

  • v0.13.1
    • 2024-09-26 - Bugfix missing click. Add it for Backward compatibility
  • v0.13.0
    • 2024-09-26 - Add Helper for tyro and replace click with tyro in own CLIs
  • v0.12.0
    • 2024-09-25 - Add debug log to update_readme_history call
    • 2024-09-25 - Simplify AssertCliHelpInReadme to a flat function
    • 2024-09-25 - Apply manage projects updates
    • 2024-09-25 - Update requirements
  • v0.11.0
    • 2024-08-30 - Apply manageprojects updates, e.g.: Set min. Python to 3.11+
    • 2024-08-30 - NEW: EncloseRuleContext
Expand older history entries ...
  • v0.10.3
    • 2024-08-05 - Bugfix unchanable boolean flags in toml settings
  • v0.10.2
    • 2024-08-04 - Auto activate pre commit hooks
    • 2024-08-04 - Update demo CLI: Always update pip and pip-tools
    • 2024-08-04 - Handle KeyboardInterrupt in cli scripts.
    • 2024-08-04 - Bugfix #50 toml2dataclass(): AttributeError: 'bool' object has no attribute 'unwrap'.
    • 2024-08-02 - Fix doc link in README.md
  • v0.10.1
    • 2024-08-02 - Increase default timout from 5 to 15 minutes
    • 2024-08-02 - Update pre-commit hook version to cli-base-utilities v0.10.0
  • v0.10.0
    • 2024-08-02 - Use dateutil in get_commit_date()
    • 2024-08-02 - Replace "safety" by "pip-audit" and add tooling for it.
    • 2024-08-01 - Update manageprojects updates
  • v0.9.0
    • 2024-07-16 - Update project
  • v0.8.0
    • 2024-03-12 - Bugfix publish
    • 2024-03-12 - fix tests
    • 2024-03-12 - Split app/dev CLI into a package with autodiscovery
    • 2024-03-12 - Move click defaults
    • 2024-03-12 - Apply cookiecutter template updates
    • 2024-03-12 - Update requirements
    • 2024-01-16 - Use typeguard in tests
    • 2024-01-16 - manageprojects updates
    • 2024-01-16 - Update requirements + datetimes ;)
    • 2023-12-17 - Bugfix .pre-commit-config.yaml
  • v0.7.0
    • 2023-12-16 - Add "Update pre-commit hooks" to README
    • 2023-12-16 - Bugfix update_readme_history(): Use __version__ from module
    • 2023-12-16 - NEW: "update-readme-history" git hook using "pre-commit"
    • 2023-12-16 - fix tests
    • 2023-12-16 - Bugfix type hints
    • 2023-12-16 - Add update-readme-history to app CLI
    • 2023-12-16 - Move DEMO into ./cli_base/demo/
    • 2023-12-16 - Simplify App CLI
    • 2023-12-16 - Remove PACKAGE_ROOT from app CLI
    • 2023-12-16 - Update requirements
    • 2023-12-16 - Skip test_readme_history() on CI
  • v0.6.0
    • 2023-12-02 - NEW: Code style tools
  • v0.5.0
    • 2023-12-01 - fix flake8
    • 2023-12-01 - NEW: test utils: AssertLogs() context manager
    • 2023-12-01 - Bugfix expand_user() if SUDO_USER is the same as current user
    • 2023-12-01 - Add "run_coverage()" to "dev_tools" and polish tox, unittest, too.
    • 2023-12-01 - add tests for EraseCoverageData()
    • 2023-12-01 - Apply manageprojects updates
  • v0.4.5
    • 2023-11-30 - Configure unittests via "load_tests Protocol" hook
    • 2023-11-30 - Update requirements and add "flake8-bugbear"
    • 2023-11-30 - Remove function calls in function agruments
  • v0.4.4
    • 2023-11-01 - Bugfix "AssertionError: Expected only one line" in Git.first_commit_info()
  • v0.4.3
    • 2023-11-01 - Git history renderer: Collapse older entries
  • v0.4.2
    • 2023-11-01 - Remove duplicate git commits and keep only test last one, e.g.: "update requirements"
    • 2023-11-01 - Bugfix git history: Add commits before the first tag
  • v0.4.1
    • 2023-10-08 - Remove commit URLs from history and handle release a new version
    • 2023-10-08 - NEW: Generate a project history base on git commits/tags.
    • 2023-10-08 - Update requirements
    • 2023-09-26 - Update README.md
  • v0.4.0
    • 2023-09-24 - fix tests
    • 2023-09-24 - Add UpdateTestSnapshotFiles() Context Manager
    • 2023-09-24 - coverage: Refactor setup and add helpers
    • 2023-09-24 - Update requirements
  • v0.3.0
    • 2023-08-17 - Bugfix tests run in terminal
    • 2023-08-17 - update requirements
    • 2023-08-17 - NEW: cli_base.cli_tools.git and cli_base.cli_tools.version_info
  • v0.2.0
    • 2023-08-09 - Project setup updates
    • 2023-05-22 - Update README.md
    • 2023-05-22 - Rename project "cli-base" to "cli-base-utilities"
    • 2023-05-22 - Add github CI config
    • 2023-05-22 - Add subprocess_utils from manageprojects
    • 2023-05-21 - init

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

cli_base_utilities-0.13.1.tar.gz (101.5 kB view details)

Uploaded Source

Built Distribution

cli_base_utilities-0.13.1-py3-none-any.whl (82.4 kB view details)

Uploaded Python 3

File details

Details for the file cli_base_utilities-0.13.1.tar.gz.

File metadata

  • Download URL: cli_base_utilities-0.13.1.tar.gz
  • Upload date:
  • Size: 101.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.3

File hashes

Hashes for cli_base_utilities-0.13.1.tar.gz
Algorithm Hash digest
SHA256 a0142b46ced685fda8e7393c90d2cb1a709ea7ae37469249e3f519bd8c7844e2
MD5 54693f674881a0335075ad7b4a497282
BLAKE2b-256 c1776b8ee5ca3a0e7ea726d41664cf6fb881a8d481d15e633563b3711f67335c

See more details on using hashes here.

Provenance

File details

Details for the file cli_base_utilities-0.13.1-py3-none-any.whl.

File metadata

File hashes

Hashes for cli_base_utilities-0.13.1-py3-none-any.whl
Algorithm Hash digest
SHA256 abb265fee788af0e347395bd9c863370df04ddc6b8aff97e77841c994f5daee6
MD5 03b27c0b33200c63c0b065ff5a0c441a
BLAKE2b-256 fe1bbe59924db1af6d7c2ca9d36d0f2586ac7acfc9f81d18f57f742832e34481

See more details on using hashes here.

Provenance

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