def find(self, module_name: str) -> Optional[str]: for prefix in self.paths: package_path = "/".join((prefix, module_name.split(".")[0])) path_obj = Path(package_path).resolve() is_module = ( exists_case_sensitive(package_path + ".py") or any( exists_case_sensitive(package_path + ext_suffix) for ext_suffix in importlib.machinery.EXTENSION_SUFFIXES ) or exists_case_sensitive(package_path + "/__init__.py") ) is_package = exists_case_sensitive(package_path) and os.path.isdir(package_path) if is_module or is_package: if ( "site-packages" in prefix or "dist-packages" in prefix or (self.virtual_env and self.virtual_env_src in prefix) ): return sections.THIRDPARTY elif os.path.normcase(prefix) == self.stdlib_lib_prefix: return sections.STDLIB elif self.conda_env and self.conda_env in prefix: return sections.THIRDPARTY for src_path in self.config.src_paths: if src_path in path_obj.parents and not self.config.is_skipped(path_obj): return sections.FIRSTPARTY if os.path.normcase(prefix).startswith(self.stdlib_lib_prefix): return sections.STDLIB # pragma: no cover - edge case for one OS. Hard to test. return self.config.default_section return None
def _is_module(path: Path) -> bool: return ( exists_case_sensitive(str(path.with_suffix(".py"))) or any( exists_case_sensitive(str(path.with_suffix(ext_suffix))) for ext_suffix in importlib.machinery.EXTENSION_SUFFIXES ) or exists_case_sensitive(str(path / "__init__.py")) )
def _src_path_is_module(src_path: Path, module_name: str) -> bool: return ( module_name == src_path.name and src_path.is_dir() and exists_case_sensitive(str(src_path)) )
def _is_package(path: Path) -> bool: return exists_case_sensitive(str(path)) and path.is_dir()