Coverage for src/lexigram/web/cli/contributor.py: 71%
21 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"""Web CLI contributor definitions."""
3from __future__ import annotations
5from lexigram.contracts.cli.contributions import DoctorCheckContribution
6from lexigram.contracts.cli.types import GeneratorDefinition
8_GENERATOR_DEFINITIONS: tuple[GeneratorDefinition, ...] = (
9 GeneratorDefinition(
10 name="controller",
11 title="Generate Controller",
12 description="Generate a web controller with route handlers",
13 contributor="web",
14 generator_path="lexigram.web.cli.generators.controller:ControllerGenerator",
15 default_output_dir="src/controllers",
16 category="web",
17 ),
18 GeneratorDefinition(
19 name="resource",
20 title="Generate Resource",
21 description="Generate a RESTful resource with CRUD endpoints",
22 contributor="web",
23 generator_path="lexigram.web.cli.generators.resource:ResourceGenerator",
24 default_output_dir="src",
25 category="web",
26 ),
27 GeneratorDefinition(
28 name="middleware",
29 title="Generate Middleware",
30 description="Generate a web middleware component",
31 contributor="web",
32 generator_path="lexigram.web.cli.generators.middleware:MiddlewareGenerator",
33 default_output_dir="src/middleware",
34 category="web",
35 ),
36 GeneratorDefinition(
37 name="graphql",
38 title="Generate GraphQL",
39 description="Generate a GraphQL schema and resolvers",
40 contributor="web",
41 generator_path="lexigram.web.cli.generators.graphql:GraphQLGenerator",
42 default_output_dir="src/graphql",
43 category="web",
44 ),
45 GeneratorDefinition(
46 name="webhook",
47 title="Generate Webhook",
48 description="Generate a webhook handler",
49 contributor="web",
50 generator_path="lexigram.web.cli.generators.webhook:WebhookGenerator",
51 default_output_dir="src/webhooks",
52 category="web",
53 ),
54 GeneratorDefinition(
55 name="websocket",
56 title="Generate WebSocket",
57 description="Generate a WebSocket handler",
58 contributor="web",
59 generator_path="lexigram.web.cli.generators.websocket:WebSocketHandlerGenerator",
60 default_output_dir="src/websocket",
61 category="web",
62 ),
63)
66class WebCliContributor:
67 """CLI contributor for the lexigram-web package."""
69 @property
70 def contributor_id(self) -> str:
71 """Return the contributor identifier."""
72 return "web"
74 def get_generators(self) -> list[GeneratorDefinition]:
75 """Return generator definitions for web."""
76 return list(_GENERATOR_DEFINITIONS)
78 def get_commands(self) -> list:
79 """Return no command contributions — web does not add command groups."""
80 return []
82 def get_health_checks(self) -> list:
83 """Return no health check contributions."""
84 return []
86 def get_doctor_checks(self) -> list[DoctorCheckContribution]:
87 """Return doctor checks for web route validation."""
88 return [
89 DoctorCheckContribution(
90 name="web_routes_valid",
91 description="Validate registered routes have valid controllers",
92 check_path="lexigram.web.cli.checks:check_routes_valid",
93 contributor="web",
94 category="web",
95 ),
96 ]
98 def get_shell_context(self) -> list:
99 """Return no shell context contributions."""
100 return []
102 def get_hooks(self) -> list:
103 """Return no hook contributions."""
104 return []
107__all__ = ["WebCliContributor"]