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.1.tar.gz (71.6 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.1-py3-none-any.whl (78.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: amctl-0.1.1.tar.gz
  • Upload date:
  • Size: 71.6 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.1.tar.gz
Algorithm Hash digest
SHA256 f4bdd4a760aab6d48ba659ab41d0ec132b610f1539d8d186304b943fb8ae5698
MD5 5e1f9ecd03039b8938acc318e30b1ba8
BLAKE2b-256 4ddc3835833b0279311ca81937a5a87731272fc20ee5e1cf8def19c24fa96b04

See more details on using hashes here.

File details

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

File metadata

  • Download URL: amctl-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 78.1 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 2af94220da789470b93e28c417b4ee6504b372b9b61c7d4d419717441a211c53
MD5 9aeb2ec01a9b66a1854fed8e7ad9ffa5
BLAKE2b-256 14c39f3e828e6fd7657d1551c13a9b051a51885d4ba9743e47adf8f8eb0c11ff

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