Browse Source

MongoDB backend tests now passing with pymongo 3.x. Closes #2589

Ask Solem 10 years ago
parent
commit
6592ff64b6
2 changed files with 24 additions and 22 deletions
  1. 11 9
      celery/backends/mongodb.py
  2. 13 13
      celery/tests/backends/test_mongodb.py

+ 11 - 9
celery/backends/mongodb.py

@@ -30,7 +30,7 @@ from kombu.utils import cached_property
 from kombu.exceptions import EncodeError
 from celery import states
 from celery.exceptions import ImproperlyConfigured
-from celery.five import string_t
+from celery.five import string_t, items
 
 from .base import BaseBackend
 
@@ -78,14 +78,9 @@ class MongoBackend(BaseBackend):
 
         self.url = url
 
-
-        # default options according to pymongo version
-        if pymongo.version_tuple >= (3,):
-            self.options.setdefault('maxPoolSize', self.max_pool_size)
-        else:
-            self.options.setdefault('max_pool_size', self.max_pool_size)
-            self.options.setdefault('auto_start_request', False)
-
+        # Set option defaults
+        for key, value in items(self._prepare_client_options()):
+            self.options.setdefault(key, value)
 
         # update conf with mongo uri data, only if uri was given
         if self.url:
@@ -130,6 +125,13 @@ class MongoBackend(BaseBackend):
             self.options.update(config.pop('options', {}))
             self.options.update(config)
 
+    def _prepare_client_options(self):
+            if pymongo.version_tuple >= (3, ):
+                return {'maxPoolSize': self.max_pool_size}
+            else:  # pragma: no cover
+                return {'max_pool_size': max_pool_size,
+                        'auto_start_request': False}
+
     def _get_connection(self):
         """Connect to the MongoDB server."""
         if self._connection is None:

+ 13 - 13
celery/tests/backends/test_mongodb.py

@@ -76,8 +76,7 @@ class test_MongoBackend(AppCase):
         uri = 'mongodb://localhost:27017'
         mb = MongoBackend(app=self.app, url=uri)
         self.assertEqual(mb.mongo_host, ['localhost:27017'])
-        self.assertEqual(mb.options, {'auto_start_request': False,
-                                      'max_pool_size': 10})
+        self.assertEqual(mb.options, mb._prepare_client_options())
         self.assertEqual(mb.database_name, 'celery')
 
         # uri with database name
@@ -96,9 +95,9 @@ class test_MongoBackend(AppCase):
         self.assertEqual(mb.mongo_host, ['mongo1.example.com:27017',
                                          'mongo2.example.com:27017',
                                          'mongo3.example.com:27017'])
-        self.assertEqual(mb.options, {'auto_start_request': False,
-                                      'max_pool_size': 10,
-                                      'replicaset': 'rs0'})
+        self.assertEqual(
+            mb.options, dict(mb._prepare_client_options(), replicaset='rs0'),
+        )
         self.assertEqual(mb.user, 'celeryuser')
         self.assertEqual(mb.password, 'celerypassword')
         self.assertEqual(mb.database_name, 'celerydatabase')
@@ -116,10 +115,10 @@ class test_MongoBackend(AppCase):
         self.assertEqual(mb.mongo_host, ['mongo1.example.com:27017',
                                          'mongo2.example.com:27017',
                                          'mongo3.example.com:27017'])
-        self.assertEqual(mb.options, {'auto_start_request': False,
-                                      'max_pool_size': 10,
-                                      'replicaset': 'rs1',
-                                      'socketKeepAlive': True})
+        self.assertEqual(
+            mb.options, dict(mb._prepare_client_options(),
+                             replicaset='rs1', socketKeepAlive=True),
+        )
         self.assertEqual(mb.user, 'backenduser')
         self.assertEqual(mb.password, 'celerypassword')
         self.assertEqual(mb.database_name, 'another_db')
@@ -149,8 +148,9 @@ class test_MongoBackend(AppCase):
 
             connection = self.backend._get_connection()
             mock_Connection.assert_called_once_with(
-                host='mongodb://localhost:27017', max_pool_size=10,
-                auto_start_request=False)
+                host='mongodb://localhost:27017',
+                **self.backend._prepare_client_options()
+            )
             self.assertEqual(sentinel.connection, connection)
 
     def test_get_connection_no_connection_mongodb_uri(self):
@@ -164,8 +164,8 @@ class test_MongoBackend(AppCase):
 
             connection = self.backend._get_connection()
             mock_Connection.assert_called_once_with(
-                host=mongodb_uri, max_pool_size=10,
-                auto_start_request=False)
+                host=mongodb_uri, **self.backend._prepare_client_options()
+            )
             self.assertEqual(sentinel.connection, connection)
 
     @patch('celery.backends.mongodb.MongoBackend._get_connection')