def _p_initialize(self, conn=None): Persistent._p_initialize(self, conn) filename = self._p_conn.filename base = path_join(abspath(dirname(filename)), '%s.anonymous' %filename) uuid = uuid4() p1 = path_join(base, uuid[:2]) p2 = path_join(p1, uuid[2:4]) if not exists(base): self._p_filename = ((base, p1, p2), path_join(p2, uuid[4:])) self.uuid = uuid return for i in xrange(20): uuid = uuid4() p1 = path_join(base, uuid[:2]) p2 = path_join(p1, uuid[2:4]) p3 = path_join(p2, uuid[4:]) if exists(p1): if exists(p2): if exists(p3): continue else: self._p_filename = p3 self.uuid = uuid break else: self._p_filename = ((p2, ), p3) self.uuid = uuid break else: self._p_filename = ((p1, p2), p3) self.uuid = uuid break try: if self.uuid: return except AttributeError: raise RuntimeError('generate uuid faild')
def _p_release(self): Persistent._p_release(self) filename = self._p_conn.filename base = path_join(abspath(dirname(filename)), '%s.anonymous' %filename) uuid = self.uuid p1 = path_join(base, uuid[:2]) p2 = path_join(p1, uuid[2:4]) p3 = path_join(p2, uuid[4:]) if not exists(p3): return remove(p3) for i in (p2, p1, base): try: rmdir(i) except OSError, e: if e.errno == 39: return raise