Beispiel #1
0
def defFS(path, fobj):
	if os.path.isdir(path):
		# new dir
		return FSDirectory, { 'path': path }
	elif os.path.isfile(path):
		# new file - fall through to below
		pass
	else:
		log.msg('skipping (not dir or reg): %s' % path)
		return None, None

	klass, mt = FileDIDL.buildClassMT(FSItem, path)

	return klass, { 'path': path, 'mimetype': mt }
Beispiel #2
0
	def doUpdate(self):
		# open the zipfile as necessary.
		self.zip = genZipFile(self.FSpath)
		nl = self.zip.namelist()
		cnt = 0
		cursep = None
		for i in self.seps:
			newsum = sum([ j.count(i) for j in nl ])
			if newsum > cnt:
				cursep = i
				cnt = newsum
		self.sep = cursep
		hier = buildNameHier(nl, self.zip.infolist(), cursep)

		doupdate = False
		children = sets.Set(hier.keys())
		for i in self.pathObjmap.keys():
			if i not in children:
				doupdate = True
				# delete
				self.cd.delItem(self.pathObjmap[i])
				del self.pathObjmap[i]

		for i in children:
			if i in self.pathObjmap:
				continue

			# new object
			if isinstance(hier[i], dict):
				# must be a dir
				self.pathObjmap[i] = self.cd.addItem(self.id,
				    ZipChildDir, i, zf=self.zip, zo=self,
				    name=i, hier=hier[i], sep=cursep)
			else:
				klass, mt = FileDIDL.buildClassMT(ZipFile, i)
				if klass is None:
					continue
				self.pathObjmap[i] = self.cd.addItem(self.id,
				    klass, i, zf = self.zip, zo = self,
				    name = i, mimetype = mt)
			doupdate = True

		# sort our children
		self.sort(lambda x, y: cmp(x.title, y.title))

		if doupdate:
			StorageFolder.doUpdate(self)
Beispiel #3
0
	def doUpdate(self):
		doupdate = False
		children = sets.Set(self.hier.keys())
		for i in self.pathObjmap.keys():
			if i not in children:
				# delete
				doupdate = True
				self.cd.delItem(self.pathObjmap[i])
				del self.pathObjmap[i]

		cursep = self.sep
		for i in children:
			if i in self.pathObjmap:
				continue

			# new object
			pathname = cursep.join((self.name, i))
			if isinstance(self.hier[i], dict):
				# must be a dir
				self.pathObjmap[i] = self.cd.addItem(self.id,
				    ZipChildDir, i, zf=self.zf, zo=self,
				    name=pathname, hier=self.hier[i],
				    sep=cursep)
			else:
				klass, mt = FileDIDL.buildClassMT(ZipFile, i)
				if klass is None:
					continue
				self.pathObjmap[i] = self.cd.addItem(self.id,
				    klass, i, zf = self.zf, zo = self,
				    name = pathname, mimetype = mt)
			doupdate = True

		# sort our children
		self.sort(lambda x, y: cmp(x.title, y.title))
		if doupdate:
			StorageFolder.doUpdate(self)