Source code for mongokit.master_slave_connection

"""
Master-Slave integration with for MongoKit
Andreas Jung, info@zopyx.com
(same license as Mongokit)
"""

from pymongo.master_slave_connection import MasterSlaveConnection as PymongoMasterSlaveConnection
try:
    from pymongo import MongoClient as PymongoConnection
except ImportError:
    from pymongo import Connection as PymongoConnection

from .connection import MongoKitConnection


[docs]class MasterSlaveConnection(MongoKitConnection, PymongoMasterSlaveConnection): """ Master-Slave support for MongoKit """ def __init__(self, master, slaves=[]): """ The MasterSlaveConnection is a wrapper around the pymongo.master_slave_connection implementation. The constructor accepts the connection parameter for the master MongoDB server and a non-empty list of connection parameters for one or more slaves. The connection parameters are expressed as a dictionary where the keys match the signature of the constructor of a standard pymongo.connection.Connection instance ('host', 'port' etc.). For the 'slaves' it is not necessary to specify the 'slave_okay' parameter (will be added internally automatically). The purpose of the MasterSlaveConnection is to hide a master-slave setup with one master and several slave servers. The slave server(s) will be used for read and write will be made to the master (and re-synced to the slave automatically as part of the master-slave setup). """ # Run both inits. MongoKitConnection specific one. Then the Pymongo one at the end MongoKitConnection.__init__(self) # I am the master if not isinstance(master, dict): raise TypeError('"master" must be a dict containing pymongo.Connection parameters') master_connection = PymongoConnection(**master) # You are my dirty slaves if not slaves: raise ValueError('You must specify at least one slave connection') slave_connections = list() for slave in slaves: if not isinstance(slave, dict): raise TypeError('"slaves" must be list of dicts containing pymongo.Connection parameters') slave['slave_okay'] = True slave_connections.append(PymongoConnection(**slave)) # Specifying that it should use the pymongo init PymongoMasterSlaveConnection.__init__(self, master_connection, slave_connections)