From 0fea15ea29ce7486e7ec38dbb30bb105de745d40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Val=C3=A9rian=20Rousset?= Date: Fri, 29 Jul 2016 15:47:23 +0200 Subject: [PATCH] Add mmap (#412) * py3 done * have to have specific version, to much changes * py2 done * merge py2 and py3 version * fix duplicate definition in mypy * apply version specific def * rename ContextManager, single line for import --- stdlib/2and3/mmap.pyi | 78 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 stdlib/2and3/mmap.pyi diff --git a/stdlib/2and3/mmap.pyi b/stdlib/2and3/mmap.pyi new file mode 100644 index 000000000..b83539402 --- /dev/null +++ b/stdlib/2and3/mmap.pyi @@ -0,0 +1,78 @@ +# Stubs for mmap + +from typing import Optional, Sequence, Union, Generic, TypeVar, overload +import sys + + +_T = TypeVar('_T', str, bytes) + +# TODO already in PEP, have to get added to mypy +from typing import Type +from types import TracebackType +_C = TypeVar('_C') +class _ContextManager(Generic[_C]): + def __enter__(self) -> _C: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], + exc_val: Optional[Exception], + exc_tb: Optional[TracebackType]) -> bool: ... + + +ACCESS_READ = ... # type: int +ACCESS_WRITE = ... # type: int +ACCESS_COPY = ... # type: int + +ALLOCATIONGRANULARITY = ... # type: int + +if sys.platform != 'win32': + MAP_PRIVATE = ... # type: int + MAP_SHARED = ... # type: int + PROT_READ = ... # type: int + PROT_WRITE = ... # type: int + + PAGESIZE = ... # type: int + +class _mmap(Generic[_T]): + if sys.platform == 'win32': + def __init__(self, fileno: int, length: int, + tagname: Optional[str] = ..., access: int = ..., + offset: int = ...) -> None: ... + else: + def __init__(self, # type: ignore + fileno: int, length: int, flags: int = ..., + prot: int = ..., access: int = ..., + offset: int = ...) -> None: ... + def close(self) -> None: ... + def find(self, sub: _T, + start: int = ..., end: int = ...) -> int: ... + def flush(self, offset: int = ..., size: int = ...) -> int: ... + def move(self, dest: int, src: int, count: int) -> None: ... + def read(self, n: int = ...) -> _T: ... + def read_byte(self) -> _T: ... + def readline(self) -> _T: ... + def resize(self, newsize: int) -> None: ... + def seek(self, pos: int, whence: int = ...) -> None: ... + def size(self) -> int: ... + def tell(self) -> int: ... + def write(self, bytes: _T) -> None: ... + def write_byte(self, byte: _T) -> None: ... + def __len__(self) -> int: ... + +if sys.version_info >= (3,): + class mmap(_mmap, _ContextManager[mmap], Sequence[bytes]): + closed = ... # type: bool + def rfind(self, sub: bytes, start: int = ..., stop: int = ...) -> int: ... + @overload # type: ignore + def __getitem__(self, index: int) -> int: ... + @overload + def __getitem__(self, index: slice) -> bytes: ... + def __delitem__(self, index: Union[int, slice]) -> None: ... + @overload + def __setitem__(self, index: int, object: int) -> None: ... + @overload + def __setitem__(self, index: slice, object: bytes) -> None: ... +else: + class mmap(_mmap, Sequence[str]): + def rfind(self, string: str, start: int = ..., stop: int = ...) -> int: ... + def __getitem__(self, index: Union[int, slice]) -> str: ... + def __delitem__(self, index: Union[int, slice]) -> None: ... + def __setitem__(self, index: Union[int, slice], object: str) -> None: ...