# Stubs for warnings

# Based on http://docs.python.org/3.2/library/warnings.html

from typing import Any, List, TextIO, Union

def warn(message: Union[str, Warning], category: type = None,
         stacklevel: int = 1) -> None: ...

def warn_explicit(message: Union[str, Warning], category: type, filename: str,
                  lineno: int, module: str = None, registry: Any = None,
                  module_globals: Any = None) -> None: ...

# logging modifies showwarning => make it a variable.
def _showwarning(message: str, category: type, filename: str, lineno: int,
                 file: TextIO = None, line: str = None) -> None: ...
showwarning = _showwarning

def formatwarning(message: str, category: type, filename: str, lineno: int,
                  line: str = None) -> None: ...
def filterwarnings(action: str, message: str = '', category: type = Warning,
                   module: str = '', lineno: int = 0,
                   append: bool = False) -> None: ...
def simplefilter(action: str, category: type = Warning, lineno: int = 0,
                 append: bool = False) -> None: ...
def resetwarnings() -> None: ...

class catch_warnings:
    # TODO record and module must be keyword arguments!
    # TODO type of module?
    def __init__(self, record: bool = False, module: Any = None) -> None: ...
    def __enter__(self) -> List[Any]: ...
    def __exit__(self, type, value, traceback) -> bool: ...
