def main(): """Starting point of a program""" args = parse_args() if not os.path.isfile(args.config): conf = config_setup(args.config) else: with open(args.config) as f: conf = yaml.load(f) auth = HTTPBasicAuth(conf['jenkins']['user'], conf['jenkins']['password']) regex = re.compile(args.re, args.flags) if args.command == 'list': for bn in args.builds: build = Build(auth, conf['jenkins']['url'], conf['jenkins']['job'], bn) grouped = group_by_regex(build.console_output(), regex, args.key_group, args.values_group) if args.keys_only: for key in grouped.keys(): print(key) else: for key, values in grouped.items(): print(key) for value in values: print("\t{}".format(value)) print() elif args.command == 'diff': build_a = Build(auth, conf['jenkins']['url'], conf['jenkins']['job'], args.build_a) build_b = Build(auth, conf['jenkins']['url'], conf['jenkins']['job'], args.build_b) groups_a = group_by_regex(build_a.console_output(), regex, args.key_group, args.values_group) groups_b = group_by_regex(build_b.console_output(), regex, args.key_group, args.values_group) diff = dict_diff(groups_a, groups_b) sys.stdout.write(format_diff(diff, color=args.color).getvalue())
def test_parse_tests_should_have_named_groups(self): self.assertRaises( ValueError, lambda: group_by_regex(self.console_output, re.compile('^(\w+)\.py\s(\w+)$', re.M), 'keys', 'values') ) self.assertRaises( ValueError, lambda: group_by_regex(self.console_output, re.compile('^(?P<abra>\w+)\.py\s(?P<cadabra>\w+)$', re.M), 'keys', 'values') )
def test_parse_tests_should_return_proper_dict(self): tests = group_by_regex(self.console_output, re.compile('^(?P<test_file>\w+)\.py\s(?P<test_case>\w+)$', re.M), 'test_file', 'test_case') self.assertEquals(len(tests['test1']), 2) self.assertEquals(len(tests['test2']), 1) self.assertEquals(len(tests['test3']), 1) self.assertTrue('test_case1' in tests['test1']) self.assertTrue('test_case2' in tests['test1'])