Coverage for src/lexigram/ai/admin/contributor.py: 0%

21 statements  

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

1from __future__ import annotations 

2 

3from collections.abc import Sequence 

4from typing import TYPE_CHECKING 

5 

6from lexigram.contracts.admin.contributor import BaseAdminContributor 

7from lexigram.contracts.admin.types import ( 

8 ManagementPageDefinition, 

9 NavigationContribution, 

10 PageCategory, 

11) 

12 

13if TYPE_CHECKING: 

14 from lexigram.contracts.core.di import ContainerResolverProtocol 

15 

16_NAV_ITEMS: tuple[NavigationContribution, ...] = ( 

17 NavigationContribution( 

18 label="AI Pipeline", 

19 url="/admin/ai/pipeline", 

20 icon="activity", 

21 group="ai", 

22 order=55, 

23 ), 

24) 

25 

26 

27class AIPipelineAdminContributor(BaseAdminContributor): 

28 """Admin contributor for the AI pipeline overview.""" 

29 

30 name = "ai-pipeline" 

31 display_name = "AI Pipeline" 

32 group = "ai" 

33 icon = "activity" 

34 priority = 55 

35 

36 def __init__(self) -> None: 

37 self._container: ContainerResolverProtocol | None = None 

38 

39 async def on_admin_boot(self, container: ContainerResolverProtocol) -> None: 

40 self._container = container 

41 

42 def get_navigation_items(self) -> Sequence[NavigationContribution]: 

43 return list(_NAV_ITEMS) 

44 

45 def get_management_pages(self) -> Sequence[ManagementPageDefinition]: 

46 return [ 

47 ManagementPageDefinition( 

48 name="ai_pipeline_overview", 

49 title="AI Pipeline", 

50 contributor="ai-pipeline", 

51 route_path="/ai/pipeline", 

52 handler="lexigram.ai.admin.pages.overview:AIPipelineOverviewPage", 

53 category=PageCategory.AI, 

54 icon="activity", 

55 description="AI pipeline overview, subsystem status, and configuration", 

56 order=10, 

57 ), 

58 ] 

59 

60 

61__all__ = ["AIPipelineAdminContributor"]