def bp_report(self, all=False): report = [] if all: blueprints = self.project.all_specifications else: blueprints = self.project.valid_specifications printn("Processing blueprints (%d):" % len(blueprints)) for (counter, bp) in enumerate(blueprints, 1): if counter > self.trunc and self.trunc > 0: break if counter % 200 == 10: print() if counter % 10 == 0: printn("%4d" % counter) assignee = 'unassigned' assignee_name = 'unassigned' try: assignee = get_name(bp.assignee) assignee_name = bp.assignee.display_name except Exception: pass if bp.milestone: milestone = get_name(bp.milestone) else: milestone = 'None' team = 'unknown' for t in self.teams.keys(): if assignee in self.teams[t]: team = t triage = self.checks.run(bp, self.bps_series[get_name(bp)]) sh_status = short_status(bp) w_items = work_items(bp) if sh_status in ['done', 'rejected'] and w_items != '': sh_status = 'unfinished' report.append({ 'type': 'bp', 'link': bp.web_link.encode('utf-8'), 'id': bp.web_link[ bp.web_link.rfind('/') + 1: ].encode('utf-8'), 'title': bp.title.encode('utf-8'), 'date_created': str(bp.date_created), 'date_updated': '', 'milestone': milestone, 'series': self.bps_series[get_name(bp)], 'status': bp.implementation_status, 'short_status': sh_status, 'priority': bp.priority, 'team': team.encode('utf-8'), 'assignee': assignee.encode('utf-8'), 'name': assignee_name.encode('utf-8'), 'work_items': w_items.encode('utf-8'), 'tags': '', 'triage': ', '.join(triage).encode('utf-8') }) print() return report
def is_milestone_in_series(self, obj, series): if (is_bp(obj) and obj.definition_status in rejected_bp_def_statuses): return if obj.milestone is None: return "No milestone for series (%s)" % series if series is None: return # There is another check for missed series if (get_name(obj.milestone) in self.mapping['milestones'] and self.mapping['milestones'][get_name(obj.milestone)] != series): return ("Wrong milestone (%s) for series (%s)" % (get_name(obj.milestone), series))
def bp_report(self, all=False): report = [] if all: blueprints = self.project.all_specifications else: blueprints = self.project.valid_specifications printn("Processing blueprints (%d):" % len(blueprints)) for (counter, bp) in enumerate(blueprints, 1): if counter > self.trunc and self.trunc > 0: break if counter % 200 == 10: print() if counter % 10 == 0: printn("%4d" % counter) assignee = 'unassigned' assignee_name = 'unassigned' try: assignee = get_name(bp.assignee) assignee_name = bp.assignee.display_name except Exception: pass if bp.milestone: milestone = get_name(bp.milestone) else: milestone = 'None' team = 'unknown' for t in self.teams.keys(): if assignee in self.teams[t]: team = t triage = self.checks.run(bp, self.bps_series[get_name(bp)]) report.append({ 'type': 'bp', 'link': bp.web_link.encode('utf-8'), 'id': bp.web_link[ bp.web_link.rfind('/') + 1: ].encode('utf-8'), 'title': bp.title.encode('utf-8'), 'milestone': milestone, 'series': self.bps_series[get_name(bp)], 'status': bp.implementation_status, 'short_status': short_status(bp), 'priority': bp.priority, 'team': team.encode('utf-8'), 'assignee': assignee.encode('utf-8'), 'name': assignee_name.encode('utf-8'), 'triage': ', '.join(triage).encode('utf-8') }) print() return report
def iter_series(self, project): print("Collecting series data for %s:" % project) self.bps_series = {} milestones_series = {} for series in project.series: printn(" %s" % get_name(series)) # Blueprints #for (counter, bp) in enumerate(series.all_specifications): #self.bps_series[get_name(bp)] = get_name(series) # Milestones for milestone in series.all_milestones: milestones_series[get_name(milestone)] = get_name(series) printn(" none") # Search for blueprints without series #for (counter, bp) in enumerate(self.project.all_specifications): #self.bps_series.setdefault(get_name(bp), None) print() return { 'milestones': milestones_series, }
def is_milestone_active(self, obj, series): if (is_bp(obj) and obj.definition_status in rejected_bp_def_statuses): return if obj.milestone is None: return if obj.milestone.is_active: return if ((is_bug(obj) and obj.status not in closed_bug_statuses) or (is_bp(obj) and obj.implementation_status not in closed_bp_statuses)): return ( "Open and targeted to closed milestone (%s) on series (%s)" % (get_name(obj.milestone), series))
def iter_series(self): print("Collecting series data:") self.bps_series = {} self.milestones_series = {} for series in self.project.series: printn(" %s" % get_name(series)) # Blueprints for (counter, bp) in enumerate(series.all_specifications): self.bps_series[get_name(bp)] = get_name(series) # Milestones for milestone in series.all_milestones: self.milestones_series[get_name(milestone)] = get_name(series) printn(" none") # Search for blueprints without series for (counter, bp) in enumerate(self.project.all_specifications): self.bps_series.setdefault(get_name(bp), None) print() return { 'milestones': self.milestones_series, }
def bug_report(self, project, all=False): report = [] milestone51 = project.getMilestone(name="6.0") # 5.1 milestone502 = project.getMilestone(name="5.0.3") # 5.0.2 if all: bugs = project.searchTasks(status=all_bug_statuses) else: if self.config.get('hcf'): bugs51 = project.searchTasks(status=( open_bug_statuses_for_HCF), milestone=milestone51, importance=["Critical", "High"], # We would ideally filter our system-tests tag, # however I saw bugs which were just found during # sytem-tests run which are being real bugs in Fuel tags=["-docs", "-devops", "-fuel-devops", "-experimental"], tags_combinator="All") bugs502 = project.searchTasks(status=( open_bug_statuses_for_HCF), milestone=milestone502, importance=["Critical", "High"], tags=["-docs", "-devops", "-fuel-devops", "-experimental"], tags_combinator="All") else: bugs51 = project.searchTasks(status=( untriaged_bug_statuses + open_bug_statuses), milestone=milestone51) bugs502 = project.searchTasks(status=( untriaged_bug_statuses + open_bug_statuses), milestone=milestone502) #printn("Processing bugs (%d):" % (len(bugs51) + len(bugs502))) for bugs in (bugs51, bugs502): for (counter, bug) in enumerate(bugs, 1): if counter > self.trunc and self.trunc > 0: break if counter % 200 == 10: print() if counter % 10 == 0: printn("%4d" % counter) assignee = 'unassigned' assignee_name = 'unassigned' try: assignee = get_name(bug.assignee) # We want to exclude all from QA & # fuel-devops & docs for HCF calcs if self.config.get('excludes') and assignee in self.config['excludes']: continue assignee_name = bug.assignee.display_name except Exception: pass if bug.milestone: milestone = get_name(bug.milestone) else: milestone = 'None' team = 'unknown' self.bug_issues.setdefault(bug.bug.web_link, []) for t in self.teams.keys(): if assignee in self.teams[t]: team = t title = bug.bug.title triage = [] for task in bug.bug.bug_tasks: series = task.target if is_series(series): series = get_name(series) if task.target.project != project: continue else: series = None if task.target != project: continue triage += self.checks.run(task, series) report.append({ 'type': 'bug', 'link': bug.web_link.encode('utf-8'), 'id': bug.web_link[ bug.web_link.rfind('/') + 1: ].encode('utf-8'), 'title': title.encode('utf-8'), 'milestone': milestone, 'status': bug.status, 'short_status': short_status(bug), 'priority': bug.importance, 'team': team.encode('utf-8'), 'assignee': assignee.encode('utf-8'), 'name': assignee_name.encode('utf-8'), 'triage': ', '.join(triage).encode('utf-8'), }) print() return report
def is_bug_targeted_to_focus_series(self, obj, series): if (is_bug(obj) and is_series(obj.target) and get_name(obj.target.project.development_focus) == series): return ("Targeted to the current development focus (%s)" % series)
def bug_report(self, all=False): report = [] if all: bugs = self.project.searchTasks(status=all_bug_statuses) else: bugs = self.project.searchTasks(status=( untriaged_bug_statuses + open_bug_statuses)) printn("Processing bugs (%d):" % len(bugs)) for (counter, bug) in enumerate(bugs, 1): if counter > self.trunc and self.trunc > 0: break if counter % 200 == 10: print() if counter % 10 == 0: printn("%4d" % counter) assignee = 'unassigned' assignee_name = 'unassigned' try: assignee = get_name(bug.assignee) assignee_name = bug.assignee.display_name except Exception: pass if bug.milestone: milestone = get_name(bug.milestone) else: milestone = 'None' team = 'unknown' self.bug_issues.setdefault(bug.bug.web_link, []) for t in self.teams.keys(): if assignee in self.teams[t]: team = t title = bug.bug.title triage = [] for task in bug.bug.bug_tasks: series = task.target if is_series(series): series = get_name(series) if task.target.project != self.project: continue else: series = None if task.target != self.project: continue triage += self.checks.run(task, series) sh_status = short_status(bug) w_items = work_items(bug) if sh_status in ['done', 'rejected'] and w_items != '': sh_status = 'unfinished' report.append({ 'type': 'bug', 'link': bug.web_link.encode('utf-8'), 'id': bug.web_link[ bug.web_link.rfind('/') + 1: ].encode('utf-8'), 'title': title.encode('utf-8'), 'date_created': str(bug.bug.date_created), 'date_updated': str(bug.bug.date_last_updated), 'milestone': milestone, 'status': bug.status, 'short_status': sh_status, 'priority': bug.importance, 'team': team.encode('utf-8'), 'assignee': assignee.encode('utf-8'), 'name': assignee_name.encode('utf-8'), 'work_items': w_items.encode('utf-8'), 'tags': ' '.join(bug.bug.tags), 'triage': ', '.join(triage).encode('utf-8'), }) print() return report