def checkLengthAndBool(self): self.assertEqual(len(self._storage), 0) self.assertTrue(not self._storage) db = DB(self._storage) # creates object 0. :) self.assertEqual(len(self._storage), 1) self.assertTrue(self._storage) with db.transaction() as conn: for i in range(10): conn.root()[i] = conn.root().__class__() self.assertEqual(len(self._storage), 11) self.assertTrue(self._storage) db.close()
def checkLengthAndBool(self): self.assertEqual(len(self._storage), 0) self.assertTrue(not self._storage) db = DB(self._storage) # creates object 0. :) self.assertEqual(len(self._storage), 1) self.assertTrue(self._storage) with db.transaction() as conn: for i in range(10): conn.root()[i] = conn.root().__class__() self.assertEqual(len(self._storage), 11) self.assertTrue(self._storage) db.close()
class DBConnection: def __init__(self, minfo): self.connection = None self.root = None self.storage = ClientStorage.ClientStorage( minfo.getRoomBookingDBConnectionParams(), username=minfo.getRoomBookingDBUserName(), password=minfo.getRoomBookingDBPassword(), realm=minfo.getRoomBookingDBRealm()) self.db = DB(self.storage) def connect(self): if not self.isConnected(): if DALManager.usesMainIndicoDB(): self.connection = DBMgr.getInstance().getDBConnection() else: self.connection = self.db.open() self.root = self.connection.root() def isConnected(self): if not self.connection: return False return True def getRoot(self, name=""): if name == "": return self.root elif self.root != None: if name in self.root.keys() and self.root[name]: return self.root[name] else: # create the branch if name in ["Rooms", "Reservations"]: self.root[name] = IOBTree() elif name in ["RoomReservationsIndex", "UserReservationsIndex", "DayReservationsIndex", "RoomDayReservationsIndex"]: self.root[name] = OOBTree() elif name in ["EquipmentList", "CustomAttributesList"]: self.root[name] = {} else: return None return self.root[name] else: raise MaKaCError("Cannot connect to the room booking database") def disconnect(self): if DALManager.usesMainIndicoDB(): return if self.isConnected(): self.connection.close() self.root = None self.connection = None def commit(self): if DALManager.usesMainIndicoDB(): return if self.isConnected(): self.connection.transaction_manager.get().commit() def rollback(self): if DALManager.usesMainIndicoDB(): return if self.isConnected(): self.connection.transaction_manager.get().abort() def sync(self): if DALManager.usesMainIndicoDB(): return if self.isConnected(): self.connection.sync() def pack(self, days=1): if DALManager.usesMainIndicoDB(): return self.db.pack(days=days) def transaction(self): """ Calls the ZODB context manager for the connection """ return self.db.transaction()
class DBConnection: def __init__(self, minfo): self.connection = None self.root = None self.storage = ClientStorage.ClientStorage( minfo.getRoomBookingDBConnectionParams(), username=minfo.getRoomBookingDBUserName(), password=minfo.getRoomBookingDBPassword(), realm=minfo.getRoomBookingDBRealm()) self.db = DB(self.storage) def connect(self): if not self.isConnected(): if DALManager.usesMainIndicoDB(): self.connection = DBMgr.getInstance().getDBConnection() else: self.connection = self.db.open() self.root = self.connection.root() def isConnected(self): if not self.connection: return False return True def getRoot(self, name=""): if name == "": return self.root elif self.root != None: if name in self.root.keys() and self.root[name]: return self.root[name] else: # create the branch if name in ["Rooms", "Reservations"]: self.root[name] = IOBTree() elif name in [ "RoomReservationsIndex", "UserReservationsIndex", "DayReservationsIndex", "RoomDayReservationsIndex" ]: self.root[name] = OOBTree() elif name in ["EquipmentList", "CustomAttributesList"]: self.root[name] = {} else: return None return self.root[name] else: raise MaKaCError("Cannot connect to the room booking database") def disconnect(self): if DALManager.usesMainIndicoDB(): return if self.isConnected(): self.connection.close() self.root = None self.connection = None def commit(self): if DALManager.usesMainIndicoDB(): return if self.isConnected(): self.connection.transaction_manager.get().commit() def rollback(self): if DALManager.usesMainIndicoDB(): return if self.isConnected(): self.connection.transaction_manager.get().abort() def sync(self): if DALManager.usesMainIndicoDB(): return if self.isConnected(): self.connection.sync() def pack(self, days=1): if DALManager.usesMainIndicoDB(): return self.db.pack(days=days) def transaction(self): """ Calls the ZODB context manager for the connection """ return self.db.transaction()
"""Handles database connection (ZODB).""" from ZODB.FileStorage import FileStorage from ZODB.DB import DB from persistent.mapping import PersistentMapping import atexit from . import constants __all__ = ['db'] db = DB(FileStorage(constants.DATABASE_FILE)) # Open atexit.register(db.close) # Close on exit with db.transaction() as conn: # Make sure everything is initialized root = conn.root() for category in constants.CATEGORIES: if category not in root: root[category] = PersistentMapping() if constants.PARAMS_OBJECT not in root: root[constants.PARAMS_OBJECT] = PersistentMapping()