From ecba69dab2e8bce28ee50effe73421bd61e9a102 Mon Sep 17 00:00:00 2001 From: Aleksandra Fedorova Date: Sun, 25 Jan 2015 01:44:52 +0300 Subject: [PATCH] [report-exporter] Hot fixes - GetTables() searches by substring, thus can produce multiple results. Add one more check to choose the right table. - If build failed without any test results, create test data with one test case 'jenkins' with status 'failed'. Change-Id: Ieda81ea9f7fea14d345920a33bf0cce1aa386eab --- utils/jenkins/report-exporter/builds.py | 26 ++++++++++++++-- utils/jenkins/report-exporter/spreadsheet.py | 32 ++++++++++++++++---- 2 files changed, 50 insertions(+), 8 deletions(-) diff --git a/utils/jenkins/report-exporter/builds.py b/utils/jenkins/report-exporter/builds.py index 1aaf29c5f..71940bf4c 100644 --- a/utils/jenkins/report-exporter/builds.py +++ b/utils/jenkins/report-exporter/builds.py @@ -58,13 +58,35 @@ class Build(): job_info = J.get_job_info(self.name, depth=1) self.number = job_info["lastCompletedBuild"]["number"] else: - self.number = number + self.number = int(number) self.build_data = J.get_build_info(self.name, self.number, depth=1) self.url = self.build_data["url"] def test_data(self): - return get_test_data(self.url) + try: + data = get_test_data(self.url) + except Exception as e: + logger.warning("No test data for {0}: {1}".format( + self.url, + e, + )) + # If we failed to get any tests for the build, return + # meta test case 'jenkins' with status 'failed'. + data = { + "suites": [ + { + "cases": [ + { + "className": "jenkins", + "status": "failed" + } + ] + } + ] + } + + return data def __str__(self): string = "\n".join([ diff --git a/utils/jenkins/report-exporter/spreadsheet.py b/utils/jenkins/report-exporter/spreadsheet.py index 8a23775ba..ee5370674 100644 --- a/utils/jenkins/report-exporter/spreadsheet.py +++ b/utils/jenkins/report-exporter/spreadsheet.py @@ -31,20 +31,40 @@ class Document(): def get_page(self, name): tables = self.gspreadsheet.GetTables(name=name) - if len(tables) > 0: - logger.debug("Use worksheet {0}".format(name)) - else: + + # GetTables by name searches by substring in the table name. + # GetTables(name="smth") can return ["smth","smth_else"] + # Thus we run additional check for table.name + tables = [table for table in tables if table.name == name] + + if len(tables) == 0: # Create new worksheet logger.debug("Create new worksheet {0}".format(name)) - self.gspreadsheet.client._GetSpreadsheetsClient().AddWorksheet( + wrksh = self.gspreadsheet.client._GetSpreadsheetsClient().AddWorksheet( title=name, row_count=1, col_count=50, key=self.gspreadsheet.spreadsheet_key, ) - tables = self.gspreadsheet.GetTables(name=name) + table = text_db.Table( + name=name, + worksheet_entry=wrksh, + database_client=self.gspreadsheet.client, + spreadsheet_key=self.gspreadsheet.spreadsheet_key + ) + elif len(tables) == 1: + table = tables[0] + logger.debug("Use worksheet {0}".format(table.name)) + else: + logger.error( + "There are {0} tables named {1}".format( + len(tables), + name, + ) + ) + raise - return Page(tables.pop()) + return Page(table) class Page():