Coverage for src/workstack/status/models/status_data.py: 100%

67 statements  

« prev     ^ index     » next       coverage.py v7.11.0, created at 2025-10-19 09:31 -0400

1"""Data models for status information.""" 

2 

3from dataclasses import dataclass 

4from pathlib import Path 

5 

6 

7@dataclass(frozen=True) 

8class WorktreeInfo: 

9 """Basic worktree information.""" 

10 

11 name: str 

12 path: Path 

13 branch: str | None 

14 is_root: bool 

15 

16 

17@dataclass(frozen=True) 

18class CommitInfo: 

19 """Information about a git commit.""" 

20 

21 sha: str 

22 message: str 

23 author: str 

24 date: str 

25 

26 

27@dataclass(frozen=True) 

28class GitStatus: 

29 """Git repository status information.""" 

30 

31 branch: str | None 

32 clean: bool 

33 ahead: int 

34 behind: int 

35 staged_files: list[str] 

36 modified_files: list[str] 

37 untracked_files: list[str] 

38 recent_commits: list[CommitInfo] 

39 

40 

41@dataclass(frozen=True) 

42class StackPosition: 

43 """Graphite stack position information.""" 

44 

45 stack: list[str] 

46 current_branch: str 

47 parent_branch: str | None 

48 children_branches: list[str] 

49 is_trunk: bool 

50 

51 

52@dataclass(frozen=True) 

53class PullRequestStatus: 

54 """Pull request status information.""" 

55 

56 number: int 

57 title: str | None # May not be available from all data sources 

58 state: str 

59 is_draft: bool 

60 url: str 

61 checks_passing: bool | None 

62 reviews: list[str] | None # May not be available from all data sources 

63 ready_to_merge: bool 

64 

65 

66@dataclass(frozen=True) 

67class EnvironmentStatus: 

68 """Environment variables status.""" 

69 

70 variables: dict[str, str] 

71 

72 

73@dataclass(frozen=True) 

74class DependencyStatus: 

75 """Dependency status for various language ecosystems.""" 

76 

77 language: str 

78 up_to_date: bool 

79 outdated_count: int 

80 details: str | None 

81 

82 

83@dataclass(frozen=True) 

84class PlanStatus: 

85 """Status of .PLAN.md file.""" 

86 

87 exists: bool 

88 path: Path | None 

89 summary: str | None 

90 line_count: int 

91 first_lines: list[str] 

92 

93 

94@dataclass(frozen=True) 

95class StatusData: 

96 """Container for all status information.""" 

97 

98 worktree_info: WorktreeInfo 

99 git_status: GitStatus | None 

100 stack_position: StackPosition | None 

101 pr_status: PullRequestStatus | None 

102 environment: EnvironmentStatus | None 

103 dependencies: DependencyStatus | None 

104 plan: PlanStatus | None 

105 related_worktrees: list[WorktreeInfo]