コード例 #1
0
class BaseReport:

    def __init__(self, fix_version):
        self.fix_version = fix_version
        self.confluence = Confluence(url=confluence_url, **user_credentials)

    @property
    def release_page_id(self):
        return self._find_child_id(hasdk_releases, f"{self.fix_version} - SDK1.X")

    @property
    def rc_release_page_id(self):
        return self._find_child_id(self.release_page_id, f"RC - {self.fix_version} - SDK1.X")

    def _find_child_id(self, parent_id: int, part_of_child_name: str, child_limit=300) -> int:
        children = self.confluence.get_page_child_by_type(parent_id, limit=child_limit)
        log.info(f"children -> {children}")
        for child in children:
            if part_of_child_name in child.get('title'):
                return child.get('id')
        return 0

    def create_page(self): raise NotImplemented

    def _page_title(self): raise NotImplemented

    def fill_page_template(self): raise NotImplemented
コード例 #2
0
class ReportPageBuilder:
    def __init__(self,
                 aepreq_jira_key,
                 fix_version,
                 cycle_name,
                 map_version,
                 map_revision,
                 map_region="World",
                 platform="Linux64"):
        self.aepreq_key = aepreq_jira_key
        self.fix_version = fix_version
        self.cycle_name = cycle_name
        self.map_version = map_version
        self.map_revision = map_revision
        self.map_region = map_region
        self.platform = platform
        self.zapi = ZephyrAPI()
        self.confluence = Confluence(url='https://confluence.in.here.com',
                                     **user_credentials)

    def create_page(self):
        page_content = self.fill_page_template()
        self.confluence.update_or_create(parent_id=self._find_parent_page_id(),
                                         title=self._page_title(),
                                         body=page_content,
                                         representation='storage')

    def _page_title(self):
        return f"{self.fix_version} - {JiraAPI.get_jira_summary_by_key(self.aepreq_key)}"

    def fill_page_template(self) -> str:
        page_data = dict(aepreq_key=self.aepreq_key,
                         aepreq_component=None,
                         filter_id=self._get_zapi_filter_id(),
                         fix_version=self.fix_version,
                         jira_tests=self._get_functional_test_cases(),
                         map_version=self.map_version,
                         map_revision=self.map_revision,
                         map_region=self.map_region,
                         platform=self.platform,
                         sdk_version=f"{self.fix_version} - SDK1.X")

        page_content = Environment(loader=FileSystemLoader(report_page_templates))\
            .get_template('aepreq_report_page.html').render(page_data=page_data)

        return page_content

    def _get_aepreq_additional_test_info(self) -> tuple:
        gerrit = GerritHandler()
        linked_aqa_issues = self.zapi.get_test_creation_task_from_aepreq(
            self.aepreq_key)
        commits = set()
        all_labels = set()
        log.info(f"linked_aqa_issues -> {linked_aqa_issues}")
        for aqa_issue in linked_aqa_issues:

            gerrit_commit = gerrit.get_gerrit_commit_url(aqa_issue)
            labels = self.zapi.get_issue_labels(aqa_issue)
            log.info(f"gerrit_commit -> {gerrit_commit}")
            log.info(f"labels -> {labels}")
            commits.update([gerrit_commit])
            all_labels.update(labels)
        return list(commits), list(all_labels)

    def _get_functional_test_cases(self):
        test_info = self.zapi.get_aepreq_tests_info(self.aepreq_key)
        gerrit_commits, labels = [
            aqa_issue for aqa_issue in self._get_aepreq_additional_test_info()
        ]
        commit = " ,".join(
            gerrit_commits) if len(gerrit_commits) > 1 else gerrit_commits[0]
        label = " ,".join(labels) if len(labels) > 1 else labels[0]
        for test in test_info:
            if "Closed" in test.get("status"):
                test["status"] = "done"
            test.update({"gerrit_commit": commit, "label": label})
        log.info(f"jira tests -> {test_info}")
        return test_info

    def _get_zapi_filter_id(self):
        zapi_filter_query = f'project = "HERESDK" AND fixVersion = "{self.fix_version}" ' \
                            f'AND cycleName in ("{self.cycle_name}") AND issue in linkedIssues({self.aepreq_key})'
        zapi_filter_id = self.zapi.create_execution_filter(
            filter_name=f"{self.cycle_name}_{self.aepreq_key}",
            query=zapi_filter_query)
        log.info(f"zapi_filter_query -> {zapi_filter_query}")
        log.info(f"zapi_filter_id -> {zapi_filter_id}")
        return zapi_filter_id

    def _find_parent_page_id(self) -> int:
        hasdk_releases = 561519772
        release_page_id = self._find_child_id(hasdk_releases,
                                              f"{self.fix_version} - SDK1.X")
        rc_release_page_id = self._find_child_id(
            release_page_id, f"RC - {self.fix_version} - SDK1.X")
        rc_test_summary_page_id = self._find_child_id(
            rc_release_page_id, "Product Requirements Test Summary")
        return rc_test_summary_page_id

    def _find_child_id(self, parent_id: int, part_of_child_name: str) -> int:
        children = self.confluence.get_page_child_by_type(parent_id, limit=100)
        log.info(f"children -> {children}")
        for child in children:
            if part_of_child_name in child.get('title'):
                return child.get('id')
        return 0