Skip to content

Commit fc1ee8f

Browse files
authored
Bump urllib.request to 3.14 (#14062)
1 parent 05ec037 commit fc1ee8f

File tree

3 files changed

+106
-100
lines changed

3 files changed

+106
-100
lines changed

stdlib/@tests/stubtest_allowlists/py314.txt

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -117,11 +117,6 @@ turtle.poly
117117
turtle.save
118118
types.CodeType.co_branches
119119
types.FrameType.f_generator
120-
urllib.request.__all__
121-
urllib.request.FancyURLopener
122-
urllib.request.URLopener
123-
urllib.request.pathname2url
124-
urllib.request.url2pathname
125120
xml.parsers.expat.errors.XML_ERROR_NOT_STARTED
126121
xml.sax.__all__
127122
xml.sax.InputSource

stdlib/urllib/request.pyi

Lines changed: 101 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ from http.client import HTTPConnection, HTTPMessage, HTTPResponse
77
from http.cookiejar import CookieJar
88
from re import Pattern
99
from typing import IO, Any, ClassVar, NoReturn, Protocol, TypeVar, overload
10-
from typing_extensions import TypeAlias
10+
from typing_extensions import TypeAlias, deprecated
1111
from urllib.error import HTTPError as HTTPError
1212
from urllib.response import addclosehook, addinfourl
1313

@@ -43,10 +43,10 @@ __all__ = [
4343
"getproxies",
4444
"urlretrieve",
4545
"urlcleanup",
46-
"URLopener",
47-
"FancyURLopener",
4846
"HTTPSHandler",
4947
]
48+
if sys.version_info < (3, 14):
49+
__all__ += ["URLopener", "FancyURLopener"]
5050

5151
_T = TypeVar("_T")
5252
_UrlopenRet: TypeAlias = Any
@@ -72,11 +72,16 @@ else:
7272
def install_opener(opener: OpenerDirector) -> None: ...
7373
def build_opener(*handlers: BaseHandler | Callable[[], BaseHandler]) -> OpenerDirector: ...
7474

75-
if sys.platform == "win32":
76-
from nturl2path import pathname2url as pathname2url, url2pathname as url2pathname
75+
if sys.version_info >= (3, 14):
76+
def url2pathname(url: str, *, require_scheme: bool = False, resolve_host: bool = False) -> str: ...
77+
def pathname2url(pathname: str, *, add_scheme: bool = False) -> str: ...
78+
7779
else:
78-
def url2pathname(pathname: str) -> str: ...
79-
def pathname2url(pathname: str) -> str: ...
80+
if sys.platform == "win32":
81+
from nturl2path import pathname2url as pathname2url, url2pathname as url2pathname
82+
else:
83+
def url2pathname(pathname: str) -> str: ...
84+
def pathname2url(pathname: str) -> str: ...
8085

8186
def getproxies() -> dict[str, str]: ...
8287
def getproxies_environment() -> dict[str, str]: ...
@@ -318,91 +323,94 @@ def urlretrieve(
318323
) -> tuple[str, HTTPMessage]: ...
319324
def urlcleanup() -> None: ...
320325

321-
class URLopener:
322-
version: ClassVar[str]
323-
def __init__(self, proxies: dict[str, str] | None = None, **x509: str) -> None: ...
324-
def open(self, fullurl: str, data: ReadableBuffer | None = None) -> _UrlopenRet: ...
325-
def open_unknown(self, fullurl: str, data: ReadableBuffer | None = None) -> _UrlopenRet: ...
326-
def retrieve(
327-
self,
328-
url: str,
329-
filename: str | None = None,
330-
reporthook: Callable[[int, int, int], object] | None = None,
331-
data: ReadableBuffer | None = None,
332-
) -> tuple[str, Message | None]: ...
333-
def addheader(self, *args: tuple[str, str]) -> None: ... # undocumented
334-
def cleanup(self) -> None: ... # undocumented
335-
def close(self) -> None: ... # undocumented
336-
def http_error(
337-
self, url: str, fp: IO[bytes], errcode: int, errmsg: str, headers: HTTPMessage, data: bytes | None = None
338-
) -> _UrlopenRet: ... # undocumented
339-
def http_error_default(
340-
self, url: str, fp: IO[bytes], errcode: int, errmsg: str, headers: HTTPMessage
341-
) -> _UrlopenRet: ... # undocumented
342-
def open_data(self, url: str, data: ReadableBuffer | None = None) -> addinfourl: ... # undocumented
343-
def open_file(self, url: str) -> addinfourl: ... # undocumented
344-
def open_ftp(self, url: str) -> addinfourl: ... # undocumented
345-
def open_http(self, url: str, data: ReadableBuffer | None = None) -> _UrlopenRet: ... # undocumented
346-
def open_https(self, url: str, data: ReadableBuffer | None = None) -> _UrlopenRet: ... # undocumented
347-
def open_local_file(self, url: str) -> addinfourl: ... # undocumented
348-
def open_unknown_proxy(self, proxy: str, fullurl: str, data: ReadableBuffer | None = None) -> None: ... # undocumented
349-
def __del__(self) -> None: ...
350-
351-
class FancyURLopener(URLopener):
352-
def prompt_user_passwd(self, host: str, realm: str) -> tuple[str, str]: ...
353-
def get_user_passwd(self, host: str, realm: str, clear_cache: int = 0) -> tuple[str, str]: ... # undocumented
354-
def http_error_301(
355-
self, url: str, fp: IO[bytes], errcode: int, errmsg: str, headers: HTTPMessage, data: ReadableBuffer | None = None
356-
) -> _UrlopenRet | addinfourl | None: ... # undocumented
357-
def http_error_302(
358-
self, url: str, fp: IO[bytes], errcode: int, errmsg: str, headers: HTTPMessage, data: ReadableBuffer | None = None
359-
) -> _UrlopenRet | addinfourl | None: ... # undocumented
360-
def http_error_303(
361-
self, url: str, fp: IO[bytes], errcode: int, errmsg: str, headers: HTTPMessage, data: ReadableBuffer | None = None
362-
) -> _UrlopenRet | addinfourl | None: ... # undocumented
363-
def http_error_307(
364-
self, url: str, fp: IO[bytes], errcode: int, errmsg: str, headers: HTTPMessage, data: ReadableBuffer | None = None
365-
) -> _UrlopenRet | addinfourl | None: ... # undocumented
366-
if sys.version_info >= (3, 11):
367-
def http_error_308(
326+
if sys.version_info < (3, 14):
327+
@deprecated("Deprecated since Python 3.3; Removed in 3.14; Use newer urlopen functions and methods.")
328+
class URLopener:
329+
version: ClassVar[str]
330+
def __init__(self, proxies: dict[str, str] | None = None, **x509: str) -> None: ...
331+
def open(self, fullurl: str, data: ReadableBuffer | None = None) -> _UrlopenRet: ...
332+
def open_unknown(self, fullurl: str, data: ReadableBuffer | None = None) -> _UrlopenRet: ...
333+
def retrieve(
334+
self,
335+
url: str,
336+
filename: str | None = None,
337+
reporthook: Callable[[int, int, int], object] | None = None,
338+
data: ReadableBuffer | None = None,
339+
) -> tuple[str, Message | None]: ...
340+
def addheader(self, *args: tuple[str, str]) -> None: ... # undocumented
341+
def cleanup(self) -> None: ... # undocumented
342+
def close(self) -> None: ... # undocumented
343+
def http_error(
344+
self, url: str, fp: IO[bytes], errcode: int, errmsg: str, headers: HTTPMessage, data: bytes | None = None
345+
) -> _UrlopenRet: ... # undocumented
346+
def http_error_default(
347+
self, url: str, fp: IO[bytes], errcode: int, errmsg: str, headers: HTTPMessage
348+
) -> _UrlopenRet: ... # undocumented
349+
def open_data(self, url: str, data: ReadableBuffer | None = None) -> addinfourl: ... # undocumented
350+
def open_file(self, url: str) -> addinfourl: ... # undocumented
351+
def open_ftp(self, url: str) -> addinfourl: ... # undocumented
352+
def open_http(self, url: str, data: ReadableBuffer | None = None) -> _UrlopenRet: ... # undocumented
353+
def open_https(self, url: str, data: ReadableBuffer | None = None) -> _UrlopenRet: ... # undocumented
354+
def open_local_file(self, url: str) -> addinfourl: ... # undocumented
355+
def open_unknown_proxy(self, proxy: str, fullurl: str, data: ReadableBuffer | None = None) -> None: ... # undocumented
356+
def __del__(self) -> None: ...
357+
358+
@deprecated("Deprecated since Python 3.3; Removed in 3.14; Use newer urlopen functions and methods.")
359+
class FancyURLopener(URLopener):
360+
def prompt_user_passwd(self, host: str, realm: str) -> tuple[str, str]: ...
361+
def get_user_passwd(self, host: str, realm: str, clear_cache: int = 0) -> tuple[str, str]: ... # undocumented
362+
def http_error_301(
368363
self, url: str, fp: IO[bytes], errcode: int, errmsg: str, headers: HTTPMessage, data: ReadableBuffer | None = None
369364
) -> _UrlopenRet | addinfourl | None: ... # undocumented
370-
371-
def http_error_401(
372-
self,
373-
url: str,
374-
fp: IO[bytes],
375-
errcode: int,
376-
errmsg: str,
377-
headers: HTTPMessage,
378-
data: ReadableBuffer | None = None,
379-
retry: bool = False,
380-
) -> _UrlopenRet | None: ... # undocumented
381-
def http_error_407(
382-
self,
383-
url: str,
384-
fp: IO[bytes],
385-
errcode: int,
386-
errmsg: str,
387-
headers: HTTPMessage,
388-
data: ReadableBuffer | None = None,
389-
retry: bool = False,
390-
) -> _UrlopenRet | None: ... # undocumented
391-
def http_error_default(
392-
self, url: str, fp: IO[bytes], errcode: int, errmsg: str, headers: HTTPMessage
393-
) -> addinfourl: ... # undocumented
394-
def redirect_internal(
395-
self, url: str, fp: IO[bytes], errcode: int, errmsg: str, headers: HTTPMessage, data: ReadableBuffer | None
396-
) -> _UrlopenRet | None: ... # undocumented
397-
def retry_http_basic_auth(
398-
self, url: str, realm: str, data: ReadableBuffer | None = None
399-
) -> _UrlopenRet | None: ... # undocumented
400-
def retry_https_basic_auth(
401-
self, url: str, realm: str, data: ReadableBuffer | None = None
402-
) -> _UrlopenRet | None: ... # undocumented
403-
def retry_proxy_http_basic_auth(
404-
self, url: str, realm: str, data: ReadableBuffer | None = None
405-
) -> _UrlopenRet | None: ... # undocumented
406-
def retry_proxy_https_basic_auth(
407-
self, url: str, realm: str, data: ReadableBuffer | None = None
408-
) -> _UrlopenRet | None: ... # undocumented
365+
def http_error_302(
366+
self, url: str, fp: IO[bytes], errcode: int, errmsg: str, headers: HTTPMessage, data: ReadableBuffer | None = None
367+
) -> _UrlopenRet | addinfourl | None: ... # undocumented
368+
def http_error_303(
369+
self, url: str, fp: IO[bytes], errcode: int, errmsg: str, headers: HTTPMessage, data: ReadableBuffer | None = None
370+
) -> _UrlopenRet | addinfourl | None: ... # undocumented
371+
def http_error_307(
372+
self, url: str, fp: IO[bytes], errcode: int, errmsg: str, headers: HTTPMessage, data: ReadableBuffer | None = None
373+
) -> _UrlopenRet | addinfourl | None: ... # undocumented
374+
if sys.version_info >= (3, 11):
375+
def http_error_308(
376+
self, url: str, fp: IO[bytes], errcode: int, errmsg: str, headers: HTTPMessage, data: ReadableBuffer | None = None
377+
) -> _UrlopenRet | addinfourl | None: ... # undocumented
378+
379+
def http_error_401(
380+
self,
381+
url: str,
382+
fp: IO[bytes],
383+
errcode: int,
384+
errmsg: str,
385+
headers: HTTPMessage,
386+
data: ReadableBuffer | None = None,
387+
retry: bool = False,
388+
) -> _UrlopenRet | None: ... # undocumented
389+
def http_error_407(
390+
self,
391+
url: str,
392+
fp: IO[bytes],
393+
errcode: int,
394+
errmsg: str,
395+
headers: HTTPMessage,
396+
data: ReadableBuffer | None = None,
397+
retry: bool = False,
398+
) -> _UrlopenRet | None: ... # undocumented
399+
def http_error_default(
400+
self, url: str, fp: IO[bytes], errcode: int, errmsg: str, headers: HTTPMessage
401+
) -> addinfourl: ... # undocumented
402+
def redirect_internal(
403+
self, url: str, fp: IO[bytes], errcode: int, errmsg: str, headers: HTTPMessage, data: ReadableBuffer | None
404+
) -> _UrlopenRet | None: ... # undocumented
405+
def retry_http_basic_auth(
406+
self, url: str, realm: str, data: ReadableBuffer | None = None
407+
) -> _UrlopenRet | None: ... # undocumented
408+
def retry_https_basic_auth(
409+
self, url: str, realm: str, data: ReadableBuffer | None = None
410+
) -> _UrlopenRet | None: ... # undocumented
411+
def retry_proxy_http_basic_auth(
412+
self, url: str, realm: str, data: ReadableBuffer | None = None
413+
) -> _UrlopenRet | None: ... # undocumented
414+
def retry_proxy_https_basic_auth(
415+
self, url: str, realm: str, data: ReadableBuffer | None = None
416+
) -> _UrlopenRet | None: ... # undocumented

stubs/six/six/moves/urllib/request.pyi

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import sys
2+
13
# Stubs for six.moves.urllib.request
24
#
35
# Note: Commented out items means they weren't implemented at the time.
@@ -8,7 +10,6 @@ from urllib.request import (
810
AbstractDigestAuthHandler as AbstractDigestAuthHandler,
911
BaseHandler as BaseHandler,
1012
CacheFTPHandler as CacheFTPHandler,
11-
FancyURLopener as FancyURLopener,
1213
FileHandler as FileHandler,
1314
FTPHandler as FTPHandler,
1415
HTTPBasicAuthHandler as HTTPBasicAuthHandler,
@@ -27,7 +28,6 @@ from urllib.request import (
2728
ProxyHandler as ProxyHandler,
2829
Request as Request,
2930
UnknownHandler as UnknownHandler,
30-
URLopener as URLopener,
3131
build_opener as build_opener,
3232
getproxies as getproxies,
3333
install_opener as install_opener,
@@ -39,3 +39,6 @@ from urllib.request import (
3939
urlopen as urlopen,
4040
urlretrieve as urlretrieve,
4141
)
42+
43+
if sys.version_info < (3, 14):
44+
from urllib.request import FancyURLopener as FancyURLopener, URLopener as URLopener

0 commit comments

Comments
 (0)