From f4eb8f93fd81e532141cc2168b3fd28836e77bb5 Mon Sep 17 00:00:00 2001 From: Shane Harvey Date: Fri, 22 Oct 2021 14:43:20 -0700 Subject: [PATCH] PYTHON-2966 Make MongoClient.event_listeners work as expected (#761) --- pymongo/mongo_client.py | 2 +- pymongo/monitoring.py | 9 +++++---- test/test_client.py | 13 ++++++++++++- test/test_session.py | 4 ++-- 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/pymongo/mongo_client.py b/pymongo/mongo_client.py index 11c51f9bc..3cca1ee36 100644 --- a/pymongo/mongo_client.py +++ b/pymongo/mongo_client.py @@ -895,7 +895,7 @@ class MongoClient(common.BaseObject): See :mod:`~pymongo.monitoring` for details. """ - return self._event_listeners.event_listeners + return self._event_listeners.event_listeners() @property def topology_description(self): diff --git a/pymongo/monitoring.py b/pymongo/monitoring.py index 325ec0554..ba9bbe812 100644 --- a/pymongo/monitoring.py +++ b/pymongo/monitoring.py @@ -1318,10 +1318,11 @@ class _EventListeners(object): def event_listeners(self): """List of registered event listeners.""" - return (self.__command_listeners[:], - self.__server_heartbeat_listeners[:], - self.__server_listeners[:], - self.__topology_listeners[:]) + return (self.__command_listeners[:] + + self.__server_heartbeat_listeners[:] + + self.__server_listeners[:] + + self.__topology_listeners[:] + + self.__cmap_listeners) def publish_command_start(self, command, database_name, request_id, connection_id, op_id=None, diff --git a/test/test_client.py b/test/test_client.py index 288c697b2..edd459eb3 100644 --- a/test/test_client.py +++ b/test/test_client.py @@ -35,7 +35,7 @@ from bson.codec_options import CodecOptions, TypeEncoder, TypeRegistry from bson.son import SON from bson.tz_util import utc import pymongo -from pymongo import message, monitoring +from pymongo import event_loggers, message, monitoring from pymongo.command_cursor import CommandCursor from pymongo.common import CONNECT_TIMEOUT, _UUID_REPRESENTATIONS from pymongo.compression_support import _HAVE_SNAPPY, _HAVE_ZSTD @@ -463,6 +463,17 @@ class ClientUnitTest(unittest.TestCase): with self.assertRaises(InvalidURI): MongoClient(ssl=True, tls=False) + def test_event_listeners(self): + c = MongoClient(event_listeners=[], connect=False) + self.assertEqual(c.event_listeners, []) + listeners = [event_loggers.CommandLogger(), + event_loggers.HeartbeatLogger(), + event_loggers.ServerLogger(), + event_loggers.TopologyLogger(), + event_loggers.ConnectionPoolLogger()] + c = MongoClient(event_listeners=listeners, connect=False) + self.assertEqual(c.event_listeners, listeners) + class TestClient(IntegrationTest): def test_multiple_uris(self): diff --git a/test/test_session.py b/test/test_session.py index c8c80069a..9ab0c349f 100644 --- a/test/test_session.py +++ b/test/test_session.py @@ -104,7 +104,7 @@ class TestSession(IntegrationTest): self.assertLessEqual(used_lsids, current_lsids) def _test_ops(self, client, *ops): - listener = client.event_listeners()[0][0] + listener = client.event_listeners[0] for f, args, kw in ops: with client.start_session() as s: @@ -626,7 +626,7 @@ class TestSession(IntegrationTest): lambda cursor: list(cursor)) def _test_unacknowledged_ops(self, client, *ops): - listener = client.event_listeners()[0][0] + listener = client.event_listeners[0] for f, args, kw in ops: with client.start_session() as s: