Add env_pro command modules
This commit is contained in:
75
app/env_pro/commands/template_cmds.py
Normal file
75
app/env_pro/commands/template_cmds.py
Normal file
@@ -0,0 +1,75 @@
|
||||
"""Template commands for env-pro."""
|
||||
|
||||
import click
|
||||
from typing import Dict
|
||||
|
||||
|
||||
@click.command()
|
||||
def list():
|
||||
"""List available templates."""
|
||||
from env_pro.core.template import TemplateManager
|
||||
|
||||
manager = TemplateManager()
|
||||
templates = manager.list_templates()
|
||||
|
||||
click.echo("Available templates:")
|
||||
for t in templates:
|
||||
marker = " (builtin)" if t["builtin"] else ""
|
||||
click.echo(f" {t['name']} - {t['description']}{marker}")
|
||||
|
||||
|
||||
@click.command()
|
||||
@click.argument("name")
|
||||
@click.option("--output", "-o", help="Output file path")
|
||||
@click.option("--var", multiple=True, help="Set template variables (KEY=VALUE)")
|
||||
def apply(name: str, output: str, var):
|
||||
"""Apply a template."""
|
||||
from env_pro.core.template import TemplateManager
|
||||
|
||||
variables = {}
|
||||
for v in var:
|
||||
if "=" in v:
|
||||
k, val = v.split("=", 1)
|
||||
variables[k.strip()] = val.strip()
|
||||
|
||||
manager = TemplateManager()
|
||||
content = manager.apply_template(name, variables)
|
||||
|
||||
if output:
|
||||
from pathlib import Path
|
||||
Path(output).write_text(content)
|
||||
click.echo(f"Written to {output}")
|
||||
else:
|
||||
click.echo(content)
|
||||
|
||||
|
||||
@click.command()
|
||||
@click.argument("name")
|
||||
@click.argument("description", required=False)
|
||||
@click.option("--var", multiple=True, help="Add variable (NAME:TYPE:DEFAULT:DESCRIPTION)")
|
||||
def create(name: str, description: str, var):
|
||||
"""Create a custom template."""
|
||||
from env_pro.core.template import TemplateManager
|
||||
from env_pro.utils.helpers import find_env_file
|
||||
|
||||
import os
|
||||
config_home = os.environ.get("ENV_PRO_HOME", "~/.config/env-pro")
|
||||
from pathlib import Path
|
||||
custom_dir = Path(config_home) / "templates"
|
||||
|
||||
manager = TemplateManager(custom_templates_dir=custom_dir)
|
||||
|
||||
variables = {}
|
||||
for v in var:
|
||||
parts = v.split(":")
|
||||
var_name = parts[0] if parts else ""
|
||||
var_default = parts[1] if len(parts) > 1 else ""
|
||||
var_desc = parts[2] if len(parts) > 2 else ""
|
||||
|
||||
variables[var_name] = {
|
||||
"default": var_default,
|
||||
"description": var_desc
|
||||
}
|
||||
|
||||
manager.create_custom_template(name, variables, description or "")
|
||||
click.echo(f"Created custom template '{name}' in {custom_dir}")
|
||||
Reference in New Issue
Block a user