From e86209c998d58602497050a82fb4bf5e814bf213 Mon Sep 17 00:00:00 2001 From: Jonathan Creasy Date: Tue, 20 Oct 2020 08:13:26 -0400 Subject: [PATCH] Fixed collections.Callable Python 3.9 issue (#443) * Fixed collections.Callable Python 3.9 issue * Fixing lint issue * Made it possible to remove the target info tags * Added missing dependancy --- tcollector.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/tcollector.py b/tcollector.py index 56bcc707..588c7e48 100755 --- a/tcollector.py +++ b/tcollector.py @@ -37,6 +37,7 @@ import base64 from logging.handlers import RotatingFileHandler from optparse import OptionParser + import collections PY3 = sys.version_info[0] > 2 @@ -46,10 +47,12 @@ from urllib.request import Request, urlopen # pylint: disable=maybe-no-member,no-name-in-module,import-error from urllib.error import HTTPError, URLError # pylint: disable=maybe-no-member,no-name-in-module,import-error from http.server import HTTPServer, BaseHTTPRequestHandler # pylint: disable=maybe-no-member,no-name-in-module,import-error + from collections.abc import Callable # pylint: disable=maybe-no-member,no-name-in-module,import-error else: from Queue import Queue, Empty, Full # pylint: disable=maybe-no-member,no-name-in-module,import-error from urllib2 import Request, urlopen, HTTPError, URLError # pylint: disable=maybe-no-member,no-name-in-module,import-error from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler # pylint: disable=maybe-no-member,no-name-in-module,import-error + from collections import Callable # pylint: disable=maybe-no-member,no-name-in-module,import-error # global variables. COLLECTORS = {} @@ -156,6 +159,9 @@ def read(self): except IOError as exc: if exc.errno != errno.EAGAIN: raise + except TypeError as exc: + # Sometimes the underlying buffer.read() returns None + LOG.debug("Recieved None while trying to read stderr") except: LOG.exception('uncaught exception in stderr read') @@ -174,6 +180,9 @@ def read(self): # sometimes the process goes away in another thread and we don't # have it anymore, so log an error and bail LOG.exception('caught exception, collector process went away while reading stdout') + except TypeError as exc: + # Sometimes the underlying buffer.read() returns None + LOG.debug("Recieved None while trying to read stdout") except: LOG.exception('uncaught exception in stdout read') return @@ -1306,7 +1315,7 @@ def load_config_module(name, options, tags): else: module = reload(name) # pylint: disable=undefined-variable onload = module.__dict__.get('onload') - if isinstance(onload, collections.Callable): + if isinstance(onload, Callable): try: onload(options, tags) except: