Skip to content

Commit 93b95f0

Browse files
authored
Merge pull request #21 from siisurit/5-check-assignees
#5 Check assignees
2 parents 8095d2d + a426b0c commit 93b95f0

File tree

4 files changed

+46
-25
lines changed

4 files changed

+46
-25
lines changed

check_done/checks.py

Lines changed: 31 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,31 +2,41 @@
22
from check_done.done_project_items_info.info import ProjectItemInfo
33

44

5-
def check_done_issues_for_warnings() -> list[str | None]:
5+
def check_done_project_items_for_warnings() -> list[str | None]:
66
result = []
7-
done_issues = done_project_items_info()
8-
criteria_checks = [
9-
_check_done_issues_are_closed,
10-
]
11-
for issue in done_issues:
12-
warnings = [check(issue) for check in criteria_checks if check(issue)]
13-
result.extend(warnings)
7+
done_project_items = done_project_items_info()
8+
for project_item in done_project_items:
9+
warning_reasons = [
10+
warning_reason for check, warning_reason in CONDITION_CHECK_AND_WARNING_REASON_LIST if check(project_item)
11+
]
12+
if len(warning_reasons) >= 1:
13+
warning = _project_item_warning_string(project_item, warning_reasons)
14+
result.append(warning)
1415
return result
1516

1617

17-
def _check_done_issues_are_closed(issue: ProjectItemInfo) -> str | None:
18-
result = None
19-
if not issue.closed:
20-
result = _issue_warning_string(
21-
issue,
22-
"closed",
23-
)
24-
return result
25-
26-
27-
def _issue_warning_string(issue: ProjectItemInfo, reason_for_warning: str) -> str:
28-
# TODO: Ponder better wording.
18+
def _project_item_warning_string(issue: ProjectItemInfo, reasons_for_warning: list[str]) -> str:
19+
if len(reasons_for_warning) >= 3:
20+
reasons_for_warning = f"{', '.join(reasons_for_warning[:-1])}, and {reasons_for_warning[-1]}"
21+
elif len(reasons_for_warning) == 2:
22+
reasons_for_warning = f"{', '.join(reasons_for_warning[:1])} and is {reasons_for_warning[1]}"
23+
else:
24+
reasons_for_warning = reasons_for_warning[0]
2925
return (
30-
f" Done project item should be {reason_for_warning}."
26+
f" Done project item is {reasons_for_warning}."
3127
f" - repository: '{issue.repository.name}', project item: '#{issue.number} {issue.title}'."
3228
)
29+
30+
31+
def _is_not_closed(project_item: ProjectItemInfo) -> bool:
32+
return not project_item.closed
33+
34+
35+
def _is_not_assigned(project_item: ProjectItemInfo) -> bool:
36+
return project_item.assignees.total_count < 1
37+
38+
39+
CONDITION_CHECK_AND_WARNING_REASON_LIST = [
40+
(_is_not_closed, "not closed"),
41+
(_is_not_assigned, "missing assignee"),
42+
]

check_done/command.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
import logging
22
import sys
33

4-
from check_done.checks import check_done_issues_for_warnings
4+
from check_done.checks import check_done_project_items_for_warnings
55

66
logger = logging.getLogger(__name__)
77

88

99
def check_done_command():
1010
result = 1
1111
try:
12-
warnings = check_done_issues_for_warnings()
12+
warnings = check_done_project_items_for_warnings()
1313
if len(warnings) == 0:
1414
logger.info("No warnings found.")
1515
result = 0

check_done/done_project_items_info/info.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,11 +76,16 @@ class RepositoryInfo(BaseModel):
7676
name: str
7777

7878

79+
class AssigneesInfo(BaseModel):
80+
total_count: NonNegativeInt = Field(alias="totalCount")
81+
82+
7983
class ProjectItemInfo(BaseModel):
80-
number: NonNegativeInt
84+
assignees: AssigneesInfo
8185
closed: bool
82-
title: str
86+
number: NonNegativeInt
8387
repository: RepositoryInfo
88+
title: str
8489

8590

8691
class ProjectV2ItemNodeInfo(BaseModel):

check_done/done_project_items_info/queries/project_v2_items.graphql

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ query projectV2Issues(
1616
type
1717
content {
1818
... on Issue {
19+
assignees {
20+
totalCount
21+
}
1922
number
2023
closed
2124
title
@@ -24,6 +27,9 @@ query projectV2Issues(
2427
}
2528
}
2629
... on PullRequest {
30+
assignees {
31+
totalCount
32+
}
2733
number
2834
closed
2935
title

0 commit comments

Comments
 (0)