def __call__(self, _dir): require_bin( 'flake8', 'flake8 is required (try: "apt-get install flake8")') ignore = [ 'E501', # line-too-long ] base_cmd = 'cd {0} && flake8 {0}' cmd = base_cmd exclude = ['*build/*'] for venv_dir in find_venvs(_dir): exclude.append(venv_dir) ignore = ','.join(ignore) exclude = ','.join(exclude) exclude = ' --exclude=' + exclude ignore = ' --ignore=' + ignore cmd = cmd.format(_dir) + exclude output = self.cmd_exec(cmd) output_lines = output.split('\n') if self.ignore_pep8: output_lines = filter( lambda x: not r_pep8_error.match(x), output_lines) output = '\n'.join(output_lines) if self.ignore_unused_imports_in_init_files: r2 = re.compile('.*__init__.py.* F401 .*') output_lines = filter(lambda x: not r2.match(x), output_lines) output = '\n'.join(output_lines) if self.ignore_undefined_names: always_ignore_names = [x for x in self.ignore_undefined_names if isinstance(x, basestring)] patterns = [] res = re.compile(".*F821 undefined name '(" + '|'.join(always_ignore_names) + ")'") patterns.append(res) sometimes_ignore_names = [x for x in self.ignore_undefined_names if not isinstance(x, basestring)] for name, pattern in sometimes_ignore_names: res2 = re.compile( pattern + ".*F821 undefined name '" + name + "'") patterns.append(res2) output_lines = filter( lambda x: not any([y.match(x) for y in patterns]), output_lines) output = '\n'.join(output_lines) bad_files = [x.split(':')[0] for x in output_lines] err_counter = defaultdict(lambda: 0) for x in bad_files: err_counter[x] += 1 # sort files by number of errors sorted_by_severity = sorted(err_counter.items(), key=lambda x: -x[1]) top = sorted_by_severity[:3] report = dict(sorted_by_severity) print output total_problems = sum(report.values()) self.report("total problems: {0}".format(total_problems)) self.report("top files: {0}".format(dict(top))) return report.keys()
def summarize(parameter_s=''): _dir = parameter_s or os.getcwd() assert ope(_dir) tmp = guess_dir_type(_dir) print console.red('match types:') console.draw_line() print ' {0}'.format(tmp) print console.red('virttualenvs:') console.draw_line() print ' {0}'.format(find_venvs(_dir)) print console.red('sloccount:') for report_section in sloccount(_dir): console.draw_line() print report_section.strip() console.draw_line()
def _venvs(self): pname = self._project_manager._current_project return find_venvs( self._project_manager.project_map[pname])
def test_find_venvs(self): def report(*args): pass all_venvs = venv.find_venvs( TEST_DIR, report=report,max_venvs=5) self.assertEqual(len(all_venvs), 2)