Fix return types in urllib.request (#2389)

* Tighten return types of URL handlers

* urlopen() etc. return a modified HTTPResponse

* Add missing methods to HTTPResponse
This commit is contained in:
Sebastian Rittau
2018-09-19 01:45:09 +02:00
committed by Rebecca Chen
parent d70a6cbcc0
commit 9827132d5b
2 changed files with 19 additions and 10 deletions

View File

@@ -104,6 +104,9 @@ if sys.version_info >= (3, 5):
def __exit__(self, exc_type: Optional[Type[BaseException]],
exc_val: Optional[BaseException],
exc_tb: Optional[types.TracebackType]) -> bool: ...
def info(self) -> email.message.Message: ...
def geturl(self) -> str: ...
def getcode(self) -> int: ...
else:
class HTTPResponse(io.RawIOBase, BinaryIO): # type: ignore
msg = ... # type: HTTPMessage
@@ -126,6 +129,9 @@ else:
def __exit__(self, exc_type: Optional[Type[BaseException]],
exc_val: Optional[BaseException],
exc_tb: Optional[types.TracebackType]) -> bool: ...
def info(self) -> email.message.Message: ...
def geturl(self) -> str: ...
def getcode(self) -> int: ...
class HTTPConnection:
if sys.version_info >= (3, 7):

View File

@@ -2,7 +2,7 @@
from typing import (
Any, Callable, ClassVar, Dict, List, IO, Mapping, Optional, Sequence, Tuple,
TypeVar, Union, overload,
TypeVar, Union, overload, NoReturn,
)
from http.client import HTTPResponse, HTTPMessage
from http.cookiejar import CookieJar
@@ -13,8 +13,11 @@ import sys
import os
_T = TypeVar('_T')
_UrlopenRet = Union[HTTPResponse, addinfourl]
_UrlopenRet = Union[_HTTPResponse, addinfourl]
class _HTTPResponse(HTTPResponse):
url: str
msg: str # type: ignore
def urlopen(
url: Union[str, Request], data: Optional[bytes] = ...,
@@ -155,33 +158,33 @@ class ProxyDigestAuthHandler(BaseHandler, AbstractDigestAuthHandler):
hdrs: Mapping[str, str]) -> Optional[_UrlopenRet]: ...
class HTTPHandler(BaseHandler):
def http_open(self, req: Request) -> _UrlopenRet: ...
def http_open(self, req: Request) -> HTTPResponse: ...
class HTTPSHandler(BaseHandler):
def __init__(self, debuglevel: int = ...,
context: Optional[ssl.SSLContext] = ...,
check_hostname: bool = ...) -> None: ...
def https_open(self, req: Request) -> _UrlopenRet: ...
def https_open(self, req: Request) -> HTTPResponse: ...
class FileHandler(BaseHandler):
def file_open(self, req: Request) -> _UrlopenRet: ...
def file_open(self, req: Request) -> addinfourl: ...
class DataHandler(BaseHandler):
def data_open(self, req: Request) -> _UrlopenRet: ...
def data_open(self, req: Request) -> addinfourl: ...
class FTPHandler(BaseHandler):
def ftp_open(self, req: Request) -> _UrlopenRet: ...
def ftp_open(self, req: Request) -> addinfourl: ...
class CacheFTPHandler(FTPHandler):
def setTimeout(self, t: float) -> None: ...
def setMaxConns(self, m: int) -> None: ...
class UnknownHandler(BaseHandler):
def unknown_open(self, req: Request) -> _UrlopenRet: ...
def unknown_open(self, req: Request) -> NoReturn: ...
class HTTPErrorProcessor(BaseHandler):
def http_response(self) -> _UrlopenRet: ...
def https_response(self) -> _UrlopenRet: ...
def http_response(self, request, response) -> _UrlopenRet: ...
def https_response(self, request, response) -> _UrlopenRet: ...
if sys.version_info >= (3, 6):
def urlretrieve(url: str, filename: Optional[Union[str, os.PathLike]] = ...,