From 75f02df949e6ca597f22b25cb1be310c9fb7e812 Mon Sep 17 00:00:00 2001 From: Dong-hee Na Date: Fri, 10 Jan 2020 23:27:45 +0900 Subject: [PATCH 1/3] nntplib.NNTP/NNTP_SSL refactoring --- Lib/nntplib.py | 42 +++++++++++++++++++----------------------- 1 file changed, 19 insertions(+), 23 deletions(-) diff --git a/Lib/nntplib.py b/Lib/nntplib.py index 9036f361b5fb6b9..1262580b3118fc8 100644 --- a/Lib/nntplib.py +++ b/Lib/nntplib.py @@ -1042,13 +1042,11 @@ def __init__(self, host, port=NNTP_PORT, user=None, password=None, """ self.host = host self.port = port - sys.audit("nntplib.connect", self, host, port) - self.sock = socket.create_connection((host, port), timeout) + self.sock = self._create_socket(timeout) file = None try: file = self.sock.makefile("rwb") - _NNTPBase.__init__(self, file, host, - readermode, timeout) + super().__init__(file, host, readermode, timeout) if user or usenetrc: self.login(user, password, usenetrc) except: @@ -1057,15 +1055,21 @@ def __init__(self, host, port=NNTP_PORT, user=None, password=None, self.sock.close() raise + def _create_socket(self, timeout): + if timeout is not None and not timeout: + raise ValueError('Non-blocking socket (timeout=0) is not supported') + sys.audit("nntplib.connect", self, self.host, self.port) + return socket.create_connection((self.host, self.port), timeout) + def _close(self): try: - _NNTPBase._close(self) + super()._close() finally: self.sock.close() if _have_ssl: - class NNTP_SSL(_NNTPBase): + class NNTP_SSL(NNTP): def __init__(self, host, port=NNTP_SSL_PORT, user=None, password=None, ssl_context=None, @@ -1074,27 +1078,19 @@ def __init__(self, host, port=NNTP_SSL_PORT, """This works identically to NNTP.__init__, except for the change in default port and the `ssl_context` argument for SSL connections. """ - sys.audit("nntplib.connect", self, host, port) - self.sock = socket.create_connection((host, port), timeout) - file = None + self.ssl_context = ssl_context + super().__init__(host, port, user, password, readermode, + usenetrc, timeout) + + def _create_socket(self, timeout): + self.sock = super()._create_socket(timeout) try: - self.sock = _encrypt_on(self.sock, ssl_context, host) - file = self.sock.makefile("rwb") - _NNTPBase.__init__(self, file, host, - readermode=readermode, timeout=timeout) - if user or usenetrc: - self.login(user, password, usenetrc) + self.sock = _encrypt_on(self.sock, self.ssl_context, self.host) except: - if file: - file.close() self.sock.close() raise - - def _close(self): - try: - _NNTPBase._close(self) - finally: - self.sock.close() + else: + return self.sock __all__.append("NNTP_SSL") From 99033c4f8c43a0deb7f9b5954f56ea1fdee35d51 Mon Sep 17 00:00:00 2001 From: Dong-hee Na Date: Sat, 11 Jan 2020 01:59:23 +0900 Subject: [PATCH 2/3] bbpo-39259: Revert timeout check logic --- Lib/nntplib.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/Lib/nntplib.py b/Lib/nntplib.py index 1262580b3118fc8..21813c16c537fc3 100644 --- a/Lib/nntplib.py +++ b/Lib/nntplib.py @@ -1056,8 +1056,6 @@ def __init__(self, host, port=NNTP_PORT, user=None, password=None, raise def _create_socket(self, timeout): - if timeout is not None and not timeout: - raise ValueError('Non-blocking socket (timeout=0) is not supported') sys.audit("nntplib.connect", self, self.host, self.port) return socket.create_connection((self.host, self.port), timeout) From 4f65135e6d0cf4e465e9a498f41ecdfa6d309b44 Mon Sep 17 00:00:00 2001 From: Dong-hee Na Date: Sat, 11 Jan 2020 11:45:15 +0900 Subject: [PATCH 3/3] bpo-39259: Apply code review --- Lib/nntplib.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Lib/nntplib.py b/Lib/nntplib.py index 21813c16c537fc3..0ab51853b52fdcb 100644 --- a/Lib/nntplib.py +++ b/Lib/nntplib.py @@ -1081,14 +1081,14 @@ def __init__(self, host, port=NNTP_SSL_PORT, usenetrc, timeout) def _create_socket(self, timeout): - self.sock = super()._create_socket(timeout) + sock = super()._create_socket(timeout) try: - self.sock = _encrypt_on(self.sock, self.ssl_context, self.host) + sock = _encrypt_on(sock, self.ssl_context, self.host) except: - self.sock.close() + sock.close() raise else: - return self.sock + return sock __all__.append("NNTP_SSL")