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)
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
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
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