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