Ejemplo n.º 1
0
    def _initdb_con(self, config):
        """ensure needed tables are in place.
        If the derived class needs a different set of table creation commands, overload the approriate
        SCHEMA_ attributes.  If it needs additional execution beyond, override"""

        self._dbconnect(config)
        if not self._table_exists(self.SCHEMA_PACKAGE_NAME):
            if self.readonly:
                raise cache_errors.ReadOnlyRestriction(
                    "table %s doesn't exist" % self.SCHEMA_PACKAGE_NAME
                )
            try:
                self.con.execute(self.SCHEMA_PACKAGE_CREATE)
            except self._BaseError as e:
                raise cache_errors.InitializationError(self.__class__, e)

        if not self._table_exists(self.SCHEMA_VALUES_NAME):
            if self.readonly:
                raise cache_errors.ReadOnlyRestriction(
                    "table %s doesn't exist" % self.SCHEMA_VALUES_NAME
                )
            try:
                self.con.execute(self.SCHEMA_VALUES_CREATE)
            except self._BaseError as e:
                raise cache_errors.InitializationError(self.__class__, e)
Ejemplo n.º 2
0
    def __setitem__(self, cpv, values):
        """set a cpv to values
		This shouldn't be overriden in derived classes since it handles the readonly checks"""
        if self.readonly:
            raise cache_errors.ReadOnlyRestriction()
        d = None
        if self.cleanse_keys:
            d = ProtectedDict(values)
            for k, v in list(item for item in d.items()
                             if item[0] != "_eclasses_"):
                if not v:
                    del d[k]
        if "_eclasses_" in values:
            if d is None:
                d = ProtectedDict(values)
            if self.serialize_eclasses:
                d["_eclasses_"] = serialize_eclasses(
                    d["_eclasses_"],
                    self.validation_chf,
                    paths=self.store_eclass_paths)
            else:
                d["_eclasses_"] = self._internal_eclasses(
                    d["_eclasses_"], self.validation_chf,
                    self.store_eclass_paths)
        elif d is None:
            d = values
        self._setitem(cpv, d)
        if not self.autocommits:
            self.updates += 1
            if self.updates > self.sync_rate:
                self.commit()
                self.updates = 0
Ejemplo n.º 3
0
    def __delitem__(self, cpv):
        """delete a key from the cache.
		This shouldn't be overriden in derived classes since it handles the readonly checks"""
        if self.readonly:
            raise cache_errors.ReadOnlyRestriction()
        if not self.autocommits:
            self.updates += 1
        self._delitem(cpv)
        if self.updates > self.sync_rate:
            self.commit()
            self.updates = 0
Ejemplo n.º 4
0
    def __setitem__(self, cpv, values):
        """set a cpv to values
		This shouldn't be overriden in derived classes since it handles the readonly checks"""
        if self.readonly:
            raise cache_errors.ReadOnlyRestriction()
        if self.cleanse_keys:
            d = ProtectedDict(values)
            for k, v in list(d.items()):
                if not v:
                    del d[k]
            if self.serialize_eclasses and "_eclasses_" in values:
                d["_eclasses_"] = serialize_eclasses(d["_eclasses_"])
        elif self.serialize_eclasses and "_eclasses_" in values:
            d = ProtectedDict(values)
            d["_eclasses_"] = serialize_eclasses(d["_eclasses_"])
        else:
            d = values
        self._setitem(cpv, d)
        if not self.autocommits:
            self.updates += 1
            if self.updates > self.sync_rate:
                self.commit()
                self.updates = 0