--- cdli/cdli_files.py 2005/11/03 01:47:58 1.1 +++ cdli/cdli_files.py 2005/11/28 12:31:56 1.2 @@ -1,7 +1,7 @@ """CDLI extensions of the filearchive""" from Products.versionedFile.versionedFile import * from Products.ZCatalog.CatalogPathAwareness import CatalogAware -from tempfile import mkstemp +from tempfile import mkstemp,mkdtemp import os.path import os from types import * @@ -112,6 +112,7 @@ def manage_addBasket(self,id,title,RESPO class BasketObject(Folder): """Basket Object""" + meta_type="basketObject" def __init__(self): """init basket object""" self.contents=[] @@ -151,19 +152,62 @@ class BasketObject(Folder): RESPONSE.redirect(self.absolute_url()) - - def downloadObjectsAsOneFile(self,REQUEST): + def unlockTest(self): + """unlock all files of the testuser for debuggin""" + for object in self.contents: + + if str(object.lockedBy)=="test": + object.lockedBy="" + + def downloadObjectsAsOneFile(self,lock=None,procedure=None,REQUEST=None): """download all selected files in one file""" + ret="" - for object in self.contents: + lockedObjects={} + - ret+=object.getLastVersion().data + if lock: + + if str(self.REQUEST['AUTHENTICATED_USER'])=='Anonymous User': + + return "please login first" + + #check if a locked object exist in the basket. + lockedObjects={} + for object in self.contents: + + if not object.lockedBy=="": + lockedObjects[object.title]=repr(object.lockedBy) + + + keys=lockedObjects.keys() + + + if len(keys)>0 and (not procedure): + self.REQUEST.SESSION['lockedObjects']=lockedObjects + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','lockedObjects.zpt')).__of__(self) + return pt() + + elif not procedure: #keine fails gesperrt dann alle donwloaden + procedure="downloadAll" + print procedure + for object in self.contents: + + if (procedure=="downloadAll") or (object.lockedBy=='') or (object.lockedBy==self.REQUEST['AUTHENTICATED_USER']): + ret+=object.getLastVersion().data + + if lock and object.lockedBy=='': + object.lockedBy=self.REQUEST['AUTHENTICATED_USER'] + + self.REQUEST.RESPONSE.setHeader("Content-Disposition","""attachement; filename="basket_%s.atf" """%self.getId()) self.REQUEST.RESPONSE.setHeader("Content-Type","application/octet-stream") - len=len(ret) - self.REQUEST.RESPONSE.setHeader("Content-Length",len) + length=len(ret) + self.REQUEST.RESPONSE.setHeader("Content-Length",length) self.REQUEST.RESPONSE.write(ret) + + def manage_addBasketObjectForm(self): """add form""" pass @@ -249,6 +293,27 @@ def manage_addCDLIFileObject(self,id,vC= REQUEST['RESPONSE'].redirect(self.absolute_url()+'/manage_main') +def splitatf(fh,dir=None): + """split it""" + + nf=None + for line in fh.readlines(): + + if (len(line.lstrip())>0) and (line.lstrip()[0]=="&"): #newfile + if nf: + nf.close() #close last file + + + filename=line[1:].split("=")[0].rstrip()+".atf" + if dir: + filename=os.path.join(dir,filename) + nf=file(filename,"w") + + nf.write(line) + + nf.close() + fh.close() + class CDLIFileFolder(versionedFileFolder): """CDLI folder""" @@ -257,9 +322,33 @@ class CDLIFileFolder(versionedFileFolder folderMetaType=['CDLI Folder'] default_catalog='CDLICatalog' - def uploadATF(self,upload,RESPONSE): + def uploadATF(self,upload,comment="",RESPONSE=None): """upload an atf file""" - mks + #TODO: finish uploadATF + dir=mkdtemp() + changed=[] + errors=[] + splitatf(upload,dir) + + for fn in os.listdir(dir): + founds=self.CDLICatalog.search({'path':fn}) + + for found in founds: + obj=found.getObject() + + if (not obj.lockedBy=='') and (not obj.lockedBy==self.REQUEST['AUTHENTICATED_USER']): + errors.append(obj) + else: + data=file(os.path.join(dir,fn)).read() + diffs=obj.diff(data) + if diffs[0]>0: + changed.append((obj,diffs)) + #hochladen + + + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','uploadCheck.zpt')).__of__(self) + return pt(changed=changed,errors=errors,dir=dir) + def findObjectsFromList(self,upload,RESPONSE):