Source code for django_angular3.build
from __future__ import annotations
import json
from dataclasses import asdict, dataclass
from pathlib import Path
from .config import ProjectConfig
[docs]
@dataclass(frozen=True)
class BuildTask:
name: str
input: str
output: str
[docs]
@dataclass(frozen=True)
class BuildPlan:
project_name: str
config_path: str
tasks: list[BuildTask]
[docs]
def to_dict(self) -> dict[str, object]:
return {
"projectName": self.project_name,
"configPath": self.config_path,
"tasks": [asdict(task) for task in self.tasks],
}
[docs]
def create_build_plan(config: ProjectConfig) -> BuildPlan:
tasks = [
BuildTask(
name="validate-openapi",
input=str(config.openapi_source),
output="validated OpenAPI document",
),
BuildTask(
name="generate-openapi-clients",
input=str(config.openapi_generator_config or config.openapi_source),
output=str(config.angular_output / "generated"),
),
BuildTask(
name="validate-ui",
input=str(config.ui_source),
output="validated UI definition document",
),
BuildTask(
name="assemble-angular-application",
input=str(config.ui_source),
output=str(config.angular_output),
),
]
return BuildPlan(
project_name=config.project_name,
config_path=str(config.config_path),
tasks=tasks,
)
[docs]
def write_build_plan(plan: BuildPlan, output_dir: str | Path) -> Path:
output_path = Path(output_dir)
output_path.mkdir(parents=True, exist_ok=True)
plan_path = output_path / "plan.json"
plan_path.write_text(json.dumps(plan.to_dict(), indent=2), encoding="utf-8")
return plan_path