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

1"""Web CLI contributor definitions.""" 

2 

3from __future__ import annotations 

4 

5from lexigram.contracts.cli.contributions import DoctorCheckContribution 

6from lexigram.contracts.cli.types import GeneratorDefinition 

7 

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) 

64 

65 

66class WebCliContributor: 

67 """CLI contributor for the lexigram-web package.""" 

68 

69 @property 

70 def contributor_id(self) -> str: 

71 """Return the contributor identifier.""" 

72 return "web" 

73 

74 def get_generators(self) -> list[GeneratorDefinition]: 

75 """Return generator definitions for web.""" 

76 return list(_GENERATOR_DEFINITIONS) 

77 

78 def get_commands(self) -> list: 

79 """Return no command contributions — web does not add command groups.""" 

80 return [] 

81 

82 def get_health_checks(self) -> list: 

83 """Return no health check contributions.""" 

84 return [] 

85 

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 ] 

97 

98 def get_shell_context(self) -> list: 

99 """Return no shell context contributions.""" 

100 return [] 

101 

102 def get_hooks(self) -> list: 

103 """Return no hook contributions.""" 

104 return [] 

105 

106 

107__all__ = ["WebCliContributor"]