try:
self._ensure_dirs()
self._ensure_dirs(self._db_path)
- self._ensure_access(self._db_path)
except (OSError, IOError), e:
raise cache_errors.InitializationError(self.__class__, e)
try:
if self.__db == None:
self.__db = anydbm_module.open(self._db_path, "c", self._perms)
- except andbm_module.error, e:
+ except anydbm_module.error, e:
raise cache_errors.InitializationError(self.__class__, e)
+ self._ensure_access(self._db_path)
def iteritems(self):
return self.__db.iteritems()
del self.__db[cpv]
def __iter__(self):
- return iter(self.__db)
+ return iter(self.__db.keys())
def __contains__(self, cpv):
return cpv in self.__db
else:
raise cache_errors.CacheCorruption(cpv, e)
- for k, v in values.items():
+ for k, v in values.iteritems():
if k != "_mtime_" and (k == "_eclasses_" or k in self._known_keys):
- myf.writelines("%s=%s\n" % (k, v))
+ myf.write("%s=%s\n" % (k, v))
myf.close()
self._ensure_access(fp, mtime=values["_mtime_"])
elif c == "_" or c.isdigit():
continue
break
- elif not c.isupper():
- break
-
+
if not hashed:
# non hashed.
d.clear()
return value
def _setitem(self, name, values):
- try:
- value_ro = self.db_ro[name]
- if self._are_values_identical(value_ro,values):
- # we have matching values in the underlying db_ro
- # so it is unnecessary to store data in db_rw
- try:
- del self.db_rw[name] # delete unwanted whiteout when necessary
- except KeyError:
- pass
- except KeyError:
- self.db_rw[name] = values
+ value_ro = self.db_ro.get(name, None)
+ if value_ro is not None and \
+ self._are_values_identical(value_ro, values):
+ # we have matching values in the underlying db_ro
+ # so it is unnecessary to store data in db_rw
+ try:
+ del self.db_rw[name] # delete unwanted whiteout when necessary
+ except KeyError:
+ pass
+ return
+ self.db_rw[name] = values
def _delitem(self, cpv):
value = self[cpv] # validates whiteout and/or raises a KeyError when necessary