Source code for codestare.compiletools
import importlib
import pathlib
import typing
from itertools import chain
[docs]def has_module(*modules: str):
"""
Try importing module, catch ImportError
Args:
*modules: module names
Returns: True if module is importable else False
"""
try:
for name in modules:
importlib.import_module(name)
except ImportError:
return False
return True
[docs]def find_proto_files(*paths: pathlib.Path, recursive: bool = True) -> typing.List[pathlib.Path]:
"""
Return relative paths of .proto files in paths
Args:
*paths: We :func:`~pathlib.Path.glob` the files in the paths
recursive: check recursively in all paths if True
Returns:
List of unique paths of found .proto files, relative to search path
"""
searcher = chain.from_iterable(
p.glob(f"{'**/' if recursive else ''}*.proto") for p in paths
)
found = list(dict.fromkeys(searcher))
return found