def filter_bugs()

in bugbot/rules/regression_without_regressed_by.py [0:0]


    def filter_bugs(self, bugs):
        all_deps = set()
        deps_to_max_allowed_date = {}

        for bugid, info in bugs.items():
            bugid = int(bugid)
            # we just keep bugs from dependencies created before bugid
            # since the others cannot be a regresser !
            info["deps"] = deps = set(x for x in info["deps"] if x < bugid)
            if deps:
                all_deps |= deps
                for dep in deps:
                    deps_to_max_allowed_date[dep] = info["creation"]

        def bug_handler(bug, data):
            if "meta" in bug["keywords"] or not bug["cf_last_resolved"]:
                data.add(bug["id"])

        def history_handler(bug, data):
            bugid = bug["id"]
            treated.add(bugid)
            resolved_before = False
            for h in bug["history"]:
                if resolved_before:
                    break
                for change in h["changes"]:
                    if change["field_name"] == "cf_last_resolved" and change["added"]:
                        date = dateutil.parser.parse(change["added"])
                        if date < deps_to_max_allowed_date[bugid]:
                            resolved_before = True
                            break
            if not resolved_before:
                data.add(bugid)

        invalids = set()
        treated = set()
        Bugzilla(
            bugids=list(all_deps),
            include_fields=["id", "keywords", "cf_last_resolved"],
            bughandler=bug_handler,
            bugdata=invalids,
            historyhandler=history_handler,
            historydata=invalids,
        ).get_data().wait()

        # Some bugs aren't accessible so they won't appear in treated (all_deps - treated)
        # Since we don't have any info about them, then we consider them as invalid
        invalids |= all_deps - treated

        for bugid, info in bugs.items():
            info["deps"] -= invalids

        bugs = {bugid: info for bugid, info in bugs.items() if info["deps"]}

        return bugs