bugbot/rules/workflow/p1_no_activity.py (63 lines of code) (raw):
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
# You can obtain one at http://mozilla.org/MPL/2.0/.
from bugbot import utils
from bugbot.bzcleaner import BzCleaner
from bugbot.escalation import Escalation, NoActivityDays
from bugbot.nag_me import Nag
class P1NoActivity(BzCleaner, Nag):
def __init__(self):
super(P1NoActivity, self).__init__()
self.escalation = Escalation(
self.people,
data=utils.get_config(self.name(), "escalation"),
skiplist=utils.get_config("workflow", "supervisor_skiplist", []),
)
def description(self):
return "P1 bugs and no activity for {} days".format(self.ndays)
def nag_template(self):
return self.template()
def get_extra_for_template(self):
return {"ndays": self.ndays}
def get_extra_for_nag_template(self):
return self.get_extra_for_template()
def ignore_meta(self):
return True
def has_last_comment_time(self):
return True
def has_assignee(self):
return True
def has_product_component(self):
return True
def columns(self):
return ["product", "component", "id", "summary", "last_comment", "assignee"]
def set_people_to_nag(self, bug, buginfo):
priority = "high"
if not self.filter_bug(priority):
return None
# check if the product::component is in the list
if not utils.check_product_component(self.components, bug):
return None
owner = bug["triage_owner"]
assignee = bug["assigned_to"]
if not self.add(assignee, buginfo, priority=priority, triage_owner=owner):
self.add_no_manager(buginfo["id"])
return bug
def get_bz_params(self, date):
self.ndays = NoActivityDays(self.name()).get(
(utils.get_next_release_date() - self.nag_date).days
)
fields = ["triage_owner", "assigned_to"]
self.components = utils.get_config("workflow", "components")
params = {
"component": utils.get_components(self.components),
"bug_type": "defect",
"include_fields": fields,
"resolution": "---",
"f1": "priority",
"o1": "equals",
"v1": "P1",
"f2": "days_elapsed",
"o2": "greaterthaneq",
"v2": self.ndays,
}
utils.get_empty_assignees(params)
return params
if __name__ == "__main__":
P1NoActivity().run()