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 }
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)
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)