Added uri style connection handling

This commit is contained in:
Ross Lawley
2012-01-30 10:24:45 +00:00
parent f59aa922ea
commit 0301135f96
4 changed files with 41 additions and 6 deletions

View File

@@ -1,5 +1,5 @@
import pymongo
from pymongo import Connection
from pymongo import Connection, uri_parser
__all__ = ['ConnectionError', 'connect', 'register_connection',
@@ -38,6 +38,17 @@ def register_connection(alias, name, host='localhost', port=27017,
"""
global _connection_settings
# Handle uri style connections
if "://" in host:
uri_dict = uri_parser.parse_uri(host)
if 'database' not in uri_dict:
raise ConnectionError("If using URI style connection include "\
"database name in string")
uri_dict['name'] = uri_dict.get('database')
_connection_settings[alias] = uri_dict
return
_connection_settings[alias] = {
'name': name,
'host': host,
@@ -48,8 +59,10 @@ def register_connection(alias, name, host='localhost', port=27017,
'password': password,
'read_preference': read_preference
}
_connection_settings[alias].update(kwargs)
def disconnect(alias=DEFAULT_CONNECTION_NAME):
global _connections
global _dbs
@@ -83,11 +96,12 @@ def get_connection(alias=DEFAULT_CONNECTION_NAME, reconnect=False):
conn_settings.pop('password')
else:
# Get all the slave connections
slaves = []
for slave_alias in conn_settings['slaves']:
slaves.append(get_connection(slave_alias))
conn_settings['slaves'] = slaves
conn_settings.pop('read_preference')
if 'slaves' in conn_settings:
slaves = []
for slave_alias in conn_settings['slaves']:
slaves.append(get_connection(slave_alias))
conn_settings['slaves'] = slaves
conn_settings.pop('read_preference')
try:
_connections[alias] = Connection(**conn_settings)