diff --git a/stdlib/3/importlib/_modulespec.pyi b/stdlib/3/importlib/_modulespec.pyi new file mode 100644 index 000000000000..3d27ec280ddc --- /dev/null +++ b/stdlib/3/importlib/_modulespec.pyi @@ -0,0 +1,19 @@ +# ModuleSpec is in its own file to deal with import loops; defined in +# importlib.machinery. +import importlib.abc +import sys +from typing import Any, Optional + +if sys.version_info >= (3, 4): + class ModuleSpec: + def __init__(self, name: str, loader: Optional[importlib.abc.Loader], *, + origin: str = None, loader_state: Any = None, + is_package: bool = None) -> None: ... + name = ... # type: str + loader = ... # type: Optional[importlib.abc.Loader] + origin = ... # type: Optional[str] + submodule_search_locations = ... # type: Optional[List[str]] + loader_state = ... # type: Any + cached = ... # type: Optional[str] + parent = ... # type: Optional[str] + has_location = ... # type: bool diff --git a/stdlib/3/importlib/abc.pyi b/stdlib/3/importlib/abc.pyi index 83f39c480632..9920965814c5 100644 --- a/stdlib/3/importlib/abc.pyi +++ b/stdlib/3/importlib/abc.pyi @@ -1,4 +1,5 @@ import abc +from importlib._modulespec import ModuleSpec import sys import types from typing import Mapping, Optional, Sequence, Union @@ -10,7 +11,8 @@ class Loader(metaclass=abc.ABCMeta): if sys.version_info >= (3, 3): def module_repr(self, module: types.ModuleType) -> str: ... if sys.version_info >= (3, 4): - def create_module(self, spec: Any) -> Optional[types.ModuleType]: ... + def create_module(self, spec: ModuleSpec) -> Optional[types.ModuleType]: + ... # Not defined on the actual class for backwards-compatibility reasons, # but expected in new code. def exec_module(self, module: types.ModuleType) -> None: ... @@ -64,8 +66,9 @@ if sys.version_info >= (3, 3): def invalidate_caches(self) -> None: ... if sys.version_info >= (3, 4): # Not defined on the actual class, but expected to exist. - def findAny(fullname: str, path: Optional[Sequence[_Path]], - target: types.ModuleType = None) -> Optional[Any]: + def find_spec(self, fullname: str, path: Optional[Sequence[_Path]], + target: types.ModuleType = None + ) -> Optional[ModuleSpec]: ... class PathEntryFinder(Finder): @@ -75,8 +78,9 @@ if sys.version_info >= (3, 3): def invalidate_caches(self) -> None: ... if sys.version_info >= (3, 4): # Not defined on the actual class, but expected to exist. - def findAny(fullname: str, - target: types.ModuleType = None) -> Optional[Any]: + def find_spec(self, fullname: str, + target: types.ModuleType = None + ) -> Optional[ModuleSpec]: ... class FileLoader(ResourceLoader, ExecutionLoader): diff --git a/stdlib/3/importlib/machinery.pyi b/stdlib/3/importlib/machinery.pyi new file mode 100644 index 000000000000..fa6554f0b991 --- /dev/null +++ b/stdlib/3/importlib/machinery.pyi @@ -0,0 +1,124 @@ +import importlib.abc +import sys +import types +from typing import Any, Callable, List, Optional, Sequence, Tuple, Union + +# ModuleSpec is defined in this module, but for circular import reasons exists +# in its own stub file. +from importlib._modulespec import ModuleSpec + +class BuiltinImporter(importlib.abc.MetaPathFinder, + importlib.abc.InspectLoader): + # MetaPathFinder + @classmethod + def find_module(cls, fullname: str, + path: Optional[Sequence[importlib.abc._Path]] + ) -> Optional[importlib.abc.Loader]: + ... + if sys.version_info >= (3, 4): + @classmethod + def find_spec(cls, fullname: str, + path: Optional[Sequence[importlib.abc._Path]], + target: types.ModuleType = None) -> Optional[ModuleSpec]: + ... + # InspectLoader + @classmethod + def is_package(cls, fullname: str) -> bool: ... + @classmethod + def load_module(cls, fullname: str) -> types.ModuleType: ... + @classmethod + def get_code(cls, fullname: str) -> None: ... # type: ignore + @classmethod + def get_source(cls, fullname: str) -> None: ... # type: ignore + # Loader + @classmethod + def load_module(cls, fullname: str) -> types.ModuleType: ... + if sys.version_info >= (3, 3): + @staticmethod + def module_repr(module: types.ModuleType) -> str: ... # type: ignore + if sys.version_info >= (3, 4): + @classmethod + def create_module(cls, spec: ModuleSpec) -> Optional[types.ModuleType]: + ... + @classmethod + def exec_module(cls, module: types.ModuleType) -> None: ... + +class FrozenImporter(importlib.abc.MetaPathFinder, importlib.abc.InspectLoader): + # MetaPathFinder + @classmethod + def find_module(cls, fullname: str, + path: Optional[Sequence[importlib.abc._Path]] + ) -> Optional[importlib.abc.Loader]: + ... + if sys.version_info >= (3, 4): + @classmethod + def find_spec(cls, fullname: str, + path: Optional[Sequence[importlib.abc._Path]], + target: types.ModuleType = None) -> Optional[ModuleSpec]: + ... + # InspectLoader + @classmethod + def is_package(cls, fullname: str) -> bool: ... + @classmethod + def load_module(cls, fullname: str) -> types.ModuleType: ... + @classmethod + def get_code(cls, fullname: str) -> None: ... # type: ignore + @classmethod + def get_source(cls, fullname: str) -> None: ... # type: ignore + # Loader + @classmethod + def load_module(cls, fullname: str) -> types.ModuleType: ... + if sys.version_info >= (3, 3): + @staticmethod + def module_repr(module: types.ModuleType) -> str: ... # type: ignore + if sys.version_info >= (3, 4): + @classmethod + def create_module(cls, spec: ModuleSpec) -> Optional[types.ModuleType]: + ... + @staticmethod + def exec_module(module: types.ModuleType) -> None: ... # type: ignore + +class WindowsRegisteryFinder(importlib.abc.MetaPathFinder): + @classmethod + def find_module(cls, fullname: str, + path: Optional[Sequence[importlib.abc._Path]] + ) -> Optional[importlib.abc.Loader]: + ... + if sys.version_info >= (3, 4): + @classmethod + def find_spec(cls, fullname: str, + path: Optional[Sequence[importlib.abc._Path]], + target: types.ModuleType = None) -> Optional[ModuleSpec]: + ... + +class PathFinder(importlib.abc.MetaPathFinder): ... + +if sys.version_info >= (3, 3): + SOURCE_SUFFIXES = ... # type: List[str] + DEBUG_BYTECODE_SUFFIXES = ... # type: List[str] + OPTIMIZED_BYTECODE_SUFFIXES = ... # type: List[str] + BYTECODE_SUFFIXES = ... # type: List[str] + EXTENSION_SUFFIXES = ... # type: List[str] + + def all_suffixes() -> List[str]: ... + + class FileFinder(importlib.abc.PathEntryFinder): + path = ... # type: str + def __init__(self, path: str, + *loader_details: Tuple[importlib.abc.Loader, List[str]] + ) -> None: ... + @classmethod + def path_hook(*loader_details: Tuple[importlib.abc.Loader, List[str]] + ) -> Callable[[str], importlib.abc.PathEntryFinder]: ... + + class SourceFileLoader(importlib.abc.FileLoader, + importlib.abc.SourceLoader): + ... + + class SourcelessFileLoader(importlib.abc.FileLoader, + importlib.abc.SourceLoader): + ... + + class ExtensionFileLoader(importlib.abc.ExecutionLoader): + def get_filename(self, fullname: str) -> importlib.abc._Path: ... + def get_source(self, fullname: str) -> None: ... # type: ignore diff --git a/stdlib/3/types.pyi b/stdlib/3/types.pyi index ad120b73318c..b5f67a8ce783 100644 --- a/stdlib/3/types.pyi +++ b/stdlib/3/types.pyi @@ -4,6 +4,7 @@ # TODO parts of this should be conditional on version import importlib.abc +from importlib._modulespec import ModuleSpec import sys from typing import ( Any, Callable, Dict, Generic, Iterator, Mapping, Optional, Tuple, TypeVar, @@ -115,7 +116,7 @@ class ModuleType: __package__ = ... # type: Optional[str] # Should be Optional[ModuleSpec], but importlib.machinery has no stub # yet. - __spec__ = ... # type: Optional[Any] + __spec__ = ... # type: Optional[ModuleSpec] def __init__(self, name: str, doc: str) -> None: ... class TracebackType: