Skip to content

Commit 931bd69

Browse files
Fabien LUCAShlavanant
authored andcommitted
[Implement #78] Add support for triage status log
1 parent 4d7009f commit 931bd69

9 files changed

Lines changed: 117 additions & 13 deletions

File tree

stubs/yeswehack/api.pyi

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,8 @@ class Log:
131131
program: Optional[Dict[str, Any]]
132132
old_ask_for_fix_verification_status: Optional[str]
133133
new_ask_for_fix_verification_status: Optional[str]
134+
old_triage_status: Optional[str]
135+
new_triage_status: Optional[str]
134136

135137

136138
class Report:

ywh2bt/core/api/formatter/formatter.py

Lines changed: 41 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
REPORT_ASK_FOR_FIX_VERIFICATION_STATUS_TRANSLATIONS,
1515
REPORT_PROPERTY_LABELS,
1616
REPORT_STATUS_TRANSLATIONS,
17+
REPORT_TRIAGE_STATUS_TRANSLATIONS,
1718
AskForFixverificationStatusLog,
1819
CloseLog,
1920
CommentLog,
@@ -26,6 +27,7 @@
2627
RewardLog,
2728
StatusUpdateLog,
2829
TransferLog,
30+
TriageStatusLog,
2931
)
3032

3133

@@ -57,9 +59,10 @@ class ReportMessageFormatter(ABC):
5759
_details_update_log_template: Template
5860
_details_update_log_line_template: Template
5961
_priority_update_log_template: Template
62+
_reward_log_template: Template
6063
_transfer_log_template: Template
6164
_ask_for_fix_verification_status_log_template: Template
62-
_reward_log_template: Template
65+
_triage_status_log_template: Template
6366
_value_transformer: _ValueTransformer
6467

6568
def __init__(
@@ -78,6 +81,7 @@ def __init__(
7881
reward_log_template: Template,
7982
transfer_log_template: Template,
8083
ask_for_fix_verification_status_log_template: Template,
84+
triage_status_log_template: Template,
8185
value_transformer: Optional[_ValueTransformer] = None,
8286
):
8387
"""
@@ -115,6 +119,7 @@ def __init__(
115119
self._value_transformer = value_transformer or _identity_transformer
116120
self._transfer_log_template = transfer_log_template
117121
self._ask_for_fix_verification_status_log_template = ask_for_fix_verification_status_log_template
122+
self._triage_status_log_template = triage_status_log_template
118123

119124
def _transform_value(
120125
self,
@@ -362,18 +367,6 @@ def _transform_close_log(
362367
),
363368
)
364369

365-
def _translate_status(
366-
self,
367-
status: str,
368-
) -> str:
369-
return REPORT_STATUS_TRANSLATIONS.get(status, "")
370-
371-
def _translate_ask_for_fix_verification_status(
372-
self,
373-
status: str,
374-
) -> str:
375-
return REPORT_ASK_FOR_FIX_VERIFICATION_STATUS_TRANSLATIONS.get(status.lower(), "")
376-
377370
@_transform_log.register
378371
def _transform_details_update_log(
379372
self,
@@ -418,3 +411,38 @@ def _format_reward_log(
418411
html=log.message_html,
419412
),
420413
)
414+
415+
@_transform_log.register
416+
def _transform_triage_status_log(
417+
self,
418+
log: TriageStatusLog,
419+
) -> str:
420+
return self._triage_status_log_template.substitute(
421+
new_triage_status=self._translate_triage_status(
422+
status=log.new_triage_status or "",
423+
),
424+
old_triage_status=self._translate_triage_status(
425+
status=log.old_triage_status or "",
426+
),
427+
comment=self.transform_html(
428+
html=log.message_html,
429+
),
430+
)
431+
432+
def _translate_status(
433+
self,
434+
status: str,
435+
) -> str:
436+
return REPORT_STATUS_TRANSLATIONS.get(status, "")
437+
438+
def _translate_ask_for_fix_verification_status(
439+
self,
440+
status: str,
441+
) -> str:
442+
return REPORT_ASK_FOR_FIX_VERIFICATION_STATUS_TRANSLATIONS.get(status.lower(), "")
443+
444+
def _translate_triage_status(
445+
self,
446+
status: str,
447+
) -> str:
448+
return REPORT_TRIAGE_STATUS_TRANSLATIONS.get(status.lower(), "")

ywh2bt/core/api/formatter/markdown.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,15 @@
4242
COMMENT_LOG_TEMPLATE = """
4343
**Comment**:
4444
45+
${comment}
46+
"""
47+
TRIAGE_STATUS_LOG_TEMPLATE = """
48+
**Triage status updated**:
49+
50+
${old_triage_status} -> ${new_triage_status}
51+
52+
**Comment**:
53+
4554
${comment}
4655
"""
4756
CVSS_UPDATE_LOG_TEMPLATE = """
@@ -131,6 +140,7 @@ def __init__(self) -> None:
131140
reward_log_template=Template(REWARD_LOG_TEMPLATE),
132141
transfer_log_template=Template(TRANSFER_LOG_TEMPLATE),
133142
ask_for_fix_verification_status_log_template=Template(ASK_FOR_FIX_VERIFICATION_STATUS_LOG_TEMPLATE),
143+
triage_status_log_template=Template(TRIAGE_STATUS_LOG_TEMPLATE),
134144
value_transformer=_html_transformer,
135145
)
136146

ywh2bt/core/api/mapping.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
TrackerUpdateLog,
3939
TrackingStatusLog,
4040
TransferLog,
41+
TriageStatusLog,
4142
)
4243
from ywh2bt.core.html import (
4344
cleanup_attachments_and_urls_from_html,
@@ -332,6 +333,22 @@ def map_raw_log(
332333
old_status=raw_log.old_status,
333334
new_status=raw_log.status,
334335
)
336+
if (
337+
(raw_log.type == "comment" or raw_log.type == "assign")
338+
and raw_log.old_triage_status
339+
and raw_log.new_triage_status
340+
):
341+
return TriageStatusLog(
342+
created_at=created_at,
343+
log_id=log_id,
344+
log_type=log_type,
345+
private=private,
346+
author=author,
347+
message_html=message_html,
348+
attachments=attachments,
349+
old_triage_status=raw_log.old_triage_status,
350+
new_triage_status=raw_log.new_triage_status,
351+
)
335352
if raw_log.type == "comment" or (raw_log.type == "assign" and message_html):
336353
return CommentLog(
337354
created_at=created_at,

ywh2bt/core/api/models/report.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,15 @@
5858
"cancelled": "Fix verification cancelled",
5959
}
6060
)
61+
REPORT_TRIAGE_STATUS_TRANSLATIONS = MappingProxyType(
62+
{
63+
"not_available": "Not available",
64+
"in_progress": "In progress",
65+
"awaiting_info": "Awaiting info",
66+
"assessed": "Assessed",
67+
"done": "Done",
68+
}
69+
)
6170

6271

6372
@dataclass
@@ -359,6 +368,14 @@ class AskForFixverificationStatusLog(Log):
359368
old_ask_for_fix_verification_status: Optional[str]
360369

361370

371+
@dataclass
372+
class TriageStatusLog(Log):
373+
"""A triage status log."""
374+
375+
old_triage_status: str
376+
new_triage_status: str
377+
378+
362379
class _LogFilterProtocol(Protocol):
363380
def __call__(
364381
self,

ywh2bt/core/api/trackers/jira/formatter.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,15 @@
4949
COMMENT_LOG_TEMPLATE = """
5050
*Comment*:
5151
52+
${comment}
53+
"""
54+
TRIAGE_STATUS_LOG_TEMPLATE = """
55+
**Triage status updated**:
56+
57+
${old_triage_status} -> ${new_triage_status}
58+
59+
**Comment**:
60+
5261
${comment}
5362
"""
5463
CVSS_UPDATE_LOG_TEMPLATE = """
@@ -170,6 +179,7 @@ def __init__(self) -> None:
170179
reward_log_template=Template(REWARD_LOG_TEMPLATE),
171180
transfer_log_template=Template(TRANSFER_LOG_TEMPLATE),
172181
ask_for_fix_verification_status_log_template=Template(ASK_FOR_FIX_VERIFICATION_STATUS_LOG_TEMPLATE),
182+
triage_status_log_template=Template(TRIAGE_STATUS_LOG_TEMPLATE),
173183
)
174184

175185
def transform_report_description_html(

ywh2bt/core/api/trackers/servicenow/formatter.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,15 @@
4141
"""
4242
COMMENT_LOG_TEMPLATE = """
4343
Comment:
44+
${comment}
45+
"""
46+
TRIAGE_STATUS_LOG_TEMPLATE = """
47+
**Triage status updated**:
48+
49+
${old_triage_status} -> ${new_triage_status}
50+
51+
**Comment**:
52+
4453
${comment}
4554
"""
4655
CVSS_UPDATE_LOG_TEMPLATE = """
@@ -116,6 +125,7 @@ def __init__(self) -> None:
116125
reward_log_template=Template(REWARD_LOG_TEMPLATE),
117126
transfer_log_template=Template(TRANSFER_LOG_TEMPLATE),
118127
ask_for_fix_verification_status_log_template=Template(ASK_FOR_FIX_VERIFICATION_STATUS_LOG_TEMPLATE),
128+
triage_status_log_template=Template(TRIAGE_STATUS_LOG_TEMPLATE),
119129
)
120130

121131
def transform_report_description_html(

ywh2bt/core/configuration/yeswehack.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,12 @@ class SynchronizeOptions(AttributesContainer):
9696
description="Upload the report transfer updates into the bug tracker",
9797
default=False,
9898
)
99+
upload_triage_status_updates: BoolAttributeType = Attribute.create(
100+
value_type=bool,
101+
short_description="Upload triage status updates",
102+
description="Upload the report triage status updates into the bug tracker",
103+
default=False,
104+
)
99105
recreate_missing_issues: BoolAttributeType = Attribute.create(
100106
value_type=bool,
101107
short_description="Recreate missing issues",
@@ -117,6 +123,7 @@ def __init__(
117123
upload_rewards: Optional[bool] = None,
118124
upload_status_updates: Optional[bool] = None,
119125
upload_transfer_updates: Optional[bool] = None,
126+
upload_triage_status_updates: Optional[bool] = None,
120127
recreate_missing_issues: Optional[bool] = None,
121128
**kwargs: Any,
122129
):
@@ -146,6 +153,7 @@ def __init__(
146153
self.upload_rewards = upload_rewards
147154
self.upload_status_updates = upload_status_updates
148155
self.upload_transfer_updates = upload_transfer_updates
156+
self.upload_triage_status_updates = upload_triage_status_updates
149157
self.recreate_missing_issues = recreate_missing_issues
150158

151159

ywh2bt/core/synchronizer/synchronizer.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
TrackerUpdateLog,
3434
TrackingStatusLog,
3535
TransferLog,
36+
TriageStatusLog,
3637
)
3738
from ywh2bt.core.api.tracker import (
3839
SendLogsResult,
@@ -576,6 +577,7 @@ def _is_synchronizable_log(
576577
and synchronize_options.upload_status_updates
577578
),
578579
isinstance(log, TransferLog) and synchronize_options.upload_transfer_updates,
580+
isinstance(log, TriageStatusLog) and synchronize_options.upload_triage_status_updates,
579581
)
580582
)
581583

0 commit comments

Comments
 (0)