8000 bpo-12707: deprecate info(), geturl(), getcode() methods in favor of headers, url, and status properties for HTTPResponse and addinfourl by epicfaace · Pull Request #11447 · python/cpython · GitHub
[go: up one dir, main page]

Skip to content

bpo-12707: deprecate info(), geturl(), getcode() methods in favor of headers, url, and status properties for HTTPResponse and 8000 addinfourl #11447

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 31 commits into from
Sep 13, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
18a7eac
bpo-12707: deprecate info(), geturl(), getcode() from HTTPResponse an…
epicfaace Jan 6, 2019
2e93da4
bpo-12707: rename 'code' attribute to 'status'
epicfaace Jan 6, 2019
2db7e1f
bpo-12707: Document properties and deprecation of methods
epicfaace Jan 6, 2019
beadb34
bpo-21257: remove deprecation warnings
epicfaace Jan 6, 2019
2a16f9b
bpo-21257: fix whitespace
epicfaace Jan 6, 2019
f07f456
bpo-12707: remove deprecation warnings from doc
epicfaace Jan 6, 2019
5640148
bpo-12707: remove deprecation warning for addurlinfo.getstatus() in docs
epicfaace Jan 6, 2019
51cd8ad
bpo-12707: rename code to status in test
epicfaace Jan 7, 2019
c199098
bpo-12707: rename info to headers in tests
epicfaace Jan 7, 2019
58ced25
Apply suggestions from code review
eamanu Jan 7, 2019
13d373f
bpo-12707: Add links to doc
epicfaace Jan 7, 2019
357c8b4
bpo-12707 merge changes
epicfaace Jan 7, 2019
b99fb9f
bpo-12707: remove empty line
epicfaace Jan 7, 2019
1cf719c
bpo-12707: fix typos
epicfaace Jan 9, 2019
2c3a63f
bpo-12707: add versionadded directive
epicfaace Jan 9, 2019
c57eb8c
bpo-12707: recommendation to use addinfourl.status instead of .code
epicfaace Jan 9, 2019
2174ea5
Update Doc/library/urllib.request.rst
merwok Jan 9, 2019
47f1656
bpo-12707: use email.message.EmailMessage
epicfaace Jan 9, 2019
10d4720
bpo-12707: clean up wording for headers
epicfaace Jan 9, 2019
1a36dfc
Merge branch 'bpo-12707' of https://github.com/epicfaace/cpython into…
epicfaace Jan 9, 2019
c0e78bc
bpo-12707: re-add deprecation wording in doc
epicfaace Jan 11, 2019
febc206
bpo-12707: Separate tests for new and old attributes
epicfaace Jan 11, 2019
73a5a9a
Update Lib/urllib/request.py
merwok Jan 15, 2019
1f8b27b
bpo-12707: fix indentation and formatting
epicfaace Jan 15, 2019
ac31a4a
Merge branch 'bpo-12707' of https://github.com/epicfaace/cpython into…
epicfaace Jan 15, 2019
c9e8110
bpo-12707: fix indentation
epicfaace Jan 15, 2019
61385d8
bpo-12707: remove reST from docstring
epicfaace Jan 15, 2019
2ee88dd
📜🤖 Added by blurb_it.
blurb-it[bot] Aug 27, 2019
d7575f0
Make NEWS more clear
epicfaace Sep 13, 2019
628c2f0
add Deprecated warnings and update versionadded
epicfaace Sep 13, 2019
5f5b2f9
Fix the call of the 'deprecated' directive
matrixise Sep 13, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions Doc/library/http.client.rst
Original file line number Diff line number Diff line change
Expand Up @@ -460,6 +460,14 @@ statement.

HTTP protocol version used by server. 10 for HTTP/1.0, 11 for HTTP/1.1.

.. attribute:: HTTPResponse.url

URL of the resource retrieved, commonly used to determine if a redirect was followed.

.. attribute:: HTTPResponse.headers

Headers of the response in the form of an :class:`email.message.EmailMessage` instance.

.. attribute:: HTTPResponse.status

Status code returned by server.
Expand All @@ -477,6 +485,21 @@ statement.

Is ``True`` if the stream is closed.

.. method:: HTTPResponse.geturl()

.. deprecated:: 3.9
Deprecated in favor of :attr:`~HTTPResponse.url`.

.. method:: HTTPResponse.info()

.. deprecated:: 3.9
Deprecated in favor of :attr:`~HTTPResponse.headers`.

.. method:: HTTPResponse.getstatus()

.. deprecated:: 3.9
Deprecated in favor of :attr:`~HTTPResponse.status`.

Examples
--------

Expand Down
55 changes: 40 additions & 15 deletions Doc/library/urllib.request.rst
Original file line number Diff line number Diff line change
Expand Up @@ -55,16 +55,8 @@ The :mod:`urllib.request` module defines the following functions:
The *cadefault* parameter is ignored.

This function always returns an object which can work as a
:term:`context manager` and has methods such as

* :meth:`~urllib.response.addinfourl.geturl` --- return the URL of the resource retrieved,
commonly used to determine if a redirect was followed

* :meth:`~urllib.response.addinfourl.info` --- return the meta-information of the page, such as headers,
in the form of an :func:`email.message_from_string` instance (see
`Quick Reference to HTTP Headers <http://jkorpela.fi/http.html>`_)

* :meth:`~urllib.response.addinfourl.getcode` -- return the HTTP status code of the response.
:term:`context manager` and has the properties *url*, *headers*, and *status*.
See :class:`urllib.response.addinfourl` for more detail on these properties.

For HTTP and HTTPS URLs, this function returns a
:class:`http.client.HTTPResponse` object slightly modified. In addition
Expand Down Expand Up @@ -1557,9 +1549,42 @@ some point in the future.
:synopsis: Response classes used by urllib.

The :mod:`urllib.response` module defines functions and classes which define a
minimal file like interface, including ``read()`` and ``readline()``. The
typical response object is an addinfourl instance, which defines an ``info()``
method and that returns headers and a ``geturl()`` method that returns the url.
Functions defined by this module are used internally by the
:mod:`urllib.request` module.
minimal file-like interface, including ``read()`` and ``readline()``.
Functions defined by this module are used internally by the :mod:`urllib.request` module.
The typical response object is a :class:`urllib.response.addinfourl` instance:

.. class:: addinfourl

.. attribute:: url

URL of the resource retrieved, commonly used to determine if a redirect was followed.

.. attribute:: headers

Returns the headers of the response in the form of an :class:`~email.message.EmailMessage` instance.

.. attribute:: status

.. versionadded:: 3.9

Status code returned by server.

.. method:: geturl()

.. deprecated:: 3.9
Deprecated in favor of :attr:`~addinfourl.url`.

.. method:: info()

.. deprecated:: 3 8000 .9
Deprecated in favor of :attr:`~addinfourl.headers`.

.. attribute:: code

.. deprecated:: 3.9
Deprecated in favor of :attr:`~addinfourl.status`.

.. method:: getstatus()

.. deprecated:: 3.9
Deprecated in favor of :attr:`~addinfourl.status`.
9 changes: 9 additions & 0 deletions Lib/test/test_urllib.py
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,15 @@ def test_close(self):
# by the tearDown() method for the test
self.returned_obj.close()

def test_headers(self):
self.assertIsInstance(self.returned_obj.headers, email.message.Message)

def test_url(self):
self.assertEqual(self.returned_obj.url, self.pathname)

def test_status(self):
self.assertIsNone(self.returned_obj.status)

def test_info(self):
self.assertIsInstance(self.returned_obj.info(), email.message.Message)

Expand Down
4 changes: 4 additions & 0 deletions Lib/test/test_urllib_response.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ def closehook():
def test_addinfo(self):
info = urllib.response.addinfo(self.fp, self.test_headers)
self.assertEqual(info.info(), self.test_headers)
self.assertEqual(info.headers, self.test_headers)

def test_addinfourl(self):
url = "http://www.python.org"
Expand All @@ -51,6 +52,9 @@ def test_addinfourl(self):
self.assertEqual(infourl.info(), self.test_headers)
self.assertEqual(infourl.geturl(), url)
self.assertEqual(infourl.getcode(), code)
self.assertEqual(infourl.headers, self.test_headers)
self.assertEqual(infourl.url, url)
self.assertEqual(infourl.status, code)

def tearDown(self):
self.sock.close()
Expand Down
14 changes: 3 additions & 11 deletions Lib/urllib/request.py
Original file line number Diff line number Diff line change
Expand Up @@ -163,18 +163,10 @@ def urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT,

The *cadefault* parameter is ignored.

This function always returns an object which can work as a context
manager and has methods such as

* geturl() - return the URL of the resource retrieved, commonly used to
determine if a redirect was followed

* info() - return the meta-information of the page, such as headers, in the
form of an email.message_from_string() instance (see Quick Reference to
HTTP Headers)

* getcode() - return the HTTP status code of the response. Raises URLError
on errors.
This function always returns an object which can work as a
context manager and has the properties url, headers, and status.
See urllib.response.addinfourl for more detail on these properties.

For HTTP and HTTPS URLs, this function returns a http.client.HTTPResponse
object slightly modified. In addition to the three new methods above, the
Expand Down
4 changes: 4 additions & 0 deletions Lib/urllib/response.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,10 @@ def __init__(self, fp, headers, url, code=None):
self.url = url
self.code = code

@property
def status(self):
return self.code

def getcode(self):
return self.code

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Deprecate info(), geturl(), getcode() methods in favor of the headers, url, and status properties, respectively, for HTTPResponse and addinfourl. Also deprecate the code attribute of addinfourl in favor of the status attribute. Patch by Ashwin Ramaswami
0