Exemple #1
0
	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')
Exemple #2
0
	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