def test_date_parser(self): """Test the date_parser""" testdate = datetime.date(1970, 1, 1) self.assertEqual(date_parser('1970-01-01'), testdate) self.assertEqual(date_parser('1970-1-1'), testdate) today = datetime.date.today() beginthismonth = datetime.date(today.year, today.month, 1) self.assertEqual(date_parser('BEGINTHISMONTH'), beginthismonth) endapril = datetime.date(today.year, 4, 30) self.assertEqual(date_parser('ENDAPRIL'), endapril)
def test_date_parser(self): """Test the date_parser""" testdate = datetime.date(1970, 1, 1) self.assertEqual(date_parser('1970-01-01') , testdate) self.assertEqual(date_parser('1970-1-1'), testdate) today = datetime.date.today() beginthismonth = datetime.date(today.year, today.month, 1) self.assertEqual(date_parser('BEGINTHISMONTH') , beginthismonth) endapril = datetime.date(today.year, 4, 30) self.assertEqual(date_parser('ENDAPRIL') , endapril)
def take_action(self, action, dest, opt, value, values, parser): """extended take_action""" orig_action = action # keep copy if action == 'shorthelp': parser.print_shorthelp() parser.exit() elif action in ('store_true', 'store_false', 'store_debuglog'): if action == 'store_debuglog': action = 'store_true' if opt.startswith("--%s-" % self.ENABLE): # keep action pass elif opt.startswith("--%s-" % self.DISABLE): # reverse action if action in ('store_true', 'store_debuglog'): action = 'store_false' elif action in ('store_false', ): action = 'store_true' if orig_action == 'store_debuglog' and action == 'store_true': setLogLevelDebug() Option.take_action(self, action, dest, opt, value, values, parser) elif action in self.EXTOPTION_EXTRA_OPTIONS: if action == "extend": # comma separated list convert in list lvalue = value.split(self.EXTEND_SEPARATOR) values.ensure_value(dest, []).extend(lvalue) elif action == "date": lvalue = date_parser(value) setattr(values, dest, lvalue) elif action == "datetime": lvalue = datetime_parser(value) setattr(values, dest, lvalue) else: raise (Exception( "Unknown extended option action %s (known: %s)" % (action, self.EXTOPTION_EXTRA_OPTIONS))) else: Option.take_action(self, action, dest, opt, value, values, parser) # set flag to mark as passed by action (ie not by default) # - distinguish from setting default value through option if hasattr(values, '_action_taken'): values._action_taken[dest] = True
def take_action(self, action, dest, opt, value, values, parser): """Extended take_action""" orig_action = action # keep copy if action == 'shorthelp': parser.print_shorthelp() parser.exit() elif action in ('store_true', 'store_false',) + self.EXTOPTION_LOG: if action in self.EXTOPTION_LOG: action = 'store_true' if opt.startswith("--%s-" % self.ENABLE): # keep action pass elif opt.startswith("--%s-" % self.DISABLE): # reverse action if action in ('store_true',) + self.EXTOPTION_LOG: action = 'store_false' elif action in ('store_false',): action = 'store_true' if orig_action in('store_debuglog', 'store_infolog', 'store_warninglog') and action == 'store_true': setLogLevel(orig_action.split('_')[1][:-3].upper()) Option.take_action(self, action, dest, opt, value, values, parser) elif action in self.EXTOPTION_EXTRA_OPTIONS: if action == "extend": # comma separated list convert in list lvalue = value.split(self.EXTEND_SEPARATOR) values.ensure_value(dest, []).extend(lvalue) elif action == "date": lvalue = date_parser(value) setattr(values, dest, lvalue) elif action == "datetime": lvalue = datetime_parser(value) setattr(values, dest, lvalue) else: raise(Exception("Unknown extended option action %s (known: %s)" % (action, self.EXTOPTION_EXTRA_OPTIONS))) else: Option.take_action(self, action, dest, opt, value, values, parser) # set flag to mark as passed by action (ie not by default) # - distinguish from setting default value through option if hasattr(values, '_action_taken'): values._action_taken[dest] = True
def test_date_parser(self): """Test the date_parser""" testdate = datetime.date(1970, 1, 1) self.assertEqual(date_parser('1970-01-01'), testdate) self.assertEqual(date_parser('1970-1-1'), testdate) today = datetime.date.today() beginthismonth = datetime.date(today.year, today.month, 1) self.assertEqual(date_parser('BEGINTHISMONTH'), beginthismonth) endapril = datetime.date(today.year, 4, 30) self.assertEqual(date_parser('ENDAPRIL'), endapril) todaytime = datetime.datetime(today.year, today.month, today.day) oneday = datetime.timedelta(days=1) self.assertEqual(date_parser('TODAY'), today) self.assertEqual(date_parser('YESTERDAY'), (todaytime - oneday).date()) self.assertEqual(date_parser('TOMORROW'), (todaytime + oneday).date())
def gen_table_rows(prs): """Generate table rows.""" col_tmpls = [ "{v: %(number)s, f: '<a href=\"%(html_url)s\">#%(number)s</a>'}", "'%(user_login)s'", "'%(title)s'", "{v: %(age)s, f: '%(age)s days'}", "%(last_update)s", "%(unit_test)s", "%(style_check)s", "%(test_reports)s", "%(status)s", "%(signed_off)s", "%(participants)s", # FIXME "0", # FIXME ] row_tmpl = " [" + ', '.join(col_tmpls) + "]," example_ut = [-1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1] example_sc = [-1, -1, -1, 0, 0, 0, 1, 1, 1, -1, -1, -1, 0, 0, 0, 1, 1, 1, -1, -1, -1, 0, 0, 0, 1, 1, 1] example_tr = [-1, 0, 1, -1, 0, 1, -1, 0, 1, -1, 0, 1, -1, 0, 1, -1, 0, 1, -1, 0, 1, -1, 0, 1, -1, 0, 1] example_statuses = [-3, -2, -1, -2, -1, 0, -1, 0, 1, -2, -1, 0, -1, 0, 1, 0, 1, 2, -1, 0, 1, 0, 1, 2, 1, 2, 3] merged_today = 0 todays_date = date_parser('TODAY') last_update = datetime_parser(prs[0]['updated_at'].replace('T', ' ')[:-1]) lines = [' data.addRows(['] for pr in prs: if pr['closed_at']: if date_parser(pr['closed_at'].split('T')[0]) == todays_date: merged_today += 1 # only consider open PRs if pr['state'] != 'open': continue # shorten long titles, escape single quotes if len(pr['title']) > 30: pr['title'] = pr['title'][:30] + '...' pr['title'] = pr['title'].replace("'", "\\'") # determine status based on results of unit tests, style check and test reports unit_test = TEST_VALUES_MAP[pr['combined_status']] # initial value: '???' (unknown) style_check = 0 test_reports = 0 signed_off = False # iterate over all comments, last hit wins for comment in pr['issue_comments']['bodies']: if 'lgtm' in comment.lower() or 'style review ok' in comment.lower(): style_check = 1 if comment.lower().startswith('test report'): if 'SUCCESS' in comment: test_reports = 1 elif 'FAILED' in comment: test_reports = -1 if 'good to go' in comment.lower(): signed_off = True status = unit_test + style_check + test_reports participants = len(nub(pr['issue_comments']['users'])) year, month, day, hour, minutes, seconds = pr['updated_at'].replace('T', '@')[:-1].replace(':', '@').replace('-', '@').split('@') pr.update({ 'age': (datetime_parser('TODAY') - datetime_parser(pr['created_at'].split('T')[0])).days, 'last_update': "new Date(%s, %s, %s, %s, %s, %s)" % (year, month, day, hour, minutes, seconds), 'participants': participants, 'signed_off': ['', 'true'][signed_off], 'status': status, 'style_check': TEST_RESULTS[style_check+1], 'test_reports': TEST_RESULTS[test_reports+1], 'unit_test': TEST_RESULTS[unit_test+1], 'user_login': pr['user']['login'], }) lines.append(row_tmpl % pr) last_update = max(datetime_parser(pr['updated_at'].replace('T', ' ')[:-1]), last_update) lines.append(' ]);') return len(lines)-2, '\n'.join(lines), merged_today, last_update
def gen_table_rows(prs): """Generate table rows.""" col_tmpls = [ "{v: %(number)s, f: '<a href=\"%(html_url)s\">#%(number)s</a>'}", "'%(user_login)s'", "'%(title)s'", "{v: %(age)s, f: '%(age)s days'}", "%(last_update)s", "%(unit_test)s", "%(style_check)s", "%(test_reports)s", "%(status)s", "%(signed_off)s", "%(participants)s", # FIXME "0", # FIXME ] row_tmpl = " [" + ', '.join(col_tmpls) + "]," merged_today = 0 todays_date = date_parser('TODAY') last_update = datetime_parser(prs[0]['updated_at'].replace('T', ' ')[:-1]) lines = [' data.addRows(['] for pr in prs: if pr['closed_at']: if date_parser(pr['closed_at'].split('T')[0]) == todays_date: merged_today += 1 # only consider open PRs if pr['state'] != 'open': continue # shorten long titles, escape single quotes if len(pr['title']) > 30: pr['title'] = pr['title'][:30] + '...' pr['title'] = pr['title'].replace("'", "\\'") # determine status based on results of unit tests, style check and test reports unit_test = TEST_VALUES_MAP[pr['combined_status']] # initial value: '???' (unknown) style_check = 0 test_reports = 0 signed_off = False # iterate over all comments, last hit wins for comment in pr['issue_comments']['bodies']: if 'lgtm' in comment.lower() or 'style review ok' in comment.lower(): style_check = 1 if comment.lower().startswith('test report'): if 'SUCCESS' in comment: test_reports = 1 elif 'FAILED' in comment: test_reports = -1 if 'good to go' in comment.lower(): signed_off = True status = unit_test + style_check + test_reports participants = len(nub(pr['issue_comments']['users'])) raw_updated_at = pr['updated_at'].replace('T', '@')[:-1].replace(':', '@').replace('-', '@') year, month, day, hour, minutes, seconds = raw_updated_at.split('@') pr.update({ 'age': (datetime_parser('TODAY') - datetime_parser(pr['created_at'].split('T')[0])).days, 'last_update': "new Date(%s, %s, %s, %s, %s, %s)" % (year, month, day, hour, minutes, seconds), 'participants': participants, 'signed_off': ['', 'true'][signed_off], 'status': status, 'style_check': TEST_RESULTS[style_check+1], 'test_reports': TEST_RESULTS[test_reports+1], 'unit_test': TEST_RESULTS[unit_test+1], 'user_login': pr['user']['login'], }) lines.append(row_tmpl % pr) last_update = max(datetime_parser(pr['updated_at'].replace('T', ' ')[:-1]), last_update) lines.append(' ]);') return len(lines)-2, '\n'.join(lines), merged_today, last_update