diff --git a/ansible_mitogen/connection.py b/ansible_mitogen/connection.py index 5b9ae70b..9afb3de0 100644 --- a/ansible_mitogen/connection.py +++ b/ansible_mitogen/connection.py @@ -43,11 +43,11 @@ import ansible.errors import ansible.plugins.connection import mitogen.core +import mitogen.parent +import mitogen.service import ansible_mitogen.mixins -import ansible_mitogen.parsing import ansible_mitogen.process -import ansible_mitogen.services import ansible_mitogen.target import ansible_mitogen.transport_config import ansible_mitogen.utils.unsafe diff --git a/ansible_mitogen/logging.py b/ansible_mitogen/logging.py index 4d5647a4..70a8f15f 100644 --- a/ansible_mitogen/logging.py +++ b/ansible_mitogen/logging.py @@ -34,7 +34,6 @@ import os import ansible.utils.display -import mitogen.core import mitogen.utils diff --git a/ansible_mitogen/planner.py b/ansible_mitogen/planner.py index b4c9d9b8..5d11de3e 100644 --- a/ansible_mitogen/planner.py +++ b/ansible_mitogen/planner.py @@ -50,6 +50,7 @@ import ansible.executor.module_common import mitogen.core import mitogen.select +import mitogen.service import ansible_mitogen.loaders import ansible_mitogen.parsing diff --git a/ansible_mitogen/plugins/connection/__init__.py b/ansible_mitogen/plugins/connection/__init__.py index e69de29b..3afb9a91 100644 --- a/ansible_mitogen/plugins/connection/__init__.py +++ b/ansible_mitogen/plugins/connection/__init__.py @@ -0,0 +1,11 @@ +# SPDX-FileCopyrightText: 2025 Mitogen authors +# SPDX-License-Identifier: BSD-3-Clause +# !mitogen: minify_safe + +import os +import sys + +try: + import ansible_mitogen +except ImportError: + sys.path.insert(0, os.path.abspath(os.path.join(__file__, '../../../..'))) diff --git a/ansible_mitogen/plugins/connection/mitogen_buildah.py b/ansible_mitogen/plugins/connection/mitogen_buildah.py index 10ab6b41..d6fbd6f8 100644 --- a/ansible_mitogen/plugins/connection/mitogen_buildah.py +++ b/ansible_mitogen/plugins/connection/mitogen_buildah.py @@ -29,16 +29,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import os.path -import sys - -try: - import ansible_mitogen -except ImportError: - base_dir = os.path.dirname(__file__) - sys.path.insert(0, os.path.abspath(os.path.join(base_dir, '../../..'))) - del base_dir - import ansible_mitogen.connection diff --git a/ansible_mitogen/plugins/connection/mitogen_doas.py b/ansible_mitogen/plugins/connection/mitogen_doas.py index 963ec597..ef52ea78 100644 --- a/ansible_mitogen/plugins/connection/mitogen_doas.py +++ b/ansible_mitogen/plugins/connection/mitogen_doas.py @@ -29,16 +29,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import os.path -import sys - -try: - import ansible_mitogen.connection -except ImportError: - base_dir = os.path.dirname(__file__) - sys.path.insert(0, os.path.abspath(os.path.join(base_dir, '../../..'))) - del base_dir - import ansible_mitogen.connection diff --git a/ansible_mitogen/plugins/connection/mitogen_docker.py b/ansible_mitogen/plugins/connection/mitogen_docker.py index e0dd2120..79555dc3 100644 --- a/ansible_mitogen/plugins/connection/mitogen_docker.py +++ b/ansible_mitogen/plugins/connection/mitogen_docker.py @@ -29,16 +29,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import os.path -import sys - -try: - import ansible_mitogen -except ImportError: - base_dir = os.path.dirname(__file__) - sys.path.insert(0, os.path.abspath(os.path.join(base_dir, '../../..'))) - del base_dir - import ansible_mitogen.connection diff --git a/ansible_mitogen/plugins/connection/mitogen_jail.py b/ansible_mitogen/plugins/connection/mitogen_jail.py index a432e17d..3877aad1 100644 --- a/ansible_mitogen/plugins/connection/mitogen_jail.py +++ b/ansible_mitogen/plugins/connection/mitogen_jail.py @@ -29,16 +29,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import os.path -import sys - -try: - import ansible_mitogen -except ImportError: - base_dir = os.path.dirname(__file__) - sys.path.insert(0, os.path.abspath(os.path.join(base_dir, '../../..'))) - del base_dir - import ansible_mitogen.connection diff --git a/ansible_mitogen/plugins/connection/mitogen_kubectl.py b/ansible_mitogen/plugins/connection/mitogen_kubectl.py index 33ae49e6..0a60b403 100644 --- a/ansible_mitogen/plugins/connection/mitogen_kubectl.py +++ b/ansible_mitogen/plugins/connection/mitogen_kubectl.py @@ -30,18 +30,8 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import os.path -import sys - import ansible.errors -try: - import ansible_mitogen -except ImportError: - base_dir = os.path.dirname(__file__) - sys.path.insert(0, os.path.abspath(os.path.join(base_dir, '../../..'))) - del base_dir - import ansible_mitogen.connection import ansible_mitogen.loaders diff --git a/ansible_mitogen/plugins/connection/mitogen_local.py b/ansible_mitogen/plugins/connection/mitogen_local.py index 2d1e7052..61c6b809 100644 --- a/ansible_mitogen/plugins/connection/mitogen_local.py +++ b/ansible_mitogen/plugins/connection/mitogen_local.py @@ -29,15 +29,7 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import os.path -import sys - -try: - import ansible_mitogen.connection -except ImportError: - base_dir = os.path.dirname(__file__) - sys.path.insert(0, os.path.abspath(os.path.join(base_dir, '../../..'))) - del base_dir +import os import ansible_mitogen.connection import ansible_mitogen.process diff --git a/ansible_mitogen/plugins/connection/mitogen_lxc.py b/ansible_mitogen/plugins/connection/mitogen_lxc.py index 8850b3d7..23f3c1f4 100644 --- a/ansible_mitogen/plugins/connection/mitogen_lxc.py +++ b/ansible_mitogen/plugins/connection/mitogen_lxc.py @@ -29,16 +29,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import os.path -import sys - -try: - import ansible_mitogen -except ImportError: - base_dir = os.path.dirname(__file__) - sys.path.insert(0, os.path.abspath(os.path.join(base_dir, '../../..'))) - del base_dir - import ansible_mitogen.connection diff --git a/ansible_mitogen/plugins/connection/mitogen_lxd.py b/ansible_mitogen/plugins/connection/mitogen_lxd.py index 25370ef5..9842b763 100644 --- a/ansible_mitogen/plugins/connection/mitogen_lxd.py +++ b/ansible_mitogen/plugins/connection/mitogen_lxd.py @@ -29,16 +29,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import os.path -import sys - -try: - import ansible_mitogen -except ImportError: - base_dir = os.path.dirname(__file__) - sys.path.insert(0, os.path.abspath(os.path.join(base_dir, '../../..'))) - del base_dir - import ansible_mitogen.connection diff --git a/ansible_mitogen/plugins/connection/mitogen_machinectl.py b/ansible_mitogen/plugins/connection/mitogen_machinectl.py index 1f538797..c531a772 100644 --- a/ansible_mitogen/plugins/connection/mitogen_machinectl.py +++ b/ansible_mitogen/plugins/connection/mitogen_machinectl.py @@ -29,16 +29,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import os.path -import sys - -try: - import ansible_mitogen.connection -except ImportError: - base_dir = os.path.dirname(__file__) - sys.path.insert(0, os.path.abspath(os.path.join(base_dir, '../../..'))) - del base_dir - import ansible_mitogen.connection diff --git a/ansible_mitogen/plugins/connection/mitogen_podman.py b/ansible_mitogen/plugins/connection/mitogen_podman.py index e423aac8..19008857 100644 --- a/ansible_mitogen/plugins/connection/mitogen_podman.py +++ b/ansible_mitogen/plugins/connection/mitogen_podman.py @@ -29,16 +29,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import os.path -import sys - -try: - import ansible_mitogen -except ImportError: - base_dir = os.path.dirname(__file__) - sys.path.insert(0, os.path.abspath(os.path.join(base_dir, '../../..'))) - del base_dir - import ansible_mitogen.connection diff --git a/ansible_mitogen/plugins/connection/mitogen_setns.py b/ansible_mitogen/plugins/connection/mitogen_setns.py index 4d70892f..fbb8cc70 100644 --- a/ansible_mitogen/plugins/connection/mitogen_setns.py +++ b/ansible_mitogen/plugins/connection/mitogen_setns.py @@ -29,16 +29,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import os.path -import sys - -try: - import ansible_mitogen.connection -except ImportError: - base_dir = os.path.dirname(__file__) - sys.path.insert(0, os.path.abspath(os.path.join(base_dir, '../../..'))) - del base_dir - import ansible_mitogen.connection diff --git a/ansible_mitogen/plugins/connection/mitogen_ssh.py b/ansible_mitogen/plugins/connection/mitogen_ssh.py index b953edba..3b1662da 100644 --- a/ansible_mitogen/plugins/connection/mitogen_ssh.py +++ b/ansible_mitogen/plugins/connection/mitogen_ssh.py @@ -29,9 +29,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import os.path -import sys - from ansible.plugins.connection.ssh import ( DOCUMENTATION as _ansible_ssh_DOCUMENTATION, ) @@ -47,12 +44,6 @@ DOCUMENTATION = """ options: """ + _ansible_ssh_DOCUMENTATION.partition('options:\n')[2] -try: - import ansible_mitogen -except ImportError: - base_dir = os.path.dirname(__file__) - sys.path.insert(0, os.path.abspath(os.path.join(base_dir, '../../..'))) - del base_dir import ansible_mitogen.connection import ansible_mitogen.loaders diff --git a/ansible_mitogen/plugins/connection/mitogen_su.py b/ansible_mitogen/plugins/connection/mitogen_su.py index 9395cc5f..c9dea2e9 100644 --- a/ansible_mitogen/plugins/connection/mitogen_su.py +++ b/ansible_mitogen/plugins/connection/mitogen_su.py @@ -29,16 +29,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import os.path -import sys - -try: - import ansible_mitogen.connection -except ImportError: - base_dir = os.path.dirname(__file__) - sys.path.insert(0, os.path.abspath(os.path.join(base_dir, '../../..'))) - del base_dir - import ansible_mitogen.connection diff --git a/ansible_mitogen/plugins/connection/mitogen_sudo.py b/ansible_mitogen/plugins/connection/mitogen_sudo.py index ef549428..fe560a68 100644 --- a/ansible_mitogen/plugins/connection/mitogen_sudo.py +++ b/ansible_mitogen/plugins/connection/mitogen_sudo.py @@ -29,16 +29,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import os.path -import sys - -try: - import ansible_mitogen.connection -except ImportError: - base_dir = os.path.dirname(__file__) - sys.path.insert(0, os.path.abspath(os.path.join(base_dir, '../../..'))) - del base_dir - import ansible_mitogen.connection diff --git a/ansible_mitogen/plugins/strategy/__init__.py b/ansible_mitogen/plugins/strategy/__init__.py index e69de29b..3afb9a91 100644 --- a/ansible_mitogen/plugins/strategy/__init__.py +++ b/ansible_mitogen/plugins/strategy/__init__.py @@ -0,0 +1,11 @@ +# SPDX-FileCopyrightText: 2025 Mitogen authors +# SPDX-License-Identifier: BSD-3-Clause +# !mitogen: minify_safe + +import os +import sys + +try: + import ansible_mitogen +except ImportError: + sys.path.insert(0, os.path.abspath(os.path.join(__file__, '../../../..'))) diff --git a/ansible_mitogen/plugins/strategy/mitogen.py b/ansible_mitogen/plugins/strategy/mitogen.py index abbe7672..95508f2d 100644 --- a/ansible_mitogen/plugins/strategy/mitogen.py +++ b/ansible_mitogen/plugins/strategy/mitogen.py @@ -29,8 +29,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import os.path -import sys # # This is not the real Strategy implementation module, it simply exists as a @@ -47,13 +45,6 @@ import sys # debuggers and isinstance() work predictably. # -BASE_DIR = os.path.abspath( - os.path.join(os.path.dirname(__file__), '../../..') -) - -if BASE_DIR not in sys.path: - sys.path.insert(0, BASE_DIR) - import ansible_mitogen.strategy import ansible.plugins.strategy.linear diff --git a/ansible_mitogen/plugins/strategy/mitogen_free.py b/ansible_mitogen/plugins/strategy/mitogen_free.py index 4f4e1f81..89fba1c9 100644 --- a/ansible_mitogen/plugins/strategy/mitogen_free.py +++ b/ansible_mitogen/plugins/strategy/mitogen_free.py @@ -29,8 +29,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import os.path -import sys # # This is not the real Strategy implementation module, it simply exists as a @@ -47,13 +45,6 @@ import sys # debuggers and isinstance() work predictably. # -BASE_DIR = os.path.abspath( - os.path.join(os.path.dirname(__file__), '../../..') -) - -if BASE_DIR not in sys.path: - sys.path.insert(0, BASE_DIR) - import ansible_mitogen.loaders import ansible_mitogen.strategy diff --git a/ansible_mitogen/plugins/strategy/mitogen_host_pinned.py b/ansible_mitogen/plugins/strategy/mitogen_host_pinned.py index c3396c5f..c130b720 100644 --- a/ansible_mitogen/plugins/strategy/mitogen_host_pinned.py +++ b/ansible_mitogen/plugins/strategy/mitogen_host_pinned.py @@ -29,8 +29,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import os.path -import sys # # This is not the real Strategy implementation module, it simply exists as a @@ -47,13 +45,6 @@ import sys # debuggers and isinstance() work predictably. # -BASE_DIR = os.path.abspath( - os.path.join(os.path.dirname(__file__), '../../..') -) - -if BASE_DIR not in sys.path: - sys.path.insert(0, BASE_DIR) - import ansible_mitogen.loaders import ansible_mitogen.strategy diff --git a/ansible_mitogen/plugins/strategy/mitogen_linear.py b/ansible_mitogen/plugins/strategy/mitogen_linear.py index b1b03aef..e103fa9c 100644 --- a/ansible_mitogen/plugins/strategy/mitogen_linear.py +++ b/ansible_mitogen/plugins/strategy/mitogen_linear.py @@ -29,8 +29,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import os.path -import sys # # This is not the real Strategy implementation module, it simply exists as a @@ -47,13 +45,6 @@ import sys # debuggers and isinstance() work predictably. # -BASE_DIR = os.path.abspath( - os.path.join(os.path.dirname(__file__), '../../..') -) - -if BASE_DIR not in sys.path: - sys.path.insert(0, BASE_DIR) - import ansible_mitogen.loaders import ansible_mitogen.strategy diff --git a/ansible_mitogen/strategy.py b/ansible_mitogen/strategy.py index 9408ca63..c0b2ef87 100644 --- a/ansible_mitogen/strategy.py +++ b/ansible_mitogen/strategy.py @@ -41,6 +41,7 @@ except ImportError: import mitogen.core import ansible_mitogen.affinity import ansible_mitogen.loaders +import ansible_mitogen.logging import ansible_mitogen.mixins import ansible_mitogen.process diff --git a/docs/changelog.rst b/docs/changelog.rst index 52c04f38..a3ffb89e 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -18,6 +18,16 @@ To avail of fixes in an unreleased version, please download a ZIP file `directly from GitHub `_. +v0.3.30 (2025-10-30) +-------------------- + +* :gh:issue:`1266` Import cleanups +* :gh:issue:`1266` :mod:`ansible_mitogen`: De-duplicate sys.path manipulations +* :gh:issue:`1344` Correct SPDX license declarations +* :gh:issue:`1344` Declare BSD-3-Clause SPDX license in package metadata +* :gh:issue:`1344` :mod:`mitogen`: Use :py:func:`logging.makeLogRecord` + + v0.3.29 (2025-09-18) -------------------- diff --git a/mitogen/__init__.py b/mitogen/__init__.py index 0a1e31dc..719108f7 100644 --- a/mitogen/__init__.py +++ b/mitogen/__init__.py @@ -35,7 +35,7 @@ be expected. On the slave, it is built dynamically during startup. #: Library version as a tuple. -__version__ = (0, 3, 29) +__version__ = (0, 3, 30) #: This is :data:`False` in slave contexts. Previously it was used to prevent @@ -106,7 +106,8 @@ def main(log_level='INFO', profiling=_default_profiling): def wrapper(func): if func.__module__ != '__main__': return func - import mitogen.parent + import mitogen.core + import mitogen.master import mitogen.utils if profiling: mitogen.core.enable_profiling() diff --git a/mitogen/fakessh.py b/mitogen/fakessh.py index 23599903..70eacac7 100644 --- a/mitogen/fakessh.py +++ b/mitogen/fakessh.py @@ -97,7 +97,6 @@ import inspect import os import pty import shutil -import socket import subprocess import sys import tempfile diff --git a/mitogen/imports/__init__.py b/mitogen/imports/__init__.py index a54e9b01..bf246e26 100644 --- a/mitogen/imports/__init__.py +++ b/mitogen/imports/__init__.py @@ -1,5 +1,5 @@ # SPDX-FileCopyrightText: 2025 Mitogen authors -# SPDX-License-Identifier: MIT +# SPDX-License-Identifier: BSD-3-Clause # !mitogen: minify_safe import sys diff --git a/mitogen/imports/_py2.py b/mitogen/imports/_py2.py index 46f559e3..c640e278 100644 --- a/mitogen/imports/_py2.py +++ b/mitogen/imports/_py2.py @@ -1,5 +1,5 @@ # SPDX-FileCopyrightText: 2025 Mitogen authors -# SPDX-License-Identifier: MIT +# SPDX-License-Identifier: BSD-3-Clause # !mitogen: minify_safe import array diff --git a/mitogen/imports/_py314.py b/mitogen/imports/_py314.py index 7fa69cff..acf369cd 100644 --- a/mitogen/imports/_py314.py +++ b/mitogen/imports/_py314.py @@ -1,5 +1,5 @@ # SPDX-FileCopyrightText: 2025 Mitogen authors -# SPDX-License-Identifier: MIT +# SPDX-License-Identifier: BSD-3-Clause # !mitogen: minify_safe import opcode diff --git a/mitogen/imports/_py36.py b/mitogen/imports/_py36.py index 19e51a6e..a6d6f1ae 100644 --- a/mitogen/imports/_py36.py +++ b/mitogen/imports/_py36.py @@ -1,5 +1,5 @@ # SPDX-FileCopyrightText: 2025 Mitogen authors -# SPDX-License-Identifier: MIT +# SPDX-License-Identifier: BSD-3-Clause # !mitogen: minify_safe import opcode diff --git a/mitogen/master.py b/mitogen/master.py index f5d40025..3b896504 100644 --- a/mitogen/master.py +++ b/mitogen/master.py @@ -370,15 +370,19 @@ class LogForwarder(object): if logger is None: self._cache[logger_name] = logger = logging.getLogger(logger_name) + levelno = int(level_s) # See logging.Handler.makeRecord() - record = logging.LogRecord( - name=logger.name, - level=int(level_s), - pathname='(unknown file)', - lineno=0, - msg=s, - args=(), - exc_info=None, + record = logging.makeLogRecord( + { + "name": logger.name, + "levelname": logging.getLevelName(levelno), + "levelno": levelno, + "pathname": "(unknown file)", + "lineno": 0, + "msg": s, + "args": (), + "exc_info": None, + } ) record.mitogen_message = s record.mitogen_context = self._router.context_by_id(msg.src_id) diff --git a/mitogen/ssh.py b/mitogen/ssh.py index f32d2cab..c43d00da 100644 --- a/mitogen/ssh.py +++ b/mitogen/ssh.py @@ -40,6 +40,7 @@ try: except ImportError: from pipes import quote as shlex_quote +import mitogen.core import mitogen.parent from mitogen.core import b diff --git a/mitogen/unix.py b/mitogen/unix.py index 84eedc4b..71b98efd 100644 --- a/mitogen/unix.py +++ b/mitogen/unix.py @@ -44,6 +44,7 @@ import sys import tempfile import mitogen.core +import mitogen.parent import mitogen.master diff --git a/setup.py b/setup.py index fe561fd4..ad60847e 100644 --- a/setup.py +++ b/setup.py @@ -79,7 +79,7 @@ setup( long_description = long_description(), long_description_content_type='text/markdown', author = 'David Wilson', - license = 'New BSD', + license = 'BSD-3-Clause', url = 'https://github.com/mitogen-hq/mitogen/', packages = find_packages(exclude=['tests', 'examples']), python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*', @@ -88,7 +88,6 @@ setup( 'Environment :: Console', 'Framework :: Ansible', 'Intended Audience :: System Administrators', - 'License :: OSI Approved :: BSD License', 'Operating System :: MacOS :: MacOS X', 'Operating System :: POSIX', 'Programming Language :: Python', diff --git a/tests/context_test.py b/tests/context_test.py index ee9292c4..b9652c14 100644 --- a/tests/context_test.py +++ b/tests/context_test.py @@ -1,7 +1,6 @@ import pickle import mitogen.core -from mitogen.core import b import testlib diff --git a/tests/log_handler_test.py b/tests/log_handler_test.py index da929426..3629c728 100644 --- a/tests/log_handler_test.py +++ b/tests/log_handler_test.py @@ -14,11 +14,28 @@ import mitogen.parent import mitogen.utils from mitogen.core import b +PY2 = sys.version_info[0] == 2 +if PY2: + + def logging_getLogRecordFactory(): + return logging.LogRecord + + def logging_setLogRecordFactory(factory): + logging.LogRecord = factory + +else: + logging_getLogRecordFactory = logging.getLogRecordFactory + logging_setLogRecordFactory = logging.setLogRecordFactory + def ping(): pass +def log_test(): + logging.getLogger(__name__).info("This is a test") + + class BufferingTest(testlib.TestCase): klass = mitogen.core.LogHandler @@ -89,6 +106,36 @@ class StartupTest(testlib.RouterMixin, testlib.TestCase): expect = 'Parent is context %s (%s)' % (c1.context_id, 'parent') self.assertIn(expect, logs) + +class LogRecordFactoryTest(testlib.RouterMixin, testlib.TestCase): + def setUp(self): + super(LogRecordFactoryTest, self).setUp() + self.original_factory = logging_getLogRecordFactory() + + def tearDown(self): + logging_setLogRecordFactory(self.original_factory) + super(LogRecordFactoryTest, self).tearDown() + + def test_logrecordfactory(self): + # Change logging factory and add a custom attribute + old_factory = logging_getLogRecordFactory() + + def record_factory(*args, **kwargs): + record = old_factory(*args, **kwargs) + record.custom_attribute = 0xDEADBEEF + return record + + logging_setLogRecordFactory(record_factory) + c1 = self.router.local(name="c1") + log = testlib.LogCapturer( + __name__, formatter=logging.Formatter("%(custom_attribute)x - %(message)s") + ) + log.start() + c1.call(log_test) + logs = log.stop() + self.assertIn("deadbeef - This is a test", logs) + + StartupTest = unittest.skipIf( condition=sys.version_info < (2, 7) or sys.version_info >= (3, 6), reason="Message log flaky on Python < 2.7 or >= 3.6" diff --git a/tests/poller_test.py b/tests/poller_test.py index 01e4a561..ae7d2965 100644 --- a/tests/poller_test.py +++ b/tests/poller_test.py @@ -1,7 +1,6 @@ import errno import os import select -import socket import sys import unittest diff --git a/tests/testlib.py b/tests/testlib.py index 20b6e7c7..3b5dc8b6 100644 --- a/tests/testlib.py +++ b/tests/testlib.py @@ -393,10 +393,13 @@ class CaptureStreamHandler(logging.StreamHandler): class LogCapturer(object): - def __init__(self, name=None): + def __init__(self, name=None, formatter=None): self.sio = StringIO() self.logger = logging.getLogger(name) - self.handler = CaptureStreamHandler(self.sio) + handler = CaptureStreamHandler(self.sio) + if formatter is not None: + handler.setFormatter(formatter) + self.handler = handler self.old_propagate = self.logger.propagate self.old_handlers = self.logger.handlers self.old_level = self.logger.level