Coverage for src/lexigram/web/cli/generators/middleware.py: 67%

12 statements  

« prev     ^ index     » next       coverage.py v7.15.4, created at 2026-08-25 04:37 +0800

1"""Middleware generator for the web package.""" 

2 

3from __future__ import annotations 

4 

5from typing import Any 

6 

7from lexigram.codegen import GenerationResult, GeneratorBase 

8 

9 

10class MiddlewareGenerator(GeneratorBase): 

11 """Generate a middleware class.""" 

12 

13 template_name = "middleware.py.jinja2" 

14 

15 def __init__(self, output_dir: str = "src/middleware") -> None: 

16 super().__init__(output_dir=output_dir) 

17 

18 def generate( 

19 self, 

20 name: str, 

21 *, 

22 doc: str | None = None, 

23 options: dict[str, Any] | None = None, 

24 dry_run: bool = False, 

25 force: bool = False, 

26 **kwargs: object, 

27 ) -> GenerationResult: 

28 file_path = self.output_dir / f"{self._to_snake_case(name)}_middleware.py" 

29 content = self.render_template( 

30 self.template_name, 

31 { 

32 "name": name, 

33 "class_name": f"{self._to_pascal_case(name)}Middleware", 

34 "doc": doc, 

35 "options": options, 

36 }, 

37 ) 

38 return self.write_file(file_path, content, dry_run=dry_run, force=force) 

39 

40 

41__all__ = ["MiddlewareGenerator"]