--- versionedFile/extVersionedFile.py 2007/06/25 11:05:03 1.5 +++ versionedFile/extVersionedFile.py 2007/08/31 13:31:20 1.6 @@ -18,9 +18,9 @@ from Products.ExtFile.ExtFile import * from Products.ZCatalog.CatalogPathAwareness import CatalogAware try: - from Products.ImageArchive.ImageArchive import manage_AddImageZogiLib + from Products.ImageArchive.ImageArchive import manage_AddImageZogiLib except: - print "no images" + print "no images" from threading import Thread import shutil @@ -35,8 +35,8 @@ try: except: print "ECHO Elements not imported" class ECHO_basis: - """leer""" - manage_options=() + """leer""" + manage_options=() def sortv(x,y): @@ -56,19 +56,19 @@ class generateDownloadZip: def __call__(self): """call generate download zip""" storeTempDir=tempfile.tempdir - tempfile.tempdir=tdir + tempfile.tempdir=tdir tmpPath=tempfile.mktemp() - tmpZip=tempfile.mktemp()+".gtz" + tmpZip=tempfile.mktemp()+".tgz" tmpFn=os.path.split(tmpZip)[1] if not os.path.exists(tempfile.tempdir): os.mkdir(tempfile.tempdir) if not os.path.exists(tmpPath): - os.mkdir(tmpPath) + os.mkdir(tmpPath) - self.response="

1. step: getting the files

" + self.response="

1. step: getting the files

" for files in self.folder.ZopeFind(self.folder,obj_metatypes=['extVersionedFile']): lastV=files[1].getLastVersion() @@ -80,7 +80,7 @@ class generateDownloadZip: fh.close() self.response+="

2. step: creating the downloadable file

" - self.response+="

Create gtar
" + self.response+="

Create gtar
" self.response+="

This can take a while....
\n" fh=os.popen2("tar zcvf %s %s/*"%(tmpZip,tmpPath),1)[1] @@ -89,9 +89,6 @@ class generateDownloadZip: self.response+=c if c==")": self.response+="
\n" - - - shutil.rmtree(tmpPath) @@ -106,7 +103,7 @@ class generateDownloadZip: self.done=True - + def getResult(self): """get result""" return self.response @@ -120,28 +117,28 @@ class generateDownloadZip: class extVersionedFileFolder(Folder,ECHO_basis): """Folder with versioned files""" - - meta_type = "extVersionedFileFolder" security= ClassSecurityInfo() security.declareProtected('AUTHENTICATED_USER','addFileForm') + filesMetaType=['extVersionedFile'] + if ECHO_basis: optTMP= Folder.manage_options+ECHO_basis.manage_options else: optTMP= Folder.manage_options manage_options =optTMP+( - {'label':'Generate Index.html','action':'generateIndexHTML'}, - {'label':'Generate Image Index.html','action':'generateIndexHTML_image'}, - {'label':'Generate history_template.html','action':'generateHistoryHTML'}, - {'label':'Import Folder','action':'importFolderForm'}, - {'label':'Export Folder','action':'exportFolder'}, - {'label':'Position of version number','action':'changeHistoryFileNamesForm'}, - ) + {'label':'Generate Index.html','action':'generateIndexHTML'}, + {'label':'Generate Image Index.html','action':'generateIndexHTML_image'}, + {'label':'Generate history_template.html','action':'generateHistoryHTML'}, + {'label':'Import Folder','action':'importFolderForm'}, + {'label':'Export Folder','action':'exportFolder'}, + {'label':'Position of version number','action':'changeHistoryFileNamesForm'}, + ) - + def changeHistoryFileNamesForm(self): """change position of version num""" pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeHistoryFileNamesForm.zpt')).__of__(self) @@ -150,17 +147,14 @@ class extVersionedFileFolder(Folder,ECHO def changeHistoryFileNames(self,positionVersionNum="front",RESPONSE=None): """change position of version num""" - - - versions=self.ZopeFind(self,obj_metatypes=['extVersionedFileObject'],search_sub=1) if not (getattr(self,'positionVersionNum','front')==positionVersionNum): for version in versions: - + if positionVersionNum=="front": - + titleTmp=os.path.splitext(version[1].title) titleTmp2="_".join(titleTmp[0].split("_")[0:-1]) if len(titleTmp)>1: @@ -176,12 +170,9 @@ class extVersionedFileFolder(Folder,ECHO else: id=tmp[0]+"_"+version[1].getId().split("_")[0] - - version[1].aq_parent.manage_renameObjects(ids=[version[1].getId()],new_ids=[id]) version[1].title=id - self.positionVersionNum=positionVersionNum if RESPONSE: RESPONSE.redirect("manage_main") @@ -192,7 +183,7 @@ class extVersionedFileFolder(Folder,ECHO """form fuer folder import""" pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','importFolderForm.zpt')).__of__(self) return pt() - + def importFolder(self,path,comment="",author=None,lockedBy=None,RESPONSE=None): """importiere inhalt eines folders""" @@ -227,10 +218,10 @@ class extVersionedFileFolder(Folder,ECHO ## if not threadName or threadName=="": ## threadStart=generateDownloadZip(self,self.absolute_url()) ## thread=Thread(target=threadStart) - + ## thread.start() - + ## self.zipThreads[thread.getName()[0:]]=threadStart ## self.zipThreads2[thread.getName()[0:]]=thread ## self.REQUEST.SESSION['threadName']=thread.getName()[0:] @@ -239,7 +230,7 @@ class extVersionedFileFolder(Folder,ECHO ## return wait_template[0][1]() ## pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','zip_wait.zpt')).__of__(self) ## return pt() - + ## else: ## self.REQUEST.SESSION['threadName']=threadName @@ -267,17 +258,17 @@ class extVersionedFileFolder(Folder,ECHO ## return pt() def downloadSet(self,fn): - """download prepared set""" - filename=os.path.join(tdir,fn) + """download prepared set""" + filename=os.path.join(tdir,fn) - - self.REQUEST.RESPONSE.setHeader("Content-Disposition","""attachement; filename="%s" """%"downloadFileFolder.tgz") - self.REQUEST.RESPONSE.setHeader("Content-Type","application/octet-stream") - len=os.stat(filename)[6] - self.REQUEST.RESPONSE.setHeader("Content-Length",len) - images=file(filename).read() - self.REQUEST.RESPONSE.write(images) - self.REQUEST.RESPONSE.close() + + self.REQUEST.RESPONSE.setHeader("Content-Disposition","""attachement; filename="%s" """%"downloadFileFolder.tgz") + self.REQUEST.RESPONSE.setHeader("Content-Type","application/octet-stream") + len=os.stat(filename)[6] + self.REQUEST.RESPONSE.setHeader("Content-Length",len) + images=file(filename).read() + self.REQUEST.RESPONSE.write(images) + self.REQUEST.RESPONSE.close() @@ -295,7 +286,7 @@ class extVersionedFileFolder(Folder,ECHO zt=ZopePageTemplate('index.html') self._setObject('index.html',zt) default_content_fn = os.path.join(package_home(globals()), - 'zpt/versionFileFolderMain_image.zpt') + 'zpt/versionFileFolderMain_image.zpt') text = open(default_content_fn).read() zt.pt_edit(text, 'text/html') @@ -314,7 +305,7 @@ class extVersionedFileFolder(Folder,ECHO zt=ZopePageTemplate('index.html') self._setObject('index.html',zt) default_content_fn = os.path.join(package_home(globals()), - 'zpt/versionFileFolderMain.zpt') + 'zpt/versionFileFolderMain.zpt') text = open(default_content_fn).read() zt.pt_edit(text, 'text/html') @@ -327,13 +318,11 @@ class extVersionedFileFolder(Folder,ECHO def generateIndexHTML(self,RESPONSE=None): """lege standard index.html an""" - - if not self.ZopeFind(self,obj_ids=['index.html']): zt=ZopePageTemplate('index.html') self._setObject('index.html',zt) default_content_fn = os.path.join(package_home(globals()), - 'zpt/versionFileFolderMain.zpt') + 'zpt/versionFileFolderMain.zpt') text = open(default_content_fn).read() zt.pt_edit(text, 'text/html') @@ -346,14 +335,11 @@ class extVersionedFileFolder(Folder,ECHO def generateHistoryHTML(self,RESPONSE=None): """lege standard index.html an""" - - - if not self.ZopeFind(self,obj_ids=['history_template.html']): zt=ZopePageTemplate('history_template.html') self._setObject('history_template.html',zt) default_content_fn = os.path.join(package_home(globals()), - 'zpt/versionHistory.zpt') + 'zpt/versionHistory.zpt') text = open(default_content_fn).read() zt.pt_edit(text, 'text/html') @@ -362,9 +348,7 @@ class extVersionedFileFolder(Folder,ECHO if RESPONSE is not None: RESPONSE.redirect('manage_main') - - - + def getVersionedFiles(self,sortField='title'): """get all versioned files""" @@ -375,36 +359,30 @@ class extVersionedFileFolder(Folder,ECHO def sortDate(x,y): return cmp(y[1].getLastVersion().getTime(),x[1].getLastVersion().getTime()) - def sortComment(x,y): - - - - try: - xc=getattr(x[1],'comment','ZZZZZZZZZZZZZ').lower() - except: - xc='ZZZZZZZZZZZZZ'.lower() - try: - yc=getattr(y[1],'comment','ZZZZZZZZZZZZZ').lower() - except: - yc='ZZZZZZZZZZZZZ'.lower() - - - if (xc=='') or (xc=='ZZZZZZZZZZZZZ'.lower()): - - try: - xc=x[1].getLastVersion().getVComment().lower() - except: - xc='ZZZZZZZZZZZZZ'.lower() - - if (yc=='') or (yc=='ZZZZZZZZZZZZZ'.lower()): - try: - yc=y[1].getLastVersion().getVComment().lower() - except: - yc='ZZZZZZZZZZZZZ'.lower() - - - return cmp(xc,yc) + try: + xc=getattr(x[1],'comment','ZZZZZZZZZZZZZ').lower() + except: + xc='ZZZZZZZZZZZZZ'.lower() + + try: + yc=getattr(y[1],'comment','ZZZZZZZZZZZZZ').lower() + except: + yc='ZZZZZZZZZZZZZ'.lower() + + if (xc=='') or (xc=='ZZZZZZZZZZZZZ'.lower()): + try: + xc=x[1].getLastVersion().getVComment().lower() + except: + xc='ZZZZZZZZZZZZZ'.lower() + + if (yc=='') or (yc=='ZZZZZZZZZZZZZ'.lower()): + try: + yc=y[1].getLastVersion().getVComment().lower() + except: + yc='ZZZZZZZZZZZZZ'.lower() + + return cmp(xc,yc) def sortAuthor(x,y): @@ -412,7 +390,6 @@ class extVersionedFileFolder(Folder,ECHO versionedFiles=self.ZopeFind(self,obj_metatypes=self.filesMetaType) - if sortField=='title': versionedFiles.sort(sortName) elif sortField=='date': @@ -461,9 +438,9 @@ class extVersionedFileFolder(Folder,ECHO if newName=='': filename=file.filename id=filename[max(filename.rfind('/'), - filename.rfind('\\'), - filename.rfind(':'), - )+1:] + filename.rfind('\\'), + filename.rfind(':'), + )+1:] else: id=newName @@ -471,8 +448,8 @@ class extVersionedFileFolder(Folder,ECHO vC=self.REQUEST.form['vC'] manage_addextVersionedFile(self,id,'','') #if (getattr(self,'commentNonEmpty',0)==1) and vC.strip()=="": - - + + ob=self._getOb(id) ob.title=id file2=file @@ -506,9 +483,9 @@ manage_addextVersionedFileFolderForm=DTM def manage_addextVersionedFileFolder(self, id, title='', - createPublic=0, - createUserF=0, - REQUEST=None): + createPublic=0, + createUserF=0, + REQUEST=None): """Add a new Folder object with id *id*. If the 'createPublic' and 'createUserF' parameters are set to any true @@ -526,11 +503,11 @@ def manage_addextVersionedFileFolder(sel if createUserF: if not checkPermission('Add User Folders', ob): raise Unauthorized, ( - 'You are not authorized to add User Folders.' - ) + 'You are not authorized to add User Folders.' + ) ob.manage_addUserFolder() - + if REQUEST is not None: return self.manage_main(self, REQUEST, update_menu=1) @@ -545,15 +522,15 @@ class extVersionedFileObject(ExtFile): Kind='File',kind='file') manage_editForm._setName('manage_editForm') - - - security.declarePublic('getTitle') - def getTitle(self): """get title""" return self.title - + + def getData(self): + """returns object content (calls ExtFile.index_html)""" + return ExtFile.index_html(self) + security.declarePublic('getVComment') def getVComment(self): """get the comment of this file""" @@ -562,14 +539,11 @@ class extVersionedFileObject(ExtFile): else: return self.vComment - + def manageVCommentForm(self): """add a comment""" self.REQUEST.SESSION['refer']=self.REQUEST['HTTP_REFERER'] - - - pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addVComment')).__of__(self) return pt() @@ -603,7 +577,7 @@ class extVersionedFileObject(ExtFile): if hasattr(self,'time'): return time.strftime("%Y-%m-%d %H:%M:%S",self.time) elif hasattr(self,'timefixed'): - return self.timefixed + return self.timefixed else: setattr(self,'timefixed',self.bobobase_modification_time().ISO()) return self.bobobase_modification_time().ISO() @@ -652,7 +626,6 @@ class extVersionedFileObject(ExtFile): security.declarePublic('getVersionNumber') - def getVersionNumber(self): """get version""" return self.versionNumber @@ -662,10 +635,9 @@ class extVersionedFileObject(ExtFile): """get version""" return self.versionComment - + security.declarePublic('lastEditor') - def lastEditor(self): """last Editor""" if hasattr(self,'author'): @@ -683,14 +655,12 @@ class extVersionedFileObject(ExtFile): if jar is None or oid is None: return None return jar.db().history(oid)[0]['user_name'] - - manage_addextVersionedFileObjectForm=DTMLFile('dtml/fileAdd', globals(),Kind='extVersionedFileObject',kind='extVersionedFileObject', version='1') def manage_addextVersionedFileObject(self,id,vC='',author='', file='',title='',precondition='', content_type='', - REQUEST=None): + REQUEST=None): """Add a new File object. Creates a new File object 'id' with the contents of 'file'""" @@ -737,9 +707,9 @@ class extVersionedFile(CatalogAware,Fold return self.title def PrincipiaSearchSource(self): - """Return cataloguable key for ourselves.""" - return str(self) - + """Return cataloguable key for ourselves.""" + return str(self) + def __init__(self, id, title, lockedBy,author): """init""" self.id=id @@ -785,7 +755,7 @@ class extVersionedFile(CatalogAware,Fold return REQUEST.RESPONSE.redirect(self.REQUEST.SESSION['refer']) return REQUEST.RESPONSE.redirect(self.aq_parent.absolute_url()) - + def getImages(self): @@ -795,7 +765,7 @@ class extVersionedFile(CatalogAware,Fold return None else: return images - + security.declarePublic('getComment') def getComment(self): """get the comment of this file""" @@ -804,7 +774,7 @@ class extVersionedFile(CatalogAware,Fold else: return self.comment - + meta_type="extVersionedFile" @@ -825,7 +795,7 @@ class extVersionedFile(CatalogAware,Fold self.comment_date=time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()) return REQUEST.RESPONSE.redirect(self.aq_parent.absolute_url()) - + security.declarePublic('getLastChangeDate') def getLastChangeDate(self): @@ -843,14 +813,13 @@ class extVersionedFile(CatalogAware,Fold def getLockedBy(self): """get locked by""" return str(self.lockedBy) - + security.declarePublic('getLastVersion') def getLastVersion(self): """Last Version""" tmp=0 lastVersion=None - for version in self.ZopeFind(self): if hasattr(version[1],'versionNumber'): @@ -870,7 +839,7 @@ class extVersionedFile(CatalogAware,Fold tmp=self.getLastVersion().getData() #print "XX",data,tmp try: - l=list(d.compare(data.splitlines(1),tmp.splitlines(1))) + l=list(d.compare(data.splitlines(1),tmp.splitlines(1))) except: return 0,"" plus=0 @@ -881,8 +850,9 @@ class extVersionedFile(CatalogAware,Fold if a[0]=='-': minus+=1 - return max([plus,minus]),l + + security.declarePublic('index_html') def index_html(self): """main view""" @@ -891,7 +861,7 @@ class extVersionedFile(CatalogAware,Fold #return "File: %s Version:%i modified:%s size:%s modified by:%s"%(self.title,lastVersion.versionNumber,lastVersion.getTime(),lastVersion.getSize(),lastVersion.lastEditor()) return self.history() - + security.declarePublic('getVersion') def getVersion(self): tmp=0 @@ -904,8 +874,6 @@ class extVersionedFile(CatalogAware,Fold return tmp+1 - security.declareProtected('AUTHENTICATED_USER','unlock') - def history(self): """history""" @@ -948,7 +916,6 @@ class extVersionedFile(CatalogAware,Fold security.declareProtected('AUTHENTICATED_USER','addVersionedFileObjectForm') - def addVersionedFileObjectForm(self): """add a new version""" @@ -976,18 +943,13 @@ class extVersionedFile(CatalogAware,Fold if changeName=="yes": filename=file.filename self.title=filename[max(filename.rfind('/'), - filename.rfind('\\'), - filename.rfind(':'), - )+1:] - + filename.rfind('\\'), + filename.rfind(':'), + )+1:] if not newName=='': self.title=newName[0:] - - - - positionVersionNum=getattr(self,'positionVersionNum','front') if positionVersionNum=='front': @@ -998,7 +960,6 @@ class extVersionedFile(CatalogAware,Fold id=tmp[0]+"_V%i"%self.getVersion()+tmp[1] else: id=tmp[0]+"_V%i"%self.getVersion() - manage_addextVersionedFileObject(self,id,vC,author,file,id,precondition, content_type) objs=self.ZopeFind(self,obj_ids=[id])[0][1].setVersionNumber(int(self.getVersion())) @@ -1020,28 +981,13 @@ class extVersionedFile(CatalogAware,Fold else: return self.ZopeFind(self,obj_ids=[id])[0][1] - - security.declareProtected('AUTHENTICATED_USER','downloadLocked') + def download(self): """download and lock""" - self.REQUEST.RESPONSE.setHeader("Content-Disposition","""attachement; filename=%s"""%self.getLastVersion().getId()) self.REQUEST.RESPONSE.setHeader("Content-Type","application/octet-stream") - - #try: - # txt=self.getLastVersion.index_html() - #except: - # txt=self.getLastVersion.index_html(REQUEST,RESPONSE) - - #self.REQUEST.RESPONSE.setHeader("Content-Length","str(len(txt)+1000)") - self.content_type="application/octet-stream" - #self.REQUEST.RESPONSE.write("bl") - #self.REQUEST.RESPONSE.write(txt) - #self.REQUEST.close() - - #self.getLastVersion().content_type="application/octet-stream" self.REQUEST.RESPONSE.redirect(self.REQUEST['URL1']+'/'+self.getId()+'/'+self.getLastVersion().getId()) security.declareProtected('AUTHENTICATED_USER','downloadLocked') @@ -1065,7 +1011,7 @@ def manage_addextVersionedFile(self,id,t """add the OSAS_root""" newObj=extVersionedFile(id,title,lockedBy,author) self._setObject(id,newObj) - + if RESPONSE is not None: RESPONSE.redirect('manage_main')