Tipragot
628be439b8
Cela permet de ne pas avoir de problèmes de compatibilité car python est dans le git.
42 lines
1.6 KiB
Python
42 lines
1.6 KiB
Python
import os
|
|
from pathlib import Path
|
|
from typing import Iterable, Iterator, List, Set
|
|
|
|
from isort.settings import Config
|
|
|
|
|
|
def find(
|
|
paths: Iterable[str], config: Config, skipped: List[str], broken: List[str]
|
|
) -> Iterator[str]:
|
|
"""Fines and provides an iterator for all Python source files defined in paths."""
|
|
visited_dirs: Set[Path] = set()
|
|
|
|
for path in paths:
|
|
if os.path.isdir(path):
|
|
for dirpath, dirnames, filenames in os.walk(
|
|
path, topdown=True, followlinks=config.follow_links
|
|
):
|
|
base_path = Path(dirpath)
|
|
for dirname in list(dirnames):
|
|
full_path = base_path / dirname
|
|
resolved_path = full_path.resolve()
|
|
if config.is_skipped(full_path):
|
|
skipped.append(dirname)
|
|
dirnames.remove(dirname)
|
|
else:
|
|
if resolved_path in visited_dirs: # pragma: no cover
|
|
dirnames.remove(dirname)
|
|
visited_dirs.add(resolved_path)
|
|
|
|
for filename in filenames:
|
|
filepath = os.path.join(dirpath, filename)
|
|
if config.is_supported_filetype(filepath):
|
|
if config.is_skipped(Path(os.path.abspath(filepath))):
|
|
skipped.append(filename)
|
|
else:
|
|
yield filepath
|
|
elif not os.path.exists(path):
|
|
broken.append(path)
|
|
else:
|
|
yield path
|