Ejemplo n.º 1
0
 def __init__(self, database):
     super(Database, self).__init__()
     # set up the database and the version file
     if isinstance(database, kaa.db.Database):
         self._db = database
     else:
         dbdir = os.path.dirname(database)
         if dbdir and not os.path.exists(dbdir):
             os.makedirs(dbdir)
         self._db = kaa.db.Database(database + '.db')
     self._versionfile = self._db.filename + '.version'
     self.imagedir = self._db.filename + '.images'
     if not os.path.isdir(self.imagedir):
         os.makedirs(self.imagedir)
     if not os.path.exists(self._versionfile):
         open(self._versionfile, 'w').write('0')
     try:
         self.version = int(open(self._versionfile).read())
     except ValueError:
         self.version = 0
     # FIXME: we need to keep the INotify object. Why?
     self.__inotify = INotify()
     self.__inotify.watch(self._versionfile,
                          INotify.CLOSE_WRITE).connect(self._db_updated)
Ejemplo n.º 2
0
Archivo: core.py Proyecto: clones/kaa
 def __init__(self, database):
     super(Database, self).__init__()
     # set up the database and the version file
     if not os.path.exists(os.path.dirname(database)):
         os.makedirs(os.path.dirname(database))
     self._db = kaa.db.Database(database + '.db')
     self._versionfile = database + '.version'
     if not os.path.exists(self._versionfile):
         open(self._versionfile, 'w').write('0')
     try:
         self.version = int(open(self._versionfile).read())
     except ValueError:
         self.version = 0
     # FIXME: we need to keep the INotify object. Why?
     self.__inotify = INotify()
     self.__inotify.watch(self._versionfile, INotify.CLOSE_WRITE).connect(self._db_updated)
Ejemplo n.º 3
0
 def __init__(self, database):
     super(Database, self).__init__()
     # set up the database and the version file
     if isinstance(database, kaa.db.Database):
         self._db = database
     else:
         dbdir = os.path.dirname(database)
         if dbdir and not os.path.exists(dbdir):
             os.makedirs(dbdir)
         self._db = kaa.db.Database(database + '.db')
     self._versionfile = self._db.filename + '.version'
     self.imagedir = self._db.filename + '.images'
     if not os.path.isdir(self.imagedir):
         os.makedirs(self.imagedir)
     if not os.path.exists(self._versionfile):
         open(self._versionfile, 'w').write('0')
     try:
         self.version = int(open(self._versionfile).read())
     except ValueError:
         self.version = 0
     # FIXME: we need to keep the INotify object. Why?
     self.__inotify = INotify()
     self.__inotify.watch(self._versionfile, INotify.CLOSE_WRITE).connect(self._db_updated)
Ejemplo n.º 4
0
class Database(MediaInfo):

    __kaasignals__ = {
        'changed':
            '''
            Signal when the database on disc changes
            ''',
        }

    def __init__(self, database):
        super(Database, self).__init__()
        # set up the database and the version file
        if isinstance(database, kaa.db.Database):
            self._db = database
        else:
            dbdir = os.path.dirname(database)
            if dbdir and not os.path.exists(dbdir):
                os.makedirs(dbdir)
            self._db = kaa.db.Database(database + '.db')
        self._versionfile = self._db.filename + '.version'
        self.imagedir = self._db.filename + '.images'
        if not os.path.isdir(self.imagedir):
            os.makedirs(self.imagedir)
        if not os.path.exists(self._versionfile):
            open(self._versionfile, 'w').write('0')
        try:
            self.version = int(open(self._versionfile).read())
        except ValueError:
            self.version = 0
        # FIXME: we need to keep the INotify object. Why?
        self.__inotify = INotify()
        self.__inotify.watch(self._versionfile, INotify.CLOSE_WRITE).connect(self._db_updated)

    def _db_updated(self, *args):
        """
        Callback from INotify when the version file changed
        """
        try:
            version = int(open(self._versionfile).read())
        except ValueError:
            version = self.version + 1
        if version != self.version:
            self.version = version
            self.signals['changed'].emit()

    def notify_resync(self):
        """
        Notify all applications using the database that a resync is necessary by
        updating the version or the db.
        """
        self.version += 1
        f = open(self._versionfile, 'w')
        f.write(str(self.version))
        f.close()

    @kaa.coroutine()
    def sync(self, force=False):
        yield None

    def get_metadata(self, key):
        """
        Get database metadata
        """
        if not self._db.query(type='metadata'):
            return None
        metadata = self._db.query(type='metadata')[0]['metadata']
        if not metadata:
            return None
        return metadata.get(key)

    def set_metadata(self, key, value):
        """
        Set database metadata
        """
        if not self._db.query(type='metadata'):
            return None
        entry = self._db.query(type='metadata')[0]
        metadata = entry['metadata'] or {}
        metadata[key] = value
        self._db.update(entry, metadata=metadata)
        self._db.commit()
Ejemplo n.º 5
0
class Database(MediaInfo):

    __kaasignals__ = {
        'changed':
        '''
            Signal when the database on disc changes
            ''',
    }

    def __init__(self, database):
        super(Database, self).__init__()
        # set up the database and the version file
        if isinstance(database, kaa.db.Database):
            self._db = database
        else:
            dbdir = os.path.dirname(database)
            if dbdir and not os.path.exists(dbdir):
                os.makedirs(dbdir)
            self._db = kaa.db.Database(database + '.db')
        self._versionfile = self._db.filename + '.version'
        self.imagedir = self._db.filename + '.images'
        if not os.path.isdir(self.imagedir):
            os.makedirs(self.imagedir)
        if not os.path.exists(self._versionfile):
            open(self._versionfile, 'w').write('0')
        try:
            self.version = int(open(self._versionfile).read())
        except ValueError:
            self.version = 0
        # FIXME: we need to keep the INotify object. Why?
        self.__inotify = INotify()
        self.__inotify.watch(self._versionfile,
                             INotify.CLOSE_WRITE).connect(self._db_updated)

    def _db_updated(self, *args):
        """
        Callback from INotify when the version file changed
        """
        try:
            version = int(open(self._versionfile).read())
        except ValueError:
            version = self.version + 1
        if version != self.version:
            self.version = version
            self.signals['changed'].emit()

    def notify_resync(self):
        """
        Notify all applications using the database that a resync is necessary by
        updating the version or the db.
        """
        self.version += 1
        f = open(self._versionfile, 'w')
        f.write(str(self.version))
        f.close()

    @kaa.coroutine()
    def sync(self, force=False):
        yield None

    def get_metadata(self, key):
        """
        Get database metadata
        """
        if not self._db.query(type='metadata'):
            return None
        metadata = self._db.query(type='metadata')[0]['metadata']
        if not metadata:
            return None
        return metadata.get(key)

    def set_metadata(self, key, value):
        """
        Set database metadata
        """
        if not self._db.query(type='metadata'):
            return None
        entry = self._db.query(type='metadata')[0]
        metadata = entry['metadata'] or {}
        metadata[key] = value
        self._db.update(entry, metadata=metadata)
        self._db.commit()