implemented global IS_PYMONGO_3
This commit is contained in:
parent
c0f1493473
commit
48316ba60d
@ -1,13 +1,12 @@
|
|||||||
import pymongo
|
|
||||||
from pymongo import MongoClient, ReadPreference, uri_parser
|
from pymongo import MongoClient, ReadPreference, uri_parser
|
||||||
|
from mongoengine.python_support import IS_PYMONGO_3
|
||||||
|
|
||||||
__all__ = ['ConnectionError', 'connect', 'register_connection',
|
__all__ = ['ConnectionError', 'connect', 'register_connection',
|
||||||
'DEFAULT_CONNECTION_NAME']
|
'DEFAULT_CONNECTION_NAME']
|
||||||
|
|
||||||
|
|
||||||
DEFAULT_CONNECTION_NAME = 'default'
|
DEFAULT_CONNECTION_NAME = 'default'
|
||||||
if pymongo.version_tuple[0] >= 3:
|
if IS_PYMONGO_3:
|
||||||
READ_PREFERENCE = ReadPreference.PRIMARY
|
READ_PREFERENCE = ReadPreference.PRIMARY
|
||||||
else:
|
else:
|
||||||
from pymongo import MongoReplicaSetClient
|
from pymongo import MongoReplicaSetClient
|
||||||
@ -115,7 +114,7 @@ def get_connection(alias=DEFAULT_CONNECTION_NAME, reconnect=False):
|
|||||||
# Discard replicaSet if not base string
|
# Discard replicaSet if not base string
|
||||||
if not isinstance(conn_settings['replicaSet'], basestring):
|
if not isinstance(conn_settings['replicaSet'], basestring):
|
||||||
conn_settings.pop('replicaSet', None)
|
conn_settings.pop('replicaSet', None)
|
||||||
if pymongo.version_tuple[0] < 3:
|
if not IS_PYMONGO_3:
|
||||||
connection_class = MongoReplicaSetClient
|
connection_class = MongoReplicaSetClient
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -295,7 +295,7 @@ class Document(BaseDocument):
|
|||||||
|
|
||||||
# I think the self._created flag is not necessarily required in PyMongo3
|
# I think the self._created flag is not necessarily required in PyMongo3
|
||||||
# but may cause test test_collection_name_and_primary to fail
|
# but may cause test test_collection_name_and_primary to fail
|
||||||
# if pymongo.version_tuple[0] < 3:
|
# if not IS_PYMONGO_3:
|
||||||
created = ('_id' not in doc or self._created or force_insert)
|
created = ('_id' not in doc or self._created or force_insert)
|
||||||
# else:
|
# else:
|
||||||
# created = ('_id' not in doc or force_insert)
|
# created = ('_id' not in doc or force_insert)
|
||||||
|
@ -1,6 +1,13 @@
|
|||||||
"""Helper functions and types to aid with Python 2.5 - 3 support."""
|
"""Helper functions and types to aid with Python 2.5 - 3 support."""
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
|
import pymongo
|
||||||
|
|
||||||
|
|
||||||
|
if pymongo.version_tuple[0] < 3:
|
||||||
|
IS_PYMONGO_3 = False
|
||||||
|
else:
|
||||||
|
IS_PYMONGO_3 = True
|
||||||
|
|
||||||
PY3 = sys.version_info[0] == 3
|
PY3 = sys.version_info[0] == 3
|
||||||
|
|
||||||
|
@ -21,6 +21,7 @@ from mongoengine.common import _import_class
|
|||||||
from mongoengine.base.common import get_document
|
from mongoengine.base.common import get_document
|
||||||
from mongoengine.errors import (OperationError, NotUniqueError,
|
from mongoengine.errors import (OperationError, NotUniqueError,
|
||||||
InvalidQueryError, LookUpError)
|
InvalidQueryError, LookUpError)
|
||||||
|
from mongoengine.python_support import IS_PYMONGO_3
|
||||||
from mongoengine.queryset import transform
|
from mongoengine.queryset import transform
|
||||||
from mongoengine.queryset.field_list import QueryFieldList
|
from mongoengine.queryset.field_list import QueryFieldList
|
||||||
from mongoengine.queryset.visitor import Q, QNode
|
from mongoengine.queryset.visitor import Q, QNode
|
||||||
@ -1385,7 +1386,7 @@ class BaseQuerySet(object):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def _cursor_args(self):
|
def _cursor_args(self):
|
||||||
if pymongo.version_tuple[0] < 3:
|
if not IS_PYMONGO_3:
|
||||||
fields_name = 'fields'
|
fields_name = 'fields'
|
||||||
cursor_args = {
|
cursor_args = {
|
||||||
'timeout': self._timeout,
|
'timeout': self._timeout,
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
import unittest
|
import unittest
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
sys.path[0:0] = [""]
|
sys.path[0:0] = [""]
|
||||||
|
|
||||||
import os
|
|
||||||
import pymongo
|
import pymongo
|
||||||
|
|
||||||
from nose.plugins.skip import SkipTest
|
from nose.plugins.skip import SkipTest
|
||||||
@ -11,6 +11,7 @@ from datetime import datetime
|
|||||||
|
|
||||||
from mongoengine import *
|
from mongoengine import *
|
||||||
from mongoengine.connection import get_db, get_connection
|
from mongoengine.connection import get_db, get_connection
|
||||||
|
from mongoengine.python_support import IS_PYMONGO_3
|
||||||
|
|
||||||
__all__ = ("IndexesTest", )
|
__all__ = ("IndexesTest", )
|
||||||
|
|
||||||
@ -447,26 +448,26 @@ class IndexesTest(unittest.TestCase):
|
|||||||
# Need to be explicit about covered indexes as mongoDB doesn't know if
|
# Need to be explicit about covered indexes as mongoDB doesn't know if
|
||||||
# the documents returned might have more keys in that here.
|
# the documents returned might have more keys in that here.
|
||||||
query_plan = Test.objects(id=obj.id).exclude('a').explain()
|
query_plan = Test.objects(id=obj.id).exclude('a').explain()
|
||||||
if pymongo.version_tuple[0] < 3:
|
if not IS_PYMONGO_3:
|
||||||
self.assertFalse(query_plan['indexOnly'])
|
self.assertFalse(query_plan['indexOnly'])
|
||||||
else:
|
else:
|
||||||
self.assertEqual(query_plan.get('queryPlanner').get('winningPlan').get('inputStage').get('stage'), 'IDHACK')
|
self.assertEqual(query_plan.get('queryPlanner').get('winningPlan').get('inputStage').get('stage'), 'IDHACK')
|
||||||
|
|
||||||
query_plan = Test.objects(id=obj.id).only('id').explain()
|
query_plan = Test.objects(id=obj.id).only('id').explain()
|
||||||
if pymongo.version_tuple[0] < 3:
|
if not IS_PYMONGO_3:
|
||||||
self.assertTrue(query_plan['indexOnly'])
|
self.assertTrue(query_plan['indexOnly'])
|
||||||
else:
|
else:
|
||||||
self.assertEqual(query_plan.get('queryPlanner').get('winningPlan').get('inputStage').get('stage'), 'IDHACK')
|
self.assertEqual(query_plan.get('queryPlanner').get('winningPlan').get('inputStage').get('stage'), 'IDHACK')
|
||||||
|
|
||||||
query_plan = Test.objects(a=1).only('a').exclude('id').explain()
|
query_plan = Test.objects(a=1).only('a').exclude('id').explain()
|
||||||
if pymongo.version_tuple[0] < 3:
|
if not IS_PYMONGO_3:
|
||||||
self.assertTrue(query_plan['indexOnly'])
|
self.assertTrue(query_plan['indexOnly'])
|
||||||
else:
|
else:
|
||||||
self.assertEqual(query_plan.get('queryPlanner').get('winningPlan').get('inputStage').get('stage'), 'IXSCAN')
|
self.assertEqual(query_plan.get('queryPlanner').get('winningPlan').get('inputStage').get('stage'), 'IXSCAN')
|
||||||
self.assertEqual(query_plan.get('queryPlanner').get('winningPlan').get('stage'), 'PROJECTION')
|
self.assertEqual(query_plan.get('queryPlanner').get('winningPlan').get('stage'), 'PROJECTION')
|
||||||
|
|
||||||
query_plan = Test.objects(a=1).explain()
|
query_plan = Test.objects(a=1).explain()
|
||||||
if pymongo.version_tuple[0] < 3:
|
if not IS_PYMONGO_3:
|
||||||
self.assertFalse(query_plan['indexOnly'])
|
self.assertFalse(query_plan['indexOnly'])
|
||||||
else:
|
else:
|
||||||
self.assertEqual(query_plan.get('queryPlanner').get('winningPlan').get('inputStage').get('stage'), 'IXSCAN')
|
self.assertEqual(query_plan.get('queryPlanner').get('winningPlan').get('inputStage').get('stage'), 'IXSCAN')
|
||||||
|
@ -17,7 +17,7 @@ from bson import ObjectId
|
|||||||
|
|
||||||
from mongoengine import *
|
from mongoengine import *
|
||||||
from mongoengine.connection import get_connection, get_db
|
from mongoengine.connection import get_connection, get_db
|
||||||
from mongoengine.python_support import PY3
|
from mongoengine.python_support import PY3, IS_PYMONGO_3
|
||||||
from mongoengine.context_managers import query_counter, switch_db
|
from mongoengine.context_managers import query_counter, switch_db
|
||||||
from mongoengine.queryset import (QuerySet, QuerySetManager,
|
from mongoengine.queryset import (QuerySet, QuerySetManager,
|
||||||
MultipleObjectsReturned, DoesNotExist,
|
MultipleObjectsReturned, DoesNotExist,
|
||||||
@ -54,7 +54,7 @@ def skip_older_mongodb(f):
|
|||||||
def skip_pymongo3(f):
|
def skip_pymongo3(f):
|
||||||
def _inner(*args, **kwargs):
|
def _inner(*args, **kwargs):
|
||||||
|
|
||||||
if pymongo.version_tuple[0] >= 3:
|
if IS_PYMONGO_3:
|
||||||
raise SkipTest("Useless with PyMongo 3+")
|
raise SkipTest("Useless with PyMongo 3+")
|
||||||
|
|
||||||
return f(*args, **kwargs)
|
return f(*args, **kwargs)
|
||||||
@ -2942,7 +2942,7 @@ class QuerySetTest(unittest.TestCase):
|
|||||||
self.assertEqual(query.count(), 3)
|
self.assertEqual(query.count(), 3)
|
||||||
self.assertEqual(query._query, {'$text': {'$search': 'brasil'}})
|
self.assertEqual(query._query, {'$text': {'$search': 'brasil'}})
|
||||||
cursor_args = query._cursor_args
|
cursor_args = query._cursor_args
|
||||||
if pymongo.version_tuple[0] < 3:
|
if not IS_PYMONGO_3:
|
||||||
cursor_args_fields = cursor_args['fields']
|
cursor_args_fields = cursor_args['fields']
|
||||||
else:
|
else:
|
||||||
cursor_args_fields = cursor_args['projection']
|
cursor_args_fields = cursor_args['projection']
|
||||||
@ -4012,7 +4012,7 @@ class QuerySetTest(unittest.TestCase):
|
|||||||
bars = list(Bar.objects(read_preference=ReadPreference.PRIMARY))
|
bars = list(Bar.objects(read_preference=ReadPreference.PRIMARY))
|
||||||
self.assertEqual([], bars)
|
self.assertEqual([], bars)
|
||||||
|
|
||||||
if pymongo.version_tuple[0] < 3:
|
if not IS_PYMONGO_3:
|
||||||
error_class = ConfigurationError
|
error_class = ConfigurationError
|
||||||
else:
|
else:
|
||||||
error_class = TypeError
|
error_class = TypeError
|
||||||
|
@ -17,12 +17,13 @@ from mongoengine import (
|
|||||||
connect, register_connection,
|
connect, register_connection,
|
||||||
Document, DateTimeField
|
Document, DateTimeField
|
||||||
)
|
)
|
||||||
|
from mongoengine.python_support import IS_PYMONGO_3
|
||||||
import mongoengine.connection
|
import mongoengine.connection
|
||||||
from mongoengine.connection import get_db, get_connection, ConnectionError
|
from mongoengine.connection import get_db, get_connection, ConnectionError
|
||||||
|
|
||||||
|
|
||||||
def get_tz_awareness(connection):
|
def get_tz_awareness(connection):
|
||||||
if pymongo.version_tuple[0] < 3:
|
if not IS_PYMONGO_3:
|
||||||
return connection.tz_aware
|
return connection.tz_aware
|
||||||
else:
|
else:
|
||||||
return connection.codec_options.tz_aware
|
return connection.codec_options.tz_aware
|
||||||
@ -76,7 +77,7 @@ class ConnectionTest(unittest.TestCase):
|
|||||||
c.admin.authenticate("admin", "password")
|
c.admin.authenticate("admin", "password")
|
||||||
c.mongoenginetest.add_user("username", "password")
|
c.mongoenginetest.add_user("username", "password")
|
||||||
|
|
||||||
if pymongo.version_tuple[0] < 3:
|
if not IS_PYMONGO_3:
|
||||||
self.assertRaises(ConnectionError, connect, "testdb_uri_bad", host='mongodb://test:password@localhost')
|
self.assertRaises(ConnectionError, connect, "testdb_uri_bad", host='mongodb://test:password@localhost')
|
||||||
|
|
||||||
connect("testdb_uri", host='mongodb://username:password@localhost/mongoenginetest')
|
connect("testdb_uri", host='mongodb://username:password@localhost/mongoenginetest')
|
||||||
@ -103,7 +104,7 @@ class ConnectionTest(unittest.TestCase):
|
|||||||
c.admin.authenticate("admin", "password")
|
c.admin.authenticate("admin", "password")
|
||||||
c.mongoenginetest.add_user("username", "password")
|
c.mongoenginetest.add_user("username", "password")
|
||||||
|
|
||||||
if pymongo.version_tuple[0] < 3:
|
if not IS_PYMONGO_3:
|
||||||
self.assertRaises(ConnectionError, connect, "testdb_uri_bad", host='mongodb://test:password@localhost')
|
self.assertRaises(ConnectionError, connect, "testdb_uri_bad", host='mongodb://test:password@localhost')
|
||||||
|
|
||||||
connect("mongoenginetest", host='mongodb://localhost/')
|
connect("mongoenginetest", host='mongodb://localhost/')
|
||||||
@ -202,7 +203,7 @@ class ConnectionTest(unittest.TestCase):
|
|||||||
self.assertEqual(len(mongo_connections.items()), 2)
|
self.assertEqual(len(mongo_connections.items()), 2)
|
||||||
self.assertTrue('t1' in mongo_connections.keys())
|
self.assertTrue('t1' in mongo_connections.keys())
|
||||||
self.assertTrue('t2' in mongo_connections.keys())
|
self.assertTrue('t2' in mongo_connections.keys())
|
||||||
if pymongo.version_tuple[0] < 3:
|
if not IS_PYMONGO_3:
|
||||||
self.assertEqual(mongo_connections['t1'].host, 'localhost')
|
self.assertEqual(mongo_connections['t1'].host, 'localhost')
|
||||||
self.assertEqual(mongo_connections['t2'].host, '127.0.0.1')
|
self.assertEqual(mongo_connections['t2'].host, '127.0.0.1')
|
||||||
else:
|
else:
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
import sys
|
import sys
|
||||||
|
|
||||||
sys.path[0:0] = [""]
|
sys.path[0:0] = [""]
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
import pymongo
|
|
||||||
from pymongo import ReadPreference
|
from pymongo import ReadPreference
|
||||||
|
|
||||||
if pymongo.version_tuple[0] >= 3:
|
from mongoengine.python_support import IS_PYMONGO_3
|
||||||
|
|
||||||
|
if IS_PYMONGO_3:
|
||||||
from pymongo import MongoClient
|
from pymongo import MongoClient
|
||||||
CONN_CLASS = MongoClient
|
CONN_CLASS = MongoClient
|
||||||
READ_PREF = ReadPreference.SECONDARY
|
READ_PREF = ReadPreference.SECONDARY
|
||||||
|
Loading…
x
Reference in New Issue
Block a user