Beispiel #1
0
 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()
Beispiel #2
0
 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()
Beispiel #3
0
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()
Beispiel #4
0
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()