Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

gh-145651: Addhttp.client.{HTTPConnection,HTTPResponse}.__repr__#145653

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 ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Open
JackDanger wants to merge5 commits intopython:main
base:main
Choose a base branch
Loading
fromJackDanger:http-client-repr
Open
Show file tree
Hide file tree
Changes fromall commits
Commits
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
12 changes: 12 additions & 0 deletionsLib/http/client.py
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -294,6 +294,11 @@ def __init__(self, sock, debuglevel=0, method=None, url=None):
self.length = _UNKNOWN # number of bytes left in response
self.will_close = _UNKNOWN # conn will close at end of response

def __repr__(self):
if self.status is _UNKNOWN:
return f'<{self.__class__.__name__}>'
return f'<{self.__class__.__name__} [{self.status} {self.reason}]>'

def _read_status(self):
line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
if len(line) > _MAXLINE:
Expand DownExpand Up@@ -911,6 +916,13 @@ def __init__(self, host, port=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT,
# tests to replace it with a suitable mockup
self._create_connection = socket.create_connection

def __repr__(self):
if self.port is None:
port = self.default_port
else:
port = self.port
return f'<{self.__class__.__name__} {self.host}:{port}>'

def set_tunnel(self, host, port=None, headers=None):
"""Set up host and port for HTTP CONNECT tunnelling.

Expand Down
42 changes: 42 additions & 0 deletionsLib/test/test_httplib.py
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -2363,6 +2363,48 @@ def test_getting_header_defaultint(self):
header = self.resp.getheader('No-Such-Header',default=42)
self.assertEqual(header, 42)

class ReprTest(TestCase):

def test_http_connection_repr_default_port(self):
conn = client.HTTPConnection('example.com')
self.assertEqual(repr(conn), '<HTTPConnection example.com:80>')

def test_http_connection_repr_explicit_port(self):
conn = client.HTTPConnection('example.com', 8080)
self.assertEqual(repr(conn), '<HTTPConnection example.com:8080>')

@unittest.skipUnless(hasattr(client, 'HTTPSConnection'),
'ssl support required')
def test_https_connection_repr(self):
conn = client.HTTPSConnection('example.com')
self.assertEqual(repr(conn), '<HTTPSConnection example.com:443>')

@unittest.skipUnless(hasattr(client, 'HTTPSConnection'),
'ssl support required')
def test_https_connection_repr_explicit_port(self):
conn = client.HTTPSConnection('example.com', 8443)
self.assertEqual(repr(conn), '<HTTPSConnection example.com:8443>')

def test_http_response_repr_before_read(self):
sock = FakeSocket(b'HTTP/1.1 200 OK\r\n\r\n')
resp = client.HTTPResponse(sock)
self.assertEqual(repr(resp), '<HTTPResponse>')
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

Would this representation really make sense? it looks a bit... invalid. Maybe<HTTPResponse (notset)> or something like this ("notset" is not the best word though; what doesrequests and httpx do for such cases?)


def test_http_response_repr_after_read(self):
body = b'HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n'
sock = FakeSocket(body)
resp = client.HTTPResponse(sock)
resp.begin()
self.assertEqual(repr(resp), '<HTTPResponse [200 OK]>')
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

Is the representation actually the same as for httpx/requests?


def test_http_response_repr_not_found(self):
body = b'HTTP/1.1 404 Not Found\r\nContent-Length: 0\r\n\r\n'
sock = FakeSocket(body)
resp = client.HTTPResponse(sock)
resp.begin()
self.assertEqual(repr(resp), '<HTTPResponse [404 Not Found]>')


class TunnelTests(TestCase):
def setUp(self):
response_text = (
Expand Down
View file
Open in desktop
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
Add :meth:`~object.__repr__` support to :class:`http.client.HTTPConnection` and
:class:`http.client.HTTPResponse`, showing host/port and status/reason
respectively.
Loading

[8]ページ先頭

©2009-2026 Movatter.jp