Skip to main content

CLI for Project Amrita

Project description

Amctl

CLI for Project Amrita — scaffold, manage, and maintain Python projects with the Amrita ecosystem.

Python License


Installation

# From PyPI
uv tool install amctl

# By uv
uv tool install amctl

# From GitHub
uv tool install git+https://github.com/AmritaBot/Amctl.git

Quick Start

# List available templates
amctl list

# Create a new project
amctl create -t amrita_core -n myapp
cd myapp
uv sync

Commands

amctl create

Scaffold a new project from a template.

amctl create -t amrita_core -n myapp
amctl create -t amrita_core -n myapp --description="My awesome project"
amctl create -t amrita_core -n myapp -V 0.8.0 -o /tmp

# Bypass Python version resolution
amctl create -t amrita_core -n myapp --frozen

# Force a specific version not in the known list
amctl create -t amrita_core -n myapp --force-version 3.0-beta
Option Description
-t, --type Template type (e.g. amrita_core)
-n, --name Project name
-V, --version Template version (default: latest)
-o, --output Output directory (default: .)
-f, --force Overwrite existing directory
--force-version Use any version string, bypassing validation
--frozen Skip Python version selection and .python-version

Template-specific fields (declared via __tmpl_fields__) are passed as dynamic CLI flags:

amctl create -t amrita_core -n myapp --description="Hello" --port=8080

After scaffolding, you are prompted to choose a license interactively:

[?] Choose a license for your project:
  [1] MIT
  [2] Apache-2.0
  [3] GPL-3.0
  [4] None (skip)
License [4]: _

A LICENSE file is written to the project root when a known license is selected.


amctl list

List all registered templates.

amctl list            # compact (first 5 versions shown)
amctl list -v         # verbose — full version lists

amctl info

Show detailed information about a template.

amctl info amrita_core

Output includes description, available versions (with source labels), declared fields (name/type/default/required/description), and the expected template file tree.


amctl fix

Check for missing template files and restore them.

amctl fix --check     # dry-run — report missing files only
amctl fix             # interactive [Y/N/M] confirmation
amctl fix --force     # restore all missing files without prompting
amctl fix --exclude '["README.md",".gitignore"]'   # skip specific files
Option Description
--check Dry-run — show what would be restored
--force, -f Skip confirmation, restore everything
--exclude JSON array or single path to exclude

amctl man

Run project scripts defined in pyproject.toml under [tools.amctl.scripts].

# pyproject.toml
[tools.amctl.scripts]
lint = "uv run ruff check ."
test = "uv run pytest -v"
start = "uv run uvicorn myapp.main:app --reload"
amctl man lint
amctl man test -- --cov
amctl man start

Extra arguments after -- are forwarded to the script.


amctl tmpl

Template-specific sub-commands. Each registered template is a sub-group.

amctl tmpl amrita_core     # show field summary (if no commands registered)

Templates can register custom commands via get_tmpl_commands().


amctl self

Manage amctl itself.

amctl self cache show       # display version cache contents
amctl self cache fresh      # refresh cache from PyPI
amctl self cache clean      # delete the cache file
amctl self tmpl-upd         # check for template package updates

Version Resolution

Amctl resolves available template versions through a cache-first fallback chain:

fresh cache (24h TTL) → PyPI → expired cache (warn) → hardcoded fallback

Cache location (in priority order):

  1. $AMCTL_TMPL_CACHEPATH — explicit path
  2. .venv/.amctl/versions_cache.json — inside a virtualenv project
  3. ~/.amctl/versions_cache.json — global

Environment variables:

Variable Description
AMCTL_TMPL_CACHEPATH Custom cache directory
AMCTL_TMPL_USECACHE=false Disable local cache (still uses PyPI)
AMCTL_TMPL_NOPYPI=true Block all PyPI requests (air-gapped)
AMCTL_LOG_LEVEL=debug Enable debug logging for network diagnostics

Each version carries a requires_python constraint obtained from PyPI. Amctl attempts to resolve a compatible Python interpreter using uv python list and writes a .python-version file to the project root.


Creating a Template

Templates are auto-discovered from src/amctl/templ/<name>/. Define a class with the required dunder attributes:

from amctl.templating import BaseTemplate, field

class MyTemplate(BaseTemplate):
    __template_name__ = "my_template"
    __template_description__ = "A custom project template"
    __core_package__ = "my-core-lib"         # PyPI package for version discovery
    __python_requires__ = ">=3.11"           # Python version constraint
    __versions__ = ("1.0",)                  # hardcoded fallback
    __tmpl_fields__ = {
        "description": field(default="desc"),
        "port": field(default=8000, type=int, required=True),
    }

    def on_create(self, project_dir, name, version=None, **fields):
        super().on_create(project_dir, name, version=version, **fields)

__template_export__ = MyTemplate

Template files go in the same directory and use the .tmpl extension for Jinja2 rendering. Directory names containing {{ }} markers are also rendered (e.g. src/{{ name }}/__init__.py.tmpl).


Development

uv sync
uv run ruff check src/     # lint
uv run pyright src/        # type-check
uv run amctl --help

License

MIT — see LICENSE.

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

amctl-0.1.0.tar.gz (66.3 kB view details)

Uploaded Source

Built Distribution

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

amctl-0.1.0-py3-none-any.whl (68.0 kB view details)

Uploaded Python 3

File details

Details for the file amctl-0.1.0.tar.gz.

File metadata

  • Download URL: amctl-0.1.0.tar.gz
  • Upload date:
  • Size: 66.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.20 {"installer":{"name":"uv","version":"0.11.20","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for amctl-0.1.0.tar.gz
Algorithm Hash digest
SHA256 df5e575ea1850b15b7ad8fb6b5a3171cb5d5ae564a47b96424b0ec346ddf290d
MD5 48bd901bc2b903b94a060ea668e84c21
BLAKE2b-256 f7de0943fe65ffb7be0528d169b3e144804c6127a998ad46823f6af0a737825c

See more details on using hashes here.

File details

Details for the file amctl-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: amctl-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 68.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.20 {"installer":{"name":"uv","version":"0.11.20","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for amctl-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 52b26053d7a288dcf0cc73619318cc715a3e1386f972147712b1f4bb22b79b51
MD5 b1dcc2077adab236a1635da346bf9675
BLAKE2b-256 3b41da5f350cfd13b4e4dc19350f67af018472258985823ed928f1d48fe297b1

See more details on using hashes here.

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