From 4ee508a03255053f22a4f81abf7dfe3a036344d8 Mon Sep 17 00:00:00 2001 From: Jelle Zijlstra Date: Wed, 3 Jan 2018 02:17:38 +0800 Subject: [PATCH] make os.scandir work as a context manager (#1787) Rework of #1583. Fixes #1573. See documentation in https://docs.python.org/3/library/os.html#os.scandir. --- stdlib/3/os/__init__.pyi | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/stdlib/3/os/__init__.pyi b/stdlib/3/os/__init__.pyi index 059e3dd69..b78d1dd03 100644 --- a/stdlib/3/os/__init__.pyi +++ b/stdlib/3/os/__init__.pyi @@ -6,7 +6,7 @@ from io import TextIOWrapper as _TextIOWrapper import sys from typing import ( Mapping, MutableMapping, Dict, List, Any, Tuple, IO, Iterable, Iterator, overload, Union, AnyStr, - Optional, Generic, Set, Callable, Text, Sequence, NamedTuple, TypeVar + Optional, Generic, Set, Callable, Text, Sequence, NamedTuple, TypeVar, ContextManager ) from . import path as path from mypy_extensions import NoReturn @@ -487,10 +487,12 @@ if sys.version_info >= (3, 3): else: def rmdir(path: _PathType) -> None: ... if sys.version_info >= (3, 6): + class _ScandirIterator(Iterator[DirEntry[AnyStr]], ContextManager[_ScandirIterator[AnyStr]]): + def close(self) -> None: ... @overload - def scandir() -> Iterator[DirEntry[str]]: ... + def scandir() -> _ScandirIterator[str]: ... @overload - def scandir(path: Union[AnyStr, PathLike[AnyStr]]) -> Iterator[DirEntry[AnyStr]]: ... + def scandir(path: Union[AnyStr, PathLike[AnyStr]]) -> _ScandirIterator[AnyStr]: ... elif sys.version_info >= (3, 5): @overload def scandir() -> Iterator[DirEntry[str]]: ...