コード例 #1
0
ファイル: report.py プロジェクト: maxsimov/launchpad-report
 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
コード例 #2
0
 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))
コード例 #3
0
ファイル: report.py プロジェクト: zen/launchpad-report
 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
コード例 #4
0
ファイル: report.py プロジェクト: zen/launchpad-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,
     }
コード例 #5
0
 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))
コード例 #6
0
ファイル: report.py プロジェクト: maxsimov/launchpad-report
 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,
     }
コード例 #7
0
ファイル: report.py プロジェクト: zen/launchpad-report
    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
コード例 #8
0
 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)
コード例 #9
0
ファイル: report.py プロジェクト: maxsimov/launchpad-report
    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