Merge lp:~dholbach/click-reviewers-tools/click-review-refactor into lp:click-reviewers-tools

Proposed by Daniel Holbach
Status: Merged
Merged at revision: 234
Proposed branch: lp:~dholbach/click-reviewers-tools/click-review-refactor
Merge into: lp:click-reviewers-tools
Diff against target: 177 lines (+77/-55)
2 files modified
bin/click-review (+76/-55)
debian/changelog (+1/-0)
To merge this branch: bzr merge lp:~dholbach/click-reviewers-tools/click-review-refactor
Reviewer Review Type Date Requested Status
Martin Albisetti (community) Approve
Review via email: mp+232861@code.launchpad.net
To post a comment you must log in.
235. By Daniel Holbach

move instantiation out of __init__, fix unexpanded print message

236. By Daniel Holbach

add changelog entry

Revision history for this message
Martin Albisetti (beuno) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'bin/click-review'
2--- bin/click-review 2014-08-27 16:26:27 +0000
3+++ bin/click-review 2014-09-01 14:35:28 +0000
4@@ -3,86 +3,107 @@
5 from clickreviews import modules
6 import argparse
7 import json
8+import os
9 import sys
10
11
12-def print_findings(which, kind):
13+def print_findings(results, description):
14 '''
15 Print a summary of the issues found.
16 '''
17
18- if not which:
19+ if not description or not results:
20 return ''
21- print(kind)
22- print(''.center(len(kind), '-'))
23- for key in which.keys():
24+ print(description)
25+ print(''.center(len(description), '-'))
26+ for key in results.keys():
27 print(' - %s' % key)
28- print('\t%s' % which[key]['text'])
29- if 'link' in which[key]:
30- print('\t%s' % which[key]['link'])
31-
32-
33-def report(results, args):
34+ print('\t%s' % results[key]['text'])
35+ if 'link' in results[key]:
36+ print('\t%s' % results[key]['link'])
37+
38+
39+class Results(object):
40+ results = {}
41 errors = {}
42 warnings = {}
43 info = {}
44-
45- for module in results:
46- for key in results[module]['error']:
47- errors[key] = results[module]['error'][key]
48- for key in results[module]['warn']:
49- warnings[key] = results[module]['warn'][key]
50- if args.verbose:
51- for key in results[module]['info']:
52- info[key] = results[module]['info'][key]
53-
54- if not args.json:
55- print_findings(errors, 'Errors')
56- print_findings(warnings, 'Warnings')
57- if args.verbose:
58- print_findings(info, 'Info')
59- if warnings or errors:
60- print('%s: FAIL' % args.filename)
61+ rc = 0
62+
63+ def __init__(self, args):
64+ self.args = args
65+ self.click_fn = self.args.filename
66+ self.cr_modules = modules.get_modules()
67+
68+ def _analyse_results(self):
69+ for module in self.results:
70+ for key in self.results[module]['error']:
71+ self.errors[key] = self.results[module]['error'][key]
72+ for key in self.results[module]['warn']:
73+ self.warnings[key] = self.results[module]['warn'][key]
74+ if self.args.verbose:
75+ for key in self.results[module]['info']:
76+ self.info[key] = self.results[module]['info'][key]
77+
78+ def _report(self):
79+ self._analyse_results()
80+
81+ if not self.args.json:
82+ print_findings(self.errors, 'Errors')
83+ print_findings(self.warnings, 'Warnings')
84+ if self.args.verbose:
85+ print_findings(self.info, 'Info')
86+ if self.warnings or self.errors:
87+ print('%s: FAIL' % self.args.filename)
88+ else:
89+ print('%s: pass' % self.args.filename)
90 else:
91- print('%s: pass' % args.filename)
92- else:
93- print(json.dumps(results, sort_keys=True, indent=2,
94- separators=(',', ': ')))
95- if warnings or errors:
96- return 1
97- return 0
98+ print(json.dumps(self.results, sort_keys=True, indent=2,
99+ separators=(',', ': ')))
100+ if self.warnings or self.errors:
101+ self.rc = 1
102+
103+ def _run_module_checks(self, module):
104+ # What we are doing here is basically what all the
105+ # ./bin/click-check-* scripts do as well, so for
106+ # example something like:
107+ #
108+ # review = cr_push_helper.ClickReviewPushHelper(sys.argv[1])
109+ # review.do_checks()
110+ # rc = review.do_report()
111+ #
112+ review = modules.init_main_class(module, self.click_fn)
113+ review.do_checks()
114+ self.results[module.replace('cr_', '')] = review.click_report
115+
116+ def run_all_checks(self):
117+ for module in self.cr_modules:
118+ self._run_module_checks(module)
119+ self._report()
120
121
122 def main():
123 parser = argparse.ArgumentParser()
124 parser.add_argument('filename', type=str,
125 help='.click file to be inspected')
126- parser.add_argument('-v', '--verbose', help='increase output verbosity',
127+ parser.add_argument('-v', '--verbose',
128+ help='increase output verbosity',
129 action='store_true')
130 parser.add_argument('--json', help='print json output',
131 action='store_true')
132 args = parser.parse_args()
133- click_file = args.filename
134-
135- # What we are doing here is basically what all the
136- # ./bin/click-check-* scripts do as well, so for
137- # example something like:
138- #
139- # review = cr_push_helper.ClickReviewPushHelper(sys.argv[1])
140- # review.do_checks()
141- # rc = review.do_report()
142- #
143- results = {}
144- cr_modules = modules.get_modules()
145- if not cr_modules:
146+
147+ if not os.path.exists(args.filename):
148+ print(".click file '%s' does not exist." % args.filename)
149+ sys.exit(1)
150+
151+ results = Results(args)
152+ if not results.cr_modules:
153 print("No 'clickreviews' modules found.")
154 sys.exit(1)
155- for module in cr_modules:
156- review = modules.init_main_class(module, click_file)
157- review.do_checks()
158- results[module.replace('cr_', '')] = review.click_report
159- rc = report(results, args)
160- sys.exit(rc)
161+
162+ results.run_all_checks()
163+ sys.exit(results.rc)
164
165
166 if __name__ == '__main__':
167
168=== modified file 'debian/changelog'
169--- debian/changelog 2014-08-27 16:26:27 +0000
170+++ debian/changelog 2014-09-01 14:35:28 +0000
171@@ -2,6 +2,7 @@
172
173 * Split out code to find Click*Review classes in the clickreviews package
174 into its own module, add tests for it.
175+ * Refactor bin/click-review to make it easier to extend.
176
177 -- Daniel Holbach <daniel.holbach@ubuntu.com> Wed, 27 Aug 2014 16:22:03 +0200
178

Subscribers

People subscribed via source and target branches