Source code for minos.cli.api.set

from pathlib import (
    Path,
)

import typer
import yaml

from ..consoles import (
    console,
)
from ..pathlib import (
    get_project_target_directory,
)
from ..templating import (
    TemplateFetcher,
    TemplateProcessor,
)

app = typer.Typer(add_completion=False)


[docs]@app.command("database") def database(backend: str = typer.Argument(...)) -> None: """Set database configuration""" set_service("database", backend)
[docs]@app.command("discovery") def discovery(backend: str = typer.Argument(...)) -> None: """Set discovery configuration""" set_service("discovery", backend)
[docs]@app.command("broker") def broker(backend: str = typer.Argument(...)) -> None: """Set broker configuration""" set_service("broker", backend)
[docs]@app.command("api-gateway") def api_gateway(backend: str = typer.Argument(...)) -> None: """Set api-gateway configuration""" set_service("apigateway", backend)
[docs]def set_service(service: str, backend: str) -> None: """Set configuration""" try: project_path = get_project_target_directory(Path.cwd()) except ValueError: console.print("No Minos project found. Consider 'minos new project'") raise typer.Exit(code=1) config_path = project_path / ".minos-project.yaml" with config_path.open() as file: data = yaml.safe_load(file) if "services" in data and not data["services"]: data["services"] = dict() if "services" in data and service in data["services"]: console.print(f"{service} already set") raise typer.Exit(code=1) console.print(f":wrench: Setting {service} config\n") fetcher = TemplateFetcher.from_name(f"project-{service}-{backend}-init") processor = TemplateProcessor.from_fetcher( fetcher, project_path, defaults={"project_name": project_path.name}, context={service: backend} ) processor.render() with config_path.open("w") as file: data["services"][service] = backend yaml.dump(data, file, sort_keys=False)
[docs]@app.callback() def callback(): """Sets project services such as database or broker"""