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 1531ec14..dc8480ef 100644 --- a/examples/when_ready.conf.py +++ b/examples/when_ready.conf.py @@ -17,7 +17,7 @@ class MemoryWatch(threading.Thread): 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 d0a0a582..e84dd02f 100644 --- a/gunicorn/arbiter.py +++ b/gunicorn/arbiter.py @@ -332,7 +332,7 @@ class Arbiter: """ 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 @@ class Arbiter: 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 7db82639..5fae0b4d 100644 --- a/gunicorn/debug.py +++ b/gunicorn/debug.py @@ -36,7 +36,7 @@ class Spew: 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 1e1d8d9e..a39d8492 100644 --- a/gunicorn/http/message.py +++ b/gunicorn/http/message.py @@ -372,13 +372,13 @@ class Request(Message): 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 c1dd1cb9..b171f7d9 100644 --- a/gunicorn/pidfile.py +++ b/gunicorn/pidfile.py @@ -79,7 +79,7 @@ class Pidfile: 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 751e9c7a..c6229855 100644 --- a/gunicorn/sock.py +++ b/gunicorn/sock.py @@ -42,7 +42,7 @@ class BaseSocket: 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 @@ class BaseSocket: 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 a5ee04a3..ecd81747 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 4ac3d723..9466d6aa 100644 --- a/gunicorn/workers/base_async.py +++ b/gunicorn/workers/base_async.py @@ -59,7 +59,7 @@ class AsyncWorker(base.Worker): 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 @@ class AsyncWorker(base.Worker): 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 @@ class AsyncWorker(base.Worker): 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 @@ class AsyncWorker(base.Worker): 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 9edb98b2..7a23228c 100644 --- a/gunicorn/workers/gthread.py +++ b/gunicorn/workers/gthread.py @@ -127,7 +127,7 @@ class ThreadWorker(base.Worker): 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 @@ class ThreadWorker(base.Worker): 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 @@ class ThreadWorker(base.Worker): 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 @@ class ThreadWorker(base.Worker): 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 @@ class ThreadWorker(base.Worker): 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 40eef4e1..4c029f91 100644 --- a/gunicorn/workers/sync.py +++ b/gunicorn/workers/sync.py @@ -39,7 +39,7 @@ class SyncWorker(base.Worker): 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 @@ class SyncWorker(base.Worker): # 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 @@ class SyncWorker(base.Worker): 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 @@ class SyncWorker(base.Worker): 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 @@ class SyncWorker(base.Worker): 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 @@ class SyncWorker(base.Worker): try: client.shutdown(socket.SHUT_RDWR) client.close() - except EnvironmentError: + except OSError: pass raise StopIteration() raise