• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

mozilla / relman-auto-nag / #4349

pending completion
#4349

push

coveralls-python

sosa-e
Revert "Minimizing config file"

This reverts commit 614159597.

564 of 3081 branches covered (18.31%)

24 of 24 new or added lines in 24 files covered. (100.0%)

1804 of 7980 relevant lines covered (22.61%)

0.23 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/auto_nag/scripts/ni_from_manager.py
1
# This Source Code Form is subject to the terms of the Mozilla Public
2
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
3
# You can obtain one at http://mozilla.org/MPL/2.0/.
4

5
from auto_nag import logger, utils
×
6
from auto_nag.bzcleaner import BzCleaner
×
7
from auto_nag.nag_me import Nag
×
8

9

10
class NiFromManager(BzCleaner, Nag):
×
11
    def __init__(self):
×
12
        super(NiFromManager, self).__init__()
×
13
        self.nweeks = utils.get_config(self.name(), "number_of_weeks", 1)
×
14
        self.vip = self.get_people().get_rm_or_directors()
×
15
        self.white_list = utils.get_config(self.name(), "white-list", [])
×
16
        self.black_list = utils.get_config(self.name(), "black-list", [])
×
17
        if not self.init_versions():
×
18
            return
×
19

20
        self.status_flags = (
×
21
            utils.get_flag(self.versions["central"], "status", "central"),
22
            utils.get_flag(self.versions["beta"], "status", "beta"),
23
            utils.get_flag(self.versions["release"], "status", "release"),
24
            utils.get_flag(self.versions["esr_previous"], "status", "esr"),
25
            utils.get_flag(self.versions["esr"], "status", "esr"),
26
        )
27

28
    def description(self):
×
29
        return "Bugs with a ni on a bug marked as affecting a released version without activity for the last {} {}".format(
×
30
            self.nweeks, utils.plural("week", self.nweeks)
31
        )
32

33
    def get_extra_for_template(self):
×
34
        return {"nweeks": self.nweeks}
×
35

36
    def get_extra_for_nag_template(self):
×
37
        return self.get_extra_for_template()
×
38

39
    def has_last_comment_time(self):
×
40
        return True
×
41

42
    def has_needinfo(self):
×
43
        return True
×
44

45
    def columns(self):
×
46
        return ["id", "summary", "needinfos", "last_comment"]
×
47

48
    def columns_nag(self):
×
49
        return ["id", "summary", "to", "from", "last_comment"]
×
50

51
    def get_priority(self, bug):
×
52
        return "normal"
×
53

54
    def set_people_to_nag(self, bug, buginfo):
×
55
        priority = self.get_priority(bug)
×
56
        if not self.filter_bug(priority):
×
57
            return None
×
58

59
        for flag in self.status_flags:
×
60
            if flag not in bug:
×
61
                logger.warning(f"Bug {bug['id']} doesn't have flag {flag}")
×
62
                return None
×
63

64
        any_affected = any(bug[flag] == "affected" for flag in self.status_flags)
×
65

66
        has_manager = False
×
67
        accepted = False
×
68
        for flag in bug["flags"]:
×
69
            if (
×
70
                flag.get("name", "") == "needinfo"
71
                and flag["status"] == "?"
72
                and (flag["setter"] in self.vip or any_affected)
73
            ):
74
                requestee = flag["requestee"]
×
75
                if self.is_under(requestee):
×
76
                    accepted = True
×
77
                    buginfo["to"] = requestee
×
78
                    moz_name = self.get_people().get_moz_name(flag["setter"])
×
79
                    buginfo["from"] = (
×
80
                        moz_name if moz_name is not None else flag["setter"]
81
                    )
82
                    if self.add(requestee, buginfo, priority=priority):
×
83
                        has_manager = True
×
84

85
        if accepted and not has_manager:
×
86
            self.add_no_manager(buginfo["id"])
×
87

88
        return bug if accepted else None
×
89

90
    def get_bz_params(self, date):
×
91
        fields = ["flags", "_custom"]
×
92
        params = {
×
93
            "include_fields": fields,
94
            "resolution": "---",
95
            "f1": "days_elapsed",
96
            "o1": "greaterthan",
97
            "v1": self.nweeks * 7,
98
            "f2": "flagtypes.name",
99
            "o2": "casesubstring",
100
            "v2": "needinfo?",
101
            # Either needinfo from a release manager...
102
            "f3": "OP",
103
            "j3": "OR",
104
            "f4": "setters.login_name",
105
            "o4": "anyexact",
106
            "v4": ",".join(self.vip),
107
            # ...or needinfo from anyone on a bug still tracked by a release manager.
108
            "f5": "cf_status_firefox_release",
109
            "o5": "equals",
110
            "v5": "affected",
111
            "f6": "cf_status_firefox_beta",
112
            "o6": "equals",
113
            "v6": "affected",
114
            "f7": "cf_status_firefox_nightly",
115
            "o7": "equals",
116
            "v7": "affected",
117
            "f8": "cf_status_firefox_esr",
118
            "o8": "equals",
119
            "v8": "affected",
120
            "f9": "CP",
121
        }
122

123
        return params
×
124

125

126
if __name__ == "__main__":
×
127
    NiFromManager().run()
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc