Coverage for src/lexigram/web/cli/generators/resource.py: 60%
25 statements
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-25 04:37 +0800
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-25 04:37 +0800
1"""Resource generator for the web package."""
3from __future__ import annotations
5from pathlib import Path
6from typing import Any
8from lexigram.codegen import (
9 GenerationResult,
10 ModelGenerator,
11 ServiceGenerator,
12)
13from lexigram.web.cli.generators.controller import ControllerGenerator
16class ResourceGenerator:
17 """Generate a model, service, and web controller slice."""
19 name = "resource"
20 description = "Generate resource"
21 default_output_dir = "src"
22 model_generator_class = ModelGenerator
23 service_generator_class = ServiceGenerator
24 controller_generator_class = ControllerGenerator
26 def __init__(
27 self,
28 output_dir: str = "src",
29 model_generator_class: type[Any] | None = None,
30 service_generator_class: type[Any] | None = None,
31 ) -> None:
32 self.output_dir = Path(output_dir)
33 if model_generator_class is not None:
34 self.model_generator_class = model_generator_class
35 if service_generator_class is not None:
36 self.service_generator_class = service_generator_class
38 def generate(
39 self,
40 name: str,
41 *,
42 dry_run: bool = False,
43 force: bool = False,
44 **kwargs: object,
45 ) -> GenerationResult:
46 fields_str = str(kwargs.get("fields_str", ""))
47 model_result = self.model_generator_class(
48 output_dir=self.output_dir / "models",
49 ).generate(
50 name,
51 fields_str=fields_str,
52 dry_run=dry_run,
53 force=force,
54 )
55 service_result = self.service_generator_class(
56 output_dir=self.output_dir / "services",
57 ).generate(
58 name,
59 dry_run=dry_run,
60 force=force,
61 )
62 controller_result = self.controller_generator_class(
63 output_dir=self.output_dir / "controllers",
64 ).generate(
65 name,
66 dry_run=dry_run,
67 force=force,
68 )
69 return GenerationResult(
70 files_created=(
71 model_result.files_created
72 + service_result.files_created
73 + controller_result.files_created
74 ),
75 files_skipped=(
76 model_result.files_skipped
77 + service_result.files_skipped
78 + controller_result.files_skipped
79 ),
80 files_overwritten=(
81 model_result.files_overwritten
82 + service_result.files_overwritten
83 + controller_result.files_overwritten
84 ),
85 )
88__all__ = ["ResourceGenerator"]