Skip to main content

Python package to simplify development

Project description

calcipy

./calcipy-banner-wide.svg

calcipy is a Python package that implements best practices such as code style (linting, auto-fixes), documentation, CI/CD, and logging. Like the calcium carbonate in hard coral, packages can be built on the calcipy foundation.

calcipy has some configurability, but is tailored for my particular use cases. If you want the same sort of functionality, there are a number of alternatives to consider:

Installation

Calcipy needs a few static files managed using copier and a template project: kyleking/calcipy_template

You can quickly use the template to create a new project or add calcipy to an existing one:

# Install copier. pipx is recommended
pipx install copier

# To create a new project
copier copy gh:KyleKing/calcipy_template new_project
cd new_project

# Or convert/update an existing one
cd my_project
copier copy gh:KyleKing/calcipy_template .
copier update

Calcipy CLI

Additionally, calcipy can be run as a CLI application without adding the package as a dependency.

Quick Start:

# For the CLI, only install a few of the extras which can be used from a few different CLI commands
pipx install 'calcipy[lint,tags]'

# Use 'tags' to create a CODE_TAG_SUMMARY of the specified directory
calcipy-tags tags --help
calcipy-tags tags --base-dir=~/path/to/my_project

# You can list all provided CLI commands with
pipx list
venvs are in ~/.local/pipx/venvs
apps are exposed on your $PATH at ~/.local/bin
   package calcipy 1.4.0, installed using Python 3.11.4
    - calcipy
    - calcipy-lint
    - calcipy-pack
    - calcipy-tags
    - calcipy-types

Note: the CLI output below is compressed for readability, but you can try running each of these commands locally to see the most up-to-date documentation and the full set of options. The "Usage", "Core options", and "Global Task Options" are the same for each subsequent command, so they are excluded for brevity.

> calcipy-lint
Usage: calcipy-lint [--core-opts] <subcommand> [--subcommand-opts] ...

Core options:

  --complete                         Print tab-completion candidates for given parse remainder.
  --hide=STRING                      Set default value of run()'s 'hide' kwarg.
  --print-completion-script=STRING   Print the tab-completion script for your preferred shell (bash|zsh|fish).
  --prompt-for-sudo-password         Prompt user at start of session for the sudo.password config value.
  --write-pyc                        Enable creation of .pyc files.
  -d, --debug                        Enable debug output.
  -D INT, --list-depth=INT           When listing tasks, only show the first INT levels.
  -e, --echo                         Echo executed commands before running.
  -f STRING, --config=STRING         Runtime configuration file to use.
  -F STRING, --list-format=STRING    Change the display format used when listing tasks. Should be one of: flat (default), nested, json.
  -h [STRING], --help[=STRING]       Show core or per-task help and exit.
  -l [STRING], --list[=STRING]       List available tasks, optionally limited to a namespace.
  -p, --pty                          Use a pty when executing shell commands.
  -R, --dry                          Echo commands instead of running.
  -T INT, --command-timeout=INT      Specify a global command execution timeout, in seconds.
  -V, --version                      Show version and exit.
  -w, --warn-only                    Warn, instead of failing, when shell commands fail.

Subcommands:

  lint.check (lint)   Run ruff as check-only.
  lint.fix            Run ruff and apply fixes.
  lint.pre-commit     Run pre-commit.
  lint.watch          Run ruff as check-only.

Global Task Options:

  *file_args             List of Paths available globally to all tasks. Will resolve paths with working_dir
  --keep-going           Continue running tasks even on failure
  --working_dir=STRING   Set the cwd for the program. Example: "../run --working-dir .. lint test"
  -v,-vv,-vvv            Globally configure logger verbosity (-vvv for most verbose)

> calcipy-pack

Subcommands:

  pack.bump-tag                  Experiment with bumping the git tag using `griffe` (experimental).
  pack.check-licenses            Check licenses for compatibility with `licensecheck`.
  pack.install-extras            Run poetry install with all extras.
  pack.lock                      Ensure poetry.lock is  up-to-date.
  pack.publish                   Build the distributed format(s) and publish.
  pack.sync-pyproject-versions   Experiment with setting the pyproject.toml dependencies to the version from poetry.lock (experimental).

> calcipy-tags

Subcommands:

  tags.collect-code-tags (tags)   Create a `CODE_TAG_SUMMARY.md` with a table for TODO- and FIXME-style code comments.

> calcipy-types

Subcommands:

  types.mypy      Run mypy.
  types.pyright   Run pyright using the config in `pyproject.toml`.

Calcipy Pre-Commit

calcipy can also be used as a pre-commit task by adding the below snippet to your pre-commit file:

repos:
  - repo: https://github.com/KyleKing/calcipy
    rev: main
    hooks:
      - id: tags
      - id: lint-fix
      - id: types

Project Status

See the Open Issues and/or the CODE_TAG_SUMMARY. For release history, see the CHANGELOG.

Contributing

We welcome pull requests! For your pull request to be accepted smoothly, we suggest that you first open a GitHub issue to discuss your idea. For resources on getting started with the code base, see the below documentation:

Code of Conduct

We follow the Contributor Covenant Code of Conduct.

Open Source Status

We try to reasonably meet most aspects of the "OpenSSF scorecard" from Open Source Insights

Responsible Disclosure

If you have any security issue to report, please contact the project maintainers privately. You can reach us at dev.act.kyle@gmail.com.

License

LICENSE

Project details


Release history Release notifications | RSS feed

This version

4.1.0

Download files

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

Source Distribution

calcipy-4.1.0.tar.gz (36.4 kB view details)

Uploaded Source

Built Distribution

calcipy-4.1.0-py3-none-any.whl (46.4 kB view details)

Uploaded Python 3

File details

Details for the file calcipy-4.1.0.tar.gz.

File metadata

  • Download URL: calcipy-4.1.0.tar.gz
  • Upload date:
  • Size: 36.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.12.7 Darwin/24.0.0

File hashes

Hashes for calcipy-4.1.0.tar.gz
Algorithm Hash digest
SHA256 1f606fb6c28fc3823709c67e18f6ccebdfa440ab9fea45526348c94786103189
MD5 60dbd78ec4a1b52f13e377980c59ad36
BLAKE2b-256 66945578b458bac47d48bbe945070d885dc430204287833b5ed9a7f1a93c24be

See more details on using hashes here.

File details

Details for the file calcipy-4.1.0-py3-none-any.whl.

File metadata

  • Download URL: calcipy-4.1.0-py3-none-any.whl
  • Upload date:
  • Size: 46.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.12.7 Darwin/24.0.0

File hashes

Hashes for calcipy-4.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f98615fb21a3cfa742a331d1a83e99be1c67c7ef85d366f3e3269b086d9db7b2
MD5 8e3bba8a1a9977d77923792953c435aa
BLAKE2b-256 9f569f57d23eb7333879b319ce2f351d7631a7a6892346a61576106bcefa5940

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