1import importlib.abc
2import types
3from typing import Any, Callable, List, Optional, Sequence, Tuple, Union
4
5# TODO: the loaders seem a bit backwards, attribute is protocol but __init__ arg isn't?
6class ModuleSpec:
7    def __init__(
8        self,
9        name: str,
10        loader: Optional[importlib.abc.Loader],
11        *,
12        origin: Optional[str] = ...,
13        loader_state: Any = ...,
14        is_package: Optional[bool] = ...,
15    ) -> None: ...
16    name: str
17    loader: Optional[importlib.abc._LoaderProtocol]
18    origin: Optional[str]
19    submodule_search_locations: Optional[List[str]]
20    loader_state: Any
21    cached: Optional[str]
22    parent: Optional[str]
23    has_location: bool
24
25class BuiltinImporter(importlib.abc.MetaPathFinder, importlib.abc.InspectLoader):
26    # MetaPathFinder
27    @classmethod
28    def find_module(
29        cls, fullname: str, path: Optional[Sequence[importlib.abc._Path]] = ...
30    ) -> Optional[importlib.abc.Loader]: ...
31    @classmethod
32    def find_spec(
33        cls, fullname: str, path: Optional[Sequence[importlib.abc._Path]] = ..., target: Optional[types.ModuleType] = ...
34    ) -> Optional[ModuleSpec]: ...
35    # InspectLoader
36    @classmethod
37    def is_package(cls, fullname: str) -> bool: ...
38    @classmethod
39    def load_module(cls, fullname: str) -> types.ModuleType: ...
40    @classmethod
41    def get_code(cls, fullname: str) -> None: ...
42    @classmethod
43    def get_source(cls, fullname: str) -> None: ...
44    # Loader
45    @staticmethod
46    def module_repr(module: types.ModuleType) -> str: ...
47    @classmethod
48    def create_module(cls, spec: ModuleSpec) -> Optional[types.ModuleType]: ...
49    @classmethod
50    def exec_module(cls, module: types.ModuleType) -> None: ...
51
52class FrozenImporter(importlib.abc.MetaPathFinder, importlib.abc.InspectLoader):
53    # MetaPathFinder
54    @classmethod
55    def find_module(
56        cls, fullname: str, path: Optional[Sequence[importlib.abc._Path]] = ...
57    ) -> Optional[importlib.abc.Loader]: ...
58    @classmethod
59    def find_spec(
60        cls, fullname: str, path: Optional[Sequence[importlib.abc._Path]] = ..., target: Optional[types.ModuleType] = ...
61    ) -> Optional[ModuleSpec]: ...
62    # InspectLoader
63    @classmethod
64    def is_package(cls, fullname: str) -> bool: ...
65    @classmethod
66    def load_module(cls, fullname: str) -> types.ModuleType: ...
67    @classmethod
68    def get_code(cls, fullname: str) -> None: ...
69    @classmethod
70    def get_source(cls, fullname: str) -> None: ...
71    # Loader
72    @staticmethod
73    def module_repr(m: types.ModuleType) -> str: ...
74    @classmethod
75    def create_module(cls, spec: ModuleSpec) -> Optional[types.ModuleType]: ...
76    @staticmethod
77    def exec_module(module: types.ModuleType) -> None: ...
78
79class WindowsRegistryFinder(importlib.abc.MetaPathFinder):
80    @classmethod
81    def find_module(
82        cls, fullname: str, path: Optional[Sequence[importlib.abc._Path]] = ...
83    ) -> Optional[importlib.abc.Loader]: ...
84    @classmethod
85    def find_spec(
86        cls, fullname: str, path: Optional[Sequence[importlib.abc._Path]] = ..., target: Optional[types.ModuleType] = ...
87    ) -> Optional[ModuleSpec]: ...
88
89class PathFinder:
90    @classmethod
91    def invalidate_caches(cls) -> None: ...
92    @classmethod
93    def find_spec(
94        cls, fullname: str, path: Optional[Sequence[Union[bytes, str]]] = ..., target: Optional[types.ModuleType] = ...
95    ) -> Optional[ModuleSpec]: ...
96    @classmethod
97    def find_module(cls, fullname: str, path: Optional[Sequence[Union[bytes, str]]] = ...) -> Optional[importlib.abc.Loader]: ...
98
99SOURCE_SUFFIXES: List[str]
100DEBUG_BYTECODE_SUFFIXES: List[str]
101OPTIMIZED_BYTECODE_SUFFIXES: List[str]
102BYTECODE_SUFFIXES: List[str]
103EXTENSION_SUFFIXES: List[str]
104
105def all_suffixes() -> List[str]: ...
106
107class FileFinder(importlib.abc.PathEntryFinder):
108    path: str
109    def __init__(self, path: str, *loader_details: Tuple[importlib.abc.Loader, List[str]]) -> None: ...
110    @classmethod
111    def path_hook(
112        cls, *loader_details: Tuple[importlib.abc.Loader, List[str]]
113    ) -> Callable[[str], importlib.abc.PathEntryFinder]: ...
114
115class SourceFileLoader(importlib.abc.FileLoader, importlib.abc.SourceLoader):
116    def set_data(self, path: importlib.abc._Path, data: bytes, *, _mode: int = ...) -> None: ...
117
118class SourcelessFileLoader(importlib.abc.FileLoader, importlib.abc.SourceLoader): ...
119
120class ExtensionFileLoader(importlib.abc.ExecutionLoader):
121    def __init__(self, name: str, path: importlib.abc._Path) -> None: ...
122    def get_filename(self, name: Optional[str] = ...) -> importlib.abc._Path: ...
123    def get_source(self, fullname: str) -> None: ...
124