def iter_source_code(paths, config, skipped): """Iterate over all Python source files defined in paths.""" if 'not_skip' in config: config['skip'] = list( set(config['skip']).difference(config['not_skip'])) for path in paths: if os.path.isdir(path): for dirpath, dirnames, filenames in os.walk(path, topdown=True, followlinks=True): for dirname in list(dirnames): if should_skip(dirname, config, dirpath): skipped.append(dirname) dirnames.remove(dirname) for filename in filenames: filepath = os.path.join(dirpath, filename) if is_python_file(filepath): relative_file = os.path.relpath(filepath, path) if should_skip(relative_file, config, path): skipped.append(filename) else: yield filepath else: yield path
def iter_source_code(paths, config, skipped): """Iterate over all Python source files defined in paths.""" for path in paths: if os.path.isdir(path): if should_skip(path, config): skipped.append(path) continue for dirpath, dirnames, filenames in os.walk(path, topdown=True): for dirname in list(dirnames): if should_skip(dirname, config): skipped.append(dirname) dirnames.remove(dirname) for filename in filenames: if filename.endswith('.py'): if should_skip(filename, config): skipped.append(filename) else: yield os.path.join(dirpath, filename) else: yield path
def iter_source_code(paths, config, skipped): """Iterate over all Python source files defined in paths.""" for path in paths: if os.path.isdir(path): if should_skip(path, config, os.getcwd()): skipped.append(path) continue for dirpath, dirnames, filenames in os.walk(path, topdown=True): for dirname in list(dirnames): if should_skip(dirname, config, dirpath): skipped.append(dirname) dirnames.remove(dirname) for filename in filenames: if filename.endswith('.py'): if should_skip(filename, config, dirpath): skipped.append(filename) else: yield os.path.join(dirpath, filename) else: yield path
def iter_source_code(paths, config, skipped): """Iterate over all Python source files defined in paths.""" for path in paths: if os.path.isdir(path): if should_skip(path, config, os.getcwd()): skipped.append(path) continue for dirpath, dirnames, filenames in os.walk(path, topdown=True): for dirname in list(dirnames): if should_skip(dirname, config, dirpath): skipped.append(dirname) dirnames.remove(dirname) for filename in filenames: filepath = os.path.join(dirpath, filename) if is_python_file(filepath): if should_skip(filename, config, dirpath): skipped.append(filename) else: yield filepath else: yield path
def iter_source_code(paths, config, skipped): """Iterate over all Python source files defined in paths.""" if 'not_skip' in config: config['skip'] = list(set(config['skip']).difference(config['not_skip'])) for path in paths: if os.path.isdir(path): for dirpath, dirnames, filenames in os.walk(path, topdown=True, followlinks=True): for dirname in list(dirnames): if should_skip(dirname, config, dirpath): skipped.append(dirname) dirnames.remove(dirname) for filename in filenames: filepath = os.path.join(dirpath, filename) if is_python_file(filepath): relative_file = os.path.relpath(filepath, path) if should_skip(relative_file, config, path): skipped.append(filename) else: yield filepath else: yield path
#! /usr/bin/env python
def main(argv=None): arguments = parse_args(argv) if arguments.get('show_version'): print(INTRO) return if arguments.get('ambiguous_r_flag'): print('ERROR: Deprecated -r flag set. This flag has been replaced with -rm to remove ambiguity between it and ' '-rc for recursive') sys.exit(1) arguments['check_skip'] = False if 'settings_path' in arguments: sp = arguments['settings_path'] arguments['settings_path'] = os.path.abspath(sp) if os.path.isdir(sp) else os.path.dirname(os.path.abspath(sp)) if not os.path.isdir(arguments['settings_path']): print("WARNING: settings_path dir does not exist: {0}".format(arguments['settings_path'])) if 'virtual_env' in arguments: venv = arguments['virtual_env'] arguments['virtual_env'] = os.path.abspath(venv) if not os.path.isdir(arguments['virtual_env']): print("WARNING: virtual_env dir does not exist: {0}".format(arguments['virtual_env'])) file_names = arguments.pop('files', []) if file_names == ['-']: try: # python 3 file_ = sys.stdin.buffer except AttributeError: # python 2 file_ = sys.stdin SortImports(file_=file_, write_to_stdout=True, **arguments) else: if not file_names: file_names = ['.'] arguments['recursive'] = True if not arguments.get('apply', False): arguments['ask_to_apply'] = True config = from_path(arguments.get('settings_path', '') or os.path.abspath(file_names[0]) or os.getcwd()).copy() config.update(arguments) wrong_sorted_files = False skipped = [] if config.get('filter_files'): filtered_files = [] for file_name in file_names: if should_skip(file_name, config): skipped.append(file_name) else: filtered_files.append(file_name) file_names = filtered_files if arguments.get('recursive', False): file_names = iter_source_code(file_names, config, skipped) num_skipped = 0 if config['verbose'] or config.get('show_logo', False): print(INTRO) jobs = arguments.get('jobs') if jobs: import multiprocessing executor = multiprocessing.Pool(jobs) attempt_iterator = executor.imap(functools.partial(sort_imports, **arguments), file_names) else: attempt_iterator = (sort_imports(file_name, **arguments) for file_name in file_names) for sort_attempt in attempt_iterator: if not sort_attempt: continue incorrectly_sorted = sort_attempt.incorrectly_sorted if arguments.get('check', False) and incorrectly_sorted: wrong_sorted_files = True if sort_attempt.skipped: num_skipped += 1 if wrong_sorted_files: sys.exit(1) num_skipped += len(skipped) if num_skipped and not arguments.get('quiet', False): if config['verbose']: for was_skipped in skipped: print("WARNING: {0} was skipped as it's listed in 'skip' setting" " or matches a glob in 'skip_glob' setting".format(was_skipped)) print("Skipped {0} files".format(num_skipped))
def main(argv=None): arguments = parse_args(argv) if arguments.get('show_version'): print(INTRO) return if arguments.get('ambiguous_r_flag'): print( 'ERROR: Deprecated -r flag set. This flag has been replaced with -rm to remove ambiguity between it and ' '-rc for recursive') sys.exit(1) arguments['check_skip'] = False if 'settings_path' in arguments: sp = arguments['settings_path'] arguments['settings_path'] = os.path.abspath(sp) if os.path.isdir( sp) else os.path.dirname(os.path.abspath(sp)) if not os.path.isdir(arguments['settings_path']): print("WARNING: settings_path dir does not exist: {0}".format( arguments['settings_path'])) if 'virtual_env' in arguments: venv = arguments['virtual_env'] arguments['virtual_env'] = os.path.abspath(venv) if not os.path.isdir(arguments['virtual_env']): print("WARNING: virtual_env dir does not exist: {0}".format( arguments['virtual_env'])) file_names = arguments.pop('files', []) if file_names == ['-']: try: # python 3 file_ = sys.stdin.buffer except AttributeError: # python 2 file_ = sys.stdin SortImports(file_=file_, write_to_stdout=True, **arguments) else: if not file_names: file_names = ['.'] arguments['recursive'] = True if not arguments.get('apply', False): arguments['ask_to_apply'] = True config = from_path( arguments.get('settings_path', '') or os.path.abspath(file_names[0]) or os.getcwd()).copy() config.update(arguments) wrong_sorted_files = False skipped = [] if config.get('filter_files'): filtered_files = [] for file_name in file_names: if should_skip(file_name, config): skipped.append(file_name) else: filtered_files.append(file_name) file_names = filtered_files if arguments.get('recursive', False): file_names = iter_source_code(file_names, config, skipped) num_skipped = 0 if config['verbose'] or config.get('show_logo', False): print(INTRO) jobs = arguments.get('jobs') if jobs: import multiprocessing executor = multiprocessing.Pool(jobs) attempt_iterator = executor.imap( functools.partial(sort_imports, **arguments), file_names) else: attempt_iterator = (sort_imports(file_name, **arguments) for file_name in file_names) for sort_attempt in attempt_iterator: if not sort_attempt: continue incorrectly_sorted = sort_attempt.incorrectly_sorted if arguments.get('check', False) and incorrectly_sorted: wrong_sorted_files = True if sort_attempt.skipped: num_skipped += 1 if wrong_sorted_files: sys.exit(1) num_skipped += len(skipped) if num_skipped and not arguments.get('quiet', False): if config['verbose']: for was_skipped in skipped: print( "WARNING: {0} was skipped as it's listed in 'skip' setting" " or matches a glob in 'skip_glob' setting".format( was_skipped)) print("Skipped {0} files".format(num_skipped))