def __setitem__(self, cpv, values): """set a cpv to values This shouldn't be overridden in derived classes since it handles the readonly checks. """ if self.readonly: raise errors.ReadOnly() d = ProtectedDict(values) if self.cleanse_keys: for k in d.keys(): if not d[k]: del d[k] if "_eclasses_" in values: d["_eclasses_"] = self.deconstruct_eclasses(d["_eclasses_"]) elif "_eclasses_" in values: d["_eclasses_"] = self.deconstruct_eclasses(d["_eclasses_"]) d[self._chf_key] = self._chf_serializer(d.pop('_chf_')) self._setitem(cpv, d) self._sync_if_needed(True)
def __setitem__(self, cpv, values): """set a cpv to values This shouldn't be overridden in derived classes since it handles the readonly checks. """ if self.readonly: raise errors.ReadOnly() d = ProtectedDict(values) if self.cleanse_keys: for k in d.iterkeys(): if not d[k]: del d[k] if "_eclasses_" in values: d["_eclasses_"] = self.deconstruct_eclasses(d["_eclasses_"]) elif "_eclasses_" in values: d["_eclasses_"] = self.deconstruct_eclasses(d["_eclasses_"]) d[self._chf_key] = self._chf_serializer(d.pop('_chf_')) self._setitem(cpv, d) self._sync_if_needed(True)
def _setitem(self, cpv, values): values = ProtectedDict(values) # hack. proper solution is to make this a __setitem__ override, since # template.__setitem__ serializes _eclasses_, then we reconstruct it. eclasses = values.pop('_eclasses_', None) if eclasses is not None: eclasses = self.reconstruct_eclasses(cpv, eclasses) values["INHERITED"] = ' '.join(eclasses) s = cpv.rfind('/') fp = pjoin(self.location, cpv[:s], f'.update.{os.getpid()}.{cpv[s+1:]}') try: myf = open(fp, "w") except FileNotFoundError: try: self._ensure_dirs(cpv) myf = open(fp, "w") except EnvironmentError as e: raise errors.CacheCorruption(cpv, e) from e except EnvironmentError as e: raise errors.CacheCorruption(cpv, e) from e count = 0 for idx, key in self.hardcoded_auxdbkeys_order: myf.write("%s%s" % ("\n" * (idx - count), values.get(key, ""))) count = idx myf.write("\n" * (self.magic_line_count - count)) myf.close() self._set_mtime(fp, values, eclasses) # update written, now we move it new_fp = pjoin(self.location, cpv) try: os.rename(fp, new_fp) except EnvironmentError as e: os.remove(fp) raise errors.CacheCorruption(cpv, e) from e
def _setitem(self, cpv, values): values = ProtectedDict(values) # hack. proper solution is to make this a __setitem__ override, since # template.__setitem__ serializes _eclasses_, then we reconstruct it. eclasses = values.pop('_eclasses_', None) if eclasses is not None: eclasses = self.reconstruct_eclasses(cpv, eclasses) values["INHERITED"] = ' '.join(eclasses) s = cpv.rfind("/") fp = pjoin( self.location, cpv[:s], ".update.%i.%s" % (os.getpid(), cpv[s+1:])) try: myf = open(fp, "w") except EnvironmentError as e: if errno.ENOENT != e.errno: raise_from(errors.CacheCorruption(cpv, e)) try: self._ensure_dirs(cpv) myf = open(fp, "w") except EnvironmentError as e: raise_from(errors.CacheCorruption(cpv, e)) count = 0 for idx, key in self.hardcoded_auxdbkeys_order: myf.write("%s%s" % ("\n" * (idx - count), values.get(key, ""))) count = idx myf.write("\n" * (self.magic_line_count - count)) myf.close() self._set_mtime(fp, values, eclasses) #update written. now we move it. new_fp = pjoin(self.location, cpv) try: os.rename(fp, new_fp) except EnvironmentError as e: os.remove(fp) raise_from(errors.CacheCorruption(cpv, e))
def _setitem(self, cpv, values): values = ProtectedDict(values) # hack. proper solution is to make this a __setitem__ override, since # template.__setitem__ serializes _eclasses_, then we reconstruct it. eclasses = values.pop('_eclasses_', None) if eclasses is not None: eclasses = self.reconstruct_eclasses(cpv, eclasses) values["INHERITED"] = ' '.join(eclasses) s = cpv.rfind("/") fp = pjoin( self.location, cpv[:s],".update.%i.%s" % (os.getpid(), cpv[s+1:])) try: myf = open(fp, "w") except EnvironmentError, e: if errno.ENOENT != e.errno: raise_from(errors.CacheCorruption(cpv, e)) try: self._ensure_dirs(cpv) myf = open(fp,"w") except EnvironmentError, e: raise_from(errors.CacheCorruption(cpv, e))