Add env_pro command modules
This commit is contained in:
110
app/env_pro/commands/profile_cmds.py
Normal file
110
app/env_pro/commands/profile_cmds.py
Normal file
@@ -0,0 +1,110 @@
|
||||
"""Profile management commands for env-pro."""
|
||||
|
||||
import click
|
||||
from typing import Optional
|
||||
|
||||
|
||||
@click.command()
|
||||
@click.argument("name")
|
||||
def create(name: str):
|
||||
"""Create a new profile."""
|
||||
from env_pro.core.profile import create_profile, set_active_profile
|
||||
|
||||
create_profile(name)
|
||||
set_active_profile(name)
|
||||
click.echo(f"Created and activated profile '{name}'")
|
||||
|
||||
|
||||
@click.command()
|
||||
def list():
|
||||
"""List all profiles."""
|
||||
from env_pro.core.profile import list_profiles, get_active_profile
|
||||
|
||||
profiles = list_profiles()
|
||||
active = get_active_profile()
|
||||
|
||||
if not profiles:
|
||||
click.echo("No profiles found. Run 'env-pro init' first.")
|
||||
return
|
||||
|
||||
click.echo("Profiles:")
|
||||
for profile in profiles:
|
||||
marker = " *" if profile == active else ""
|
||||
click.echo(f" {profile}{marker}")
|
||||
|
||||
|
||||
@click.command()
|
||||
@click.argument("name")
|
||||
def switch(name: str):
|
||||
"""Switch to a profile (persistent)."""
|
||||
from env_pro.core.profile import set_active_profile, list_profiles
|
||||
|
||||
profiles = list_profiles()
|
||||
if name not in profiles:
|
||||
raise click.ClickException(f"Profile '{name}' not found. Available: {', '.join(profiles)}")
|
||||
|
||||
set_active_profile(name)
|
||||
click.echo(f"Switched to profile '{name}'")
|
||||
|
||||
|
||||
@click.command()
|
||||
@click.argument("name")
|
||||
def use(name: str):
|
||||
"""Use a profile for current session."""
|
||||
from env_pro.core.profile import list_profiles
|
||||
|
||||
profiles = list_profiles()
|
||||
if name not in profiles:
|
||||
raise click.ClickException(f"Profile '{name}' not found. Available: {', '.join(profiles)}")
|
||||
|
||||
click.echo(f"Profile '{name}' will be used. Set ENV_PRO_PROFILE env var to persist.")
|
||||
|
||||
|
||||
@click.command()
|
||||
@click.argument("name")
|
||||
def delete(name: str):
|
||||
"""Delete a profile."""
|
||||
from env_pro.core.profile import delete_profile, list_profiles
|
||||
|
||||
profiles = list_profiles()
|
||||
if name not in profiles:
|
||||
raise click.ClickException(f"Profile '{name}' not found")
|
||||
|
||||
if name == "default":
|
||||
raise click.ClickException("Cannot delete 'default' profile")
|
||||
|
||||
delete_profile(name)
|
||||
click.echo(f"Deleted profile '{name}'")
|
||||
|
||||
|
||||
@click.command()
|
||||
@click.argument("other", required=False)
|
||||
def diff(other: Optional[str]):
|
||||
"""Compare current profile with another."""
|
||||
from env_pro.core.profile import (
|
||||
get_active_profile, get_profile_vars, list_profiles
|
||||
)
|
||||
|
||||
current = get_active_profile() or "default"
|
||||
other = other or click.prompt("Compare with profile")
|
||||
|
||||
profiles = list_profiles()
|
||||
if other not in profiles:
|
||||
raise click.ClickException(f"Profile '{other}' not found")
|
||||
|
||||
current_vars = get_profile_vars(current)
|
||||
other_vars = get_profile_vars(other)
|
||||
|
||||
all_keys = set(current_vars.keys()) | set(other_vars.keys())
|
||||
|
||||
click.echo(f"Diff: {current} vs {other}")
|
||||
click.echo("-" * 40)
|
||||
|
||||
for key in sorted(all_keys):
|
||||
current_val = current_vars.get(key, "<not set>")
|
||||
other_val = other_vars.get(key, "<not set>")
|
||||
|
||||
if current_val != other_val:
|
||||
click.echo(f" {key}:")
|
||||
click.echo(f" {current}: {current_val[:50]}{'...' if len(current_val) > 50 else ''}")
|
||||
click.echo(f" {other}: {other_val[:50]}{'...' if len(other_val) > 50 else ''}")
|
||||
Reference in New Issue
Block a user