示例#1
0
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
示例#2
0
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
示例#3
0
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
示例#4
0
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
示例#5
0
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
示例#6
0
#! /usr/bin/env python
示例#7
0
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))
示例#8
0
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))