@@ -43,6 +43,7 @@ def get_label_metrics(issue: github3.issues.Issue, labels: List[str]) -> dict:
43
43
"""
44
44
label_metrics : dict = {}
45
45
label_events = get_label_events (issue , labels )
46
+ label_last_event_type : dict = {}
46
47
47
48
for label in labels :
48
49
label_metrics [label ] = None
@@ -55,6 +56,12 @@ def get_label_metrics(issue: github3.issues.Issue, labels: List[str]) -> dict:
55
56
56
57
# Calculate the time to add or subtract to the time spent in label based on the label events
57
58
for event in label_events :
59
+ # Skip labeling events that have occured past issue close time
60
+ if issue .closed_at is not None and (
61
+ event .created_at >= datetime .fromisoformat (issue .closed_at )
62
+ ):
63
+ continue
64
+
58
65
if event .event == "labeled" :
59
66
labeled [event .label ["name" ]] = True
60
67
if event .label ["name" ] in labels :
@@ -63,6 +70,7 @@ def get_label_metrics(issue: github3.issues.Issue, labels: List[str]) -> dict:
63
70
label_metrics [
64
71
event .label ["name" ]
65
72
] -= event .created_at - datetime .fromisoformat (issue .created_at )
73
+ label_last_event_type [event .label ["name" ]] = "labeled"
66
74
elif event .event == "unlabeled" :
67
75
unlabeled [event .label ["name" ]] = True
68
76
if event .label ["name" ] in labels :
@@ -71,16 +79,20 @@ def get_label_metrics(issue: github3.issues.Issue, labels: List[str]) -> dict:
71
79
label_metrics [
72
80
event .label ["name" ]
73
81
] += event .created_at - datetime .fromisoformat (issue .created_at )
82
+ label_last_event_type [event .label ["name" ]] = "unlabeled"
74
83
75
84
for label in labels :
76
- # if the label is still on there, add the time from the last event to now
77
85
if label in labeled :
78
86
# if the issue is closed, add the time from the issue creation to the closed_at time
79
87
if issue .state == "closed" :
80
88
label_metrics [label ] += datetime .fromisoformat (
81
89
issue .closed_at
82
90
) - datetime .fromisoformat (issue .created_at )
83
91
else :
92
+ # skip label if last labeling event is 'unlabled' and issue is still open
93
+ if label_last_event_type [label ] == "unlabeled" :
94
+ continue
95
+
84
96
# if the issue is open, add the time from the issue creation to now
85
97
label_metrics [label ] += datetime .now (pytz .utc ) - datetime .fromisoformat (
86
98
issue .created_at
0 commit comments