def _GetTrashcanDirectory(self, id): aP = DvPath() aP.SetStr(str(self.root)) aP.AppendSeperator() aP.AppendDirectory(self.Trashcan) aP.AppendSeperator() aP.AppendDirectory(self._GetDirectory(id)) aP.AppendSeperator() return aP
def test_Create(self): n = self.name p = DvPath(n) self.assert_(p._path == n) self.assert_(str(p) == n) p = DvPath(DvPath(n)) self.assert_(str(p) == n) p.SetStr(n) self.assert_(str(p) == n) self.assert_(p.GetStr() == n)
class FileManager(object): """ Data Pool File Manager class for SQL Database with version support. Files are stored in filesystem, aditional information in database table. Table "pool_files" ("id", "fileid", "filekey", "path", "filename", "size", "extension", "version"). Field path stores internal path to the file in filesystem without root. Preperty descriptions are dictionaries with key:value pairs. Property values: id = unit id to store file for (id is required) version = the version of the file filekey = custom value key: id_filekey_version directory structure: root/id[-4:-2]00/id_filekey_version.ext """ DirectoryCnt = -4 # directory id range limit FileTable = u"pool_files" # file table name FileTableFields = (u"id", u"fileid", u"filekey", u"path", u"filename", u"size", u"extension", u"version") Trashcan = u"_trashcan" def GetFileClass(self): """ Returns the required file class for File object instantiation """ return File def InitFileStorage(self, root, connectionParam): """ Set the local root path for files """ self.root = DvPath() self.root.SetStr(root) if root == u"": return self.root.AppendSeperator() self.root.CreateDirectoriesExcp() def SearchFilename(self, filename): """ search for filename """ return self.SearchFiles({u"filename": filename}) def SearchFiles(self, parameter, sort=u"filename", start=0, max=100, ascending = 1, **kw): """ search files """ flds = self.FileTableFields kw["singleTable"] = 1 sql, values = self.FmtSQLSelect(flds, parameter, dataTable=self.FileTable, sort = sort, start=start, max=max, ascending = ascending, **kw) files = self.Query(sql, values) f2 = [] for f in files: f2.append(self.ConvertRecToDict(f, flds)) return f2 def DeleteFiles(self, id, cursor=None, version=None): """ Delete the file with the prop description """ files = self.SearchFiles({u"id":id}, sort=u"id") if not files: return True entry = self.GetEntry(id, version=version) for f in files: file = self.GetFileClass()(filedict=f,fileentry=entry) file.delete() if len(files): sql = u"delete from %s where id = %d" % (self.FileTable, id) self.Query(sql, cursor=cursor, getResult=False) return True # Internal -------------------------------------------------------------- def _GetDirectory(self, id): """ construct directory path without root """ return (u"%06d" % (id))[self.DirectoryCnt:-2] + u"00/" + (u"%06d" % (id))[self.DirectoryCnt+2:] def _MoveToTrashcan(self, path, id): if not self.useTrashcan: return path.Delete() aP = self._GetTrashcanDirectory(id) aP.SetNameExtension(path.GetNameExtension()) if aP.Exists(): aP.Delete() return path.Rename(str(aP)) def _GetTrashcanDirectory(self, id): aP = DvPath() aP.SetStr(str(self.root)) aP.AppendSeperator() aP.AppendDirectory(self.Trashcan) aP.AppendSeperator() aP.AppendDirectory(self._GetDirectory(id)) aP.AppendSeperator() return aP