From 4f7766585d899cc3b6502355ad4c93d8ca18f093 Mon Sep 17 00:00:00 2001 From: "Paul J. Dorn" Date: Sat, 9 Dec 2023 04:08:51 +0100 Subject: [PATCH] Python 3.3+: replace deprecated aliases since 3.3: EnvironmentError, IOError, socket.error and select.error are merged into IOError. They may now return a more specific subclass - which this commit does not utilize yet. --- examples/when_ready.conf.py | 2 +- gunicorn/arbiter.py | 4 ++-- gunicorn/debug.py | 2 +- gunicorn/http/message.py | 4 ++-- gunicorn/pidfile.py | 2 +- gunicorn/sock.py | 6 +++--- gunicorn/util.py | 8 ++++---- gunicorn/workers/base_async.py | 8 ++++---- gunicorn/workers/gthread.py | 10 +++++----- gunicorn/workers/sync.py | 12 ++++++------ 10 files changed, 29 insertions(+), 29 deletions(-) diff --git a/examples/when_ready.conf.py b/examples/when_ready.conf.py index 1531ec14a..dc8480ef6 100644 --- a/examples/when_ready.conf.py +++ b/examples/when_ready.conf.py @@ -17,7 +17,7 @@ def __init__(self, server, max_mem): def memory_usage(self, pid): try: out = commands.getoutput("ps -o rss -p %s" % pid) - except IOError: + except OSError: return -1 used_mem = sum(int(x) for x in out.split('\n')[1:]) return used_mem diff --git a/gunicorn/arbiter.py b/gunicorn/arbiter.py index d0a0a582e..e84dd02f8 100644 --- a/gunicorn/arbiter.py +++ b/gunicorn/arbiter.py @@ -332,7 +332,7 @@ def wakeup(self): """ try: os.write(self.PIPE[1], b'.') - except IOError as e: + except OSError as e: if e.errno not in [errno.EAGAIN, errno.EINTR]: raise @@ -361,7 +361,7 @@ def sleep(self): return while os.read(self.PIPE[0], 1): pass - except (select.error, OSError) as e: + except OSError as e: # TODO: select.error is a subclass of OSError since Python 3.3. error_number = getattr(e, 'errno', e.args[0]) if error_number not in [errno.EAGAIN, errno.EINTR]: diff --git a/gunicorn/debug.py b/gunicorn/debug.py index 7db826394..5fae0b4dd 100644 --- a/gunicorn/debug.py +++ b/gunicorn/debug.py @@ -36,7 +36,7 @@ def __call__(self, frame, event, arg): try: src = inspect.getsourcelines(frame) line = src[lineno] - except IOError: + except OSError: line = 'Unknown code named [%s]. VM instruction #%d' % ( frame.f_code.co_name, frame.f_lasti) if self.trace_names is None or name in self.trace_names: diff --git a/gunicorn/http/message.py b/gunicorn/http/message.py index 1e1d8d9e1..a39d84929 100644 --- a/gunicorn/http/message.py +++ b/gunicorn/http/message.py @@ -372,13 +372,13 @@ def parse_proxy_protocol(self, line): try: socket.inet_pton(socket.AF_INET, s_addr) socket.inet_pton(socket.AF_INET, d_addr) - except socket.error: + except OSError: raise InvalidProxyLine(line) elif proto == "TCP6": try: socket.inet_pton(socket.AF_INET6, s_addr) socket.inet_pton(socket.AF_INET6, d_addr) - except socket.error: + except OSError: raise InvalidProxyLine(line) try: diff --git a/gunicorn/pidfile.py b/gunicorn/pidfile.py index c1dd1cb97..b171f7d91 100644 --- a/gunicorn/pidfile.py +++ b/gunicorn/pidfile.py @@ -79,7 +79,7 @@ def validate(self): if e.args[0] == errno.ESRCH: return raise - except IOError as e: + except OSError as e: if e.args[0] == errno.ENOENT: return raise diff --git a/gunicorn/sock.py b/gunicorn/sock.py index 751e9c7ae..c62298554 100644 --- a/gunicorn/sock.py +++ b/gunicorn/sock.py @@ -42,7 +42,7 @@ def set_options(self, sock, bound=False): and hasattr(socket, 'SO_REUSEPORT')): # pragma: no cover try: sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1) - except socket.error as err: + except OSError as err: if err.errno not in (errno.ENOPROTOOPT, errno.EINVAL): raise if not bound: @@ -65,7 +65,7 @@ def close(self): try: self.sock.close() - except socket.error as e: + except OSError as e: self.log.info("Error while closing socket %s", str(e)) self.sock = None @@ -182,7 +182,7 @@ def create_sockets(conf, log, fds=None): for i in range(5): try: sock = sock_type(addr, conf, log) - except socket.error as e: + except OSError as e: if e.args[0] == errno.EADDRINUSE: log.error("Connection in use: %s", str(addr)) if e.args[0] == errno.EADDRNOTAVAIL: diff --git a/gunicorn/util.py b/gunicorn/util.py index a5ee04a34..ecd817472 100644 --- a/gunicorn/util.py +++ b/gunicorn/util.py @@ -216,7 +216,7 @@ def unlink(filename): def is_ipv6(addr): try: socket.inet_pton(socket.AF_INET6, addr) - except socket.error: # not a valid address + except OSError: # not a valid address return False except ValueError: # ipv6 not supported on this platform return False @@ -268,7 +268,7 @@ def set_non_blocking(fd): def close(sock): try: sock.close() - except socket.error: + except OSError: pass @@ -565,7 +565,7 @@ def check_is_writable(path): try: with open(path, 'a') as f: f.close() - except IOError as e: + except OSError as e: raise RuntimeError("Error: '%s' isn't writable [%r]" % (path, e)) @@ -586,7 +586,7 @@ def has_fileno(obj): # check BytesIO case and maybe others try: obj.fileno() - except (AttributeError, IOError, io.UnsupportedOperation): + except (AttributeError, OSError, io.UnsupportedOperation): return False return True diff --git a/gunicorn/workers/base_async.py b/gunicorn/workers/base_async.py index 4ac3d7232..9466d6aaa 100644 --- a/gunicorn/workers/base_async.py +++ b/gunicorn/workers/base_async.py @@ -59,7 +59,7 @@ def handle(self, listener, client, addr): except ssl.SSLError: # pass to next try-except level util.reraise(*sys.exc_info()) - except EnvironmentError: + except OSError: # pass to next try-except level util.reraise(*sys.exc_info()) except Exception as e: @@ -71,7 +71,7 @@ def handle(self, listener, client, addr): else: self.log.debug("Error processing SSL request.") self.handle_error(req, client, addr, e) - except EnvironmentError as e: + except OSError as e: if e.errno not in (errno.EPIPE, errno.ECONNRESET, errno.ENOTCONN): self.log.exception("Socket error processing request.") else: @@ -123,7 +123,7 @@ def handle_request(self, listener_name, req, sock, addr): raise StopIteration() except StopIteration: raise - except EnvironmentError: + except OSError: # If the original exception was a socket.error we delegate # handling it to the caller (where handle() might ignore it) util.reraise(*sys.exc_info()) @@ -135,7 +135,7 @@ def handle_request(self, listener_name, req, sock, addr): try: sock.shutdown(socket.SHUT_RDWR) sock.close() - except EnvironmentError: + except OSError: pass raise StopIteration() raise diff --git a/gunicorn/workers/gthread.py b/gunicorn/workers/gthread.py index 9edb98b2c..7a23228cd 100644 --- a/gunicorn/workers/gthread.py +++ b/gunicorn/workers/gthread.py @@ -127,7 +127,7 @@ def accept(self, server, listener): with self._lock: self.poller.register(conn.sock, selectors.EVENT_READ, partial(self.on_client_socket_readable, conn)) - except EnvironmentError as e: + except OSError as e: if e.errno not in (errno.EAGAIN, errno.ECONNABORTED, errno.EWOULDBLOCK): raise @@ -170,7 +170,7 @@ def murder_keepalived(self): with self._lock: try: self.poller.unregister(conn.sock) - except EnvironmentError as e: + except OSError as e: if e.errno != errno.EBADF: raise except KeyError: @@ -294,7 +294,7 @@ def handle(self, conn): self.log.debug("Error processing SSL request.") self.handle_error(req, conn.sock, conn.client, e) - except EnvironmentError as e: + except OSError as e: if e.errno not in (errno.EPIPE, errno.ECONNRESET, errno.ENOTCONN): self.log.exception("Socket error processing request.") else: @@ -348,7 +348,7 @@ def handle_request(self, req, conn): if resp.should_close(): self.log.debug("Closing connection.") return False - except EnvironmentError: + except OSError: # pass to next try-except level util.reraise(*sys.exc_info()) except Exception: @@ -359,7 +359,7 @@ def handle_request(self, req, conn): try: conn.sock.shutdown(socket.SHUT_RDWR) conn.sock.close() - except EnvironmentError: + except OSError: pass raise StopIteration() raise diff --git a/gunicorn/workers/sync.py b/gunicorn/workers/sync.py index 40eef4e1e..4c029f912 100644 --- a/gunicorn/workers/sync.py +++ b/gunicorn/workers/sync.py @@ -39,7 +39,7 @@ def wait(self, timeout): os.read(self.PIPE[0], 1) return ret[0] - except select.error as e: + except OSError as e: if e.args[0] == errno.EINTR: return self.sockets if e.args[0] == errno.EBADF: @@ -72,7 +72,7 @@ def run_for_one(self, timeout): # process. continue - except EnvironmentError as e: + except OSError as e: if e.errno not in (errno.EAGAIN, errno.ECONNABORTED, errno.EWOULDBLOCK): raise @@ -101,7 +101,7 @@ def run_for_multiple(self, timeout): try: self.accept(listener) - except EnvironmentError as e: + except OSError as e: if e.errno not in (errno.EAGAIN, errno.ECONNABORTED, errno.EWOULDBLOCK): raise @@ -143,7 +143,7 @@ def handle(self, listener, client, addr): else: self.log.debug("Error processing SSL request.") self.handle_error(req, client, addr, e) - except EnvironmentError as e: + except OSError as e: if e.errno not in (errno.EPIPE, errno.ECONNRESET, errno.ENOTCONN): self.log.exception("Socket error processing request.") else: @@ -187,7 +187,7 @@ def handle_request(self, listener, req, client, addr): self.log.access(resp, req, environ, request_time) if hasattr(respiter, "close"): respiter.close() - except EnvironmentError: + except OSError: # pass to next try-except level util.reraise(*sys.exc_info()) except Exception: @@ -198,7 +198,7 @@ def handle_request(self, listener, req, client, addr): try: client.shutdown(socket.SHUT_RDWR) client.close() - except EnvironmentError: + except OSError: pass raise StopIteration() raise