from niapi.dbi.mongoapi import get_connection
import multiprocessing
import threading

__all__ = ['ConnectionError', 'connect']


_connection_defaults = {
    'host': 'localhost',
    'port': 27017,
}
_connection = {}
_connection_settings = _connection_defaults.copy()

_db_name = None
_db_username = None
_db_password = None
_db = {}


class ConnectionError(Exception):
    pass


def _get_connection(reconnect=False):
    """Handles the connection to the database
    """
    global _connection
    identity = get_identity()
    # Connect to the database if not already connected
    if _connection.get(identity) is None or reconnect:
        try:
            _connection[identity] = get_connection(preference='primary')
        except Exception, e:
            raise ConnectionError("Cannot connect to the database:\n%s" % e)
    return _connection[identity]

def _get_db(reconnect=False):
    """Handles database connections and authentication based on the current
    identity
    """
    global _db, _connection
    identity = get_identity()
    # Connect if not already connected
    if _connection.get(identity) is None or reconnect:
        _connection[identity] = _get_connection(reconnect=reconnect)

    if _db.get(identity) is None or reconnect:
        # _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[identity] = _connection[identity][_db_name]
        if _db_username and _db_password:
            _db[identity].authenticate(_db_username, _db_password)

    return _db[identity]

def get_identity():
    """Creates an identity key based on the current process and thread
    identity.
    """
    identity = multiprocessing.current_process()._identity
    identity = 0 if not identity else identity[0]

    identity = (identity, threading.current_thread().ident)
    return identity

def connect(db, username=None, password=None, **kwargs):
    """Connect to the database specified by the 'db' argument. Connection
    settings may be provided here as well if the database is not running on
    the default port on localhost. If authentication is needed, provide
    username and password arguments as well.
    """
    global _connection_settings, _db_name, _db_username, _db_password, _db
    _connection_settings = dict(_connection_defaults, **kwargs)
    _db_name = db
    _db_username = username
    _db_password = password
    return _get_db(reconnect=True)


@@ -2,34 +2,23 @@
 rom 
-niapi.dbi.
+py
 mongo
-api
  import 
 get_
@@ -13,21 +13,17 @@
  import 
-get_c
+C
 onnectio
@@ -668,43 +668,41 @@
 %5D = 
-get_connection(preference='primary'
+Connection(**_connection_settings
 )%0A  

Revert back to use Connection class instead of ReplicaSet