diff --git a/app/env_pro/commands/template_cmds.py b/app/env_pro/commands/template_cmds.py new file mode 100644 index 0000000..05bcae3 --- /dev/null +++ b/app/env_pro/commands/template_cmds.py @@ -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}")