Skip to content

Commit 9827132

Browse files
srittaurchen152
authored andcommitted
Fix return types in urllib.request (#2389)
* Tighten return types of URL handlers * urlopen() etc. return a modified HTTPResponse * Add missing methods to HTTPResponse
1 parent d70a6cb commit 9827132

File tree

2 files changed

+19
-10
lines changed

2 files changed

+19
-10
lines changed

stdlib/3/http/client.pyi

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,9 @@ if sys.version_info >= (3, 5):
104104
def __exit__(self, exc_type: Optional[Type[BaseException]],
105105
exc_val: Optional[BaseException],
106106
exc_tb: Optional[types.TracebackType]) -> bool: ...
107+
def info(self) -> email.message.Message: ...
108+
def geturl(self) -> str: ...
109+
def getcode(self) -> int: ...
107110
else:
108111
class HTTPResponse(io.RawIOBase, BinaryIO): # type: ignore
109112
msg = ... # type: HTTPMessage
@@ -126,6 +129,9 @@ else:
126129
def __exit__(self, exc_type: Optional[Type[BaseException]],
127130
exc_val: Optional[BaseException],
128131
exc_tb: Optional[types.TracebackType]) -> bool: ...
132+
def info(self) -> email.message.Message: ...
133+
def geturl(self) -> str: ...
134+
def getcode(self) -> int: ...
129135

130136
class HTTPConnection:
131137
if sys.version_info >= (3, 7):

stdlib/3/urllib/request.pyi

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
from typing import (
44
Any, Callable, ClassVar, Dict, List, IO, Mapping, Optional, Sequence, Tuple,
5-
TypeVar, Union, overload,
5+
TypeVar, Union, overload, NoReturn,
66
)
77
from http.client import HTTPResponse, HTTPMessage
88
from http.cookiejar import CookieJar
@@ -13,8 +13,11 @@ import sys
1313
import os
1414

1515
_T = TypeVar('_T')
16-
_UrlopenRet = Union[HTTPResponse, addinfourl]
16+
_UrlopenRet = Union[_HTTPResponse, addinfourl]
1717

18+
class _HTTPResponse(HTTPResponse):
19+
url: str
20+
msg: str # type: ignore
1821

1922
def urlopen(
2023
url: Union[str, Request], data: Optional[bytes] = ...,
@@ -155,33 +158,33 @@ class ProxyDigestAuthHandler(BaseHandler, AbstractDigestAuthHandler):
155158
hdrs: Mapping[str, str]) -> Optional[_UrlopenRet]: ...
156159

157160
class HTTPHandler(BaseHandler):
158-
def http_open(self, req: Request) -> _UrlopenRet: ...
161+
def http_open(self, req: Request) -> HTTPResponse: ...
159162

160163
class HTTPSHandler(BaseHandler):
161164
def __init__(self, debuglevel: int = ...,
162165
context: Optional[ssl.SSLContext] = ...,
163166
check_hostname: bool = ...) -> None: ...
164-
def https_open(self, req: Request) -> _UrlopenRet: ...
167+
def https_open(self, req: Request) -> HTTPResponse: ...
165168

166169
class FileHandler(BaseHandler):
167-
def file_open(self, req: Request) -> _UrlopenRet: ...
170+
def file_open(self, req: Request) -> addinfourl: ...
168171

169172
class DataHandler(BaseHandler):
170-
def data_open(self, req: Request) -> _UrlopenRet: ...
173+
def data_open(self, req: Request) -> addinfourl: ...
171174

172175
class FTPHandler(BaseHandler):
173-
def ftp_open(self, req: Request) -> _UrlopenRet: ...
176+
def ftp_open(self, req: Request) -> addinfourl: ...
174177

175178
class CacheFTPHandler(FTPHandler):
176179
def setTimeout(self, t: float) -> None: ...
177180
def setMaxConns(self, m: int) -> None: ...
178181

179182
class UnknownHandler(BaseHandler):
180-
def unknown_open(self, req: Request) -> _UrlopenRet: ...
183+
def unknown_open(self, req: Request) -> NoReturn: ...
181184

182185
class HTTPErrorProcessor(BaseHandler):
183-
def http_response(self) -> _UrlopenRet: ...
184-
def https_response(self) -> _UrlopenRet: ...
186+
def http_response(self, request, response) -> _UrlopenRet: ...
187+
def https_response(self, request, response) -> _UrlopenRet: ...
185188

186189
if sys.version_info >= (3, 6):
187190
def urlretrieve(url: str, filename: Optional[Union[str, os.PathLike]] = ...,

0 commit comments

Comments
 (0)