Made connection lazy

This commit is contained in:
Harry Marr 2010-01-06 00:40:35 +00:00
parent 4ae21a671d
commit 196f4471be
2 changed files with 29 additions and 11 deletions

View File

@ -38,6 +38,8 @@ Fields
.. autoclass:: mongoengine.FloatField .. autoclass:: mongoengine.FloatField
.. autoclass:: mongoengine.BooleanField
.. autoclass:: mongoengine.DateTimeField .. autoclass:: mongoengine.DateTimeField
.. autoclass:: mongoengine.EmbeddedDocumentField .. autoclass:: mongoengine.EmbeddedDocumentField

View File

@ -10,6 +10,10 @@ _connection_settings = {
'pool_size': 1, 'pool_size': 1,
} }
_connection = None _connection = None
_db_name = None
_db_username = None
_db_password = None
_db = None _db = None
@ -19,14 +23,30 @@ class ConnectionError(Exception):
def _get_connection(): def _get_connection():
global _connection global _connection
# Connect to the database if not already connected
if _connection is None: if _connection is None:
try:
_connection = Connection(**_connection_settings) _connection = Connection(**_connection_settings)
except:
raise ConnectionError('Cannot connect to the database')
return _connection return _connection
def _get_db(): def _get_db():
global _db global _db, _connection
# Connect if not already connected
if _connection is None:
_connection = _get_connection()
if _db is None: if _db is None:
raise ConnectionError('Not connected to database') # _db_name will be None if the user hasn't called connect()
if _db_name is None:
raise ConnectionError('Not connected to the database')
# Get DB from current connection and authenticate if necessary
_db = _connection[_db_name]
if _db_username and _db_password:
_db.authenticate(_db_username, _db_password)
return _db return _db
def connect(db, username=None, password=None, **kwargs): def connect(db, username=None, password=None, **kwargs):
@ -35,12 +55,8 @@ def connect(db, username=None, password=None, **kwargs):
the default port on localhost. If authentication is needed, provide the default port on localhost. If authentication is needed, provide
username and password arguments as well. username and password arguments as well.
""" """
global _db global _connection_settings, _db_name, _db_username, _db_password
_connection_settings.update(kwargs) _connection_settings.update(kwargs)
connection = _get_connection() _db_name = db
# Get DB from connection and auth if necessary _db_username = username
_db = connection[db] _db_password = password
if username is not None and password is not None:
_db.authenticate(username, password)