|
|
| version 1.86, 2008/09/29 12:37:37 | version 1.93, 2008/10/07 06:53:57 |
|---|---|
| Line 31 from BTrees.IOBTree import IOBTree | Line 31 from BTrees.IOBTree import IOBTree |
| import cdliSplitter | import cdliSplitter |
| from sets import Set | from sets import Set |
| import md5 | import md5 |
| from DownloadBasket import DownloadBasketFinallyThread | |
| def makelist(mySet): | def makelist(mySet): |
| x = list(mySet) | x = list(mySet) |
| Line 401 class uploadATFfinallyThread(Thread): | Line 401 class uploadATFfinallyThread(Thread): |
| basketId=ob.getId() | basketId=ob.getId() |
| basket=getattr(ctx2.basketContainer,str(basketId)) | basket=getattr(ctx2.basketContainer,str(basketId)) |
| ids=os.listdir(SESSION['tmpdir']) | ids=os.listdir(SESSION['tmpdir']) |
| logging.debug("should add:"+repr(ids)) | #logging.debug("should add:"+repr(ids)) |
| basket.addObjects(ids,deleteOld=True,username=str(username)) | basket.addObjects(ids,deleteOld=True,username=str(username)) |
| logging.debug("uploadatffinallythread uploadfinally done") | logging.debug("uploadatffinallythread uploadfinally done") |
| Line 640 class CDLIBasketContainer(OrderedFolder) | Line 640 class CDLIBasketContainer(OrderedFolder) |
| ret+=str(object[0].getData())+"\n" | ret+=str(object[0].getData())+"\n" |
| elif current=="yes": | elif current=="yes": |
| #search current object | #search current object |
| logging.debug("current: %s"%object[1].getId().split(".")[0]) | #logging.debug("current: %s"%object[1].getId().split(".")[0]) |
| founds=self.CDLICatalog.search({'title':object[1].getId().split(".")[0]}) | founds=self.CDLICatalog.search({'title':object[1].getId().split(".")[0]}) |
| if len(founds)>0: | if len(founds)>0: |
| ret+=str(founds[0].getObject().getLastVersion().getData())+"\n" | ret+=str(founds[0].getObject().getLastVersion().getData())+"\n" |
| Line 1032 class CDLIBasket(Folder,CatalogAware): | Line 1032 class CDLIBasket(Folder,CatalogAware): |
| def isActual(self,obj): | def isActual(self,obj): |
| """teste ob im basket die aktuelle version ist""" | """teste ob im basket die aktuelle version ist""" |
| try: | try: |
| logging.debug("isActual:"+repr(obj)) | #logging.debug("isActual:"+repr(obj)) |
| actualNo=obj[1].getLastVersion().getVersionNumber() | actualNo=obj[1].getLastVersion().getVersionNumber() |
| storedNo=obj[0].getVersionNumber() | storedNo=obj[0].getVersionNumber() |
| founds=self.CDLICatalog.search({'title':obj[0].getId()}) | |
| if len(founds)>0: | |
| actualNo=founds[0].getObject().getLastVersion().getVersionNumber() | |
| if len(founds)>0 and founds[0].getObject().aq_parent.getId()==".trash": | #actualNo=self.getFileObjectLastVersion(obj.getId()).getVersionNumber() |
| return False, -1 | |
| #if len(founds)>0 and founds[0].getObject().aq_parent.getId()==".trash": | |
| # return False, -1 | |
| if actualNo==storedNo: | if actualNo==storedNo: |
| return True , 0 | return True , 0 |
| else: | else: |
| return False, actualNo | return False, actualNo |
| except: | except: |
| logging.error( """is actual: %s (%s %s)"""%(repr(obj),sys.exc_info()[0],sys.exc_info()[1])) | |
| return False, -1 | return False, -1 |
| def history(self): | def history(self): |
| Line 1223 class CDLIBasket(Folder,CatalogAware): | Line 1224 class CDLIBasket(Folder,CatalogAware): |
| hash = md5.new(repr(makelist(ids))).hexdigest() # erzeuge hash als identification | hash = md5.new(repr(makelist(ids))).hexdigest() # erzeuge hash als identification |
| #logging.debug("JJJJJJJ:"+repr(self.makelist(ids))) | #logging.debug("JJJJJJJ:"+repr(self.makelist(ids))) |
| logging.debug("JJJJJJJ:"+repr(hash)) | |
| if hasattr(self.cdliRoot,'v_tmpStore') and self.cdliRoot.v_tmpStore.has_key(hash): | |
| if hasattr(self.cdliRoot,'v_tmpStore') and self.cdliRoot.v_tmpStore.has_key("hash"): | |
| logging.debug("from store!") | logging.debug("from store!") |
| newContent=Set(map(swap,self.cdliRoot.v_tmpStore[hash])) | newContent=Set(map(swap,self.cdliRoot.v_tmpStore[hash])) |
| Line 1254 class CDLIBasket(Folder,CatalogAware): | Line 1255 class CDLIBasket(Folder,CatalogAware): |
| lv=self.getLastVersion() | lv=self.getLastVersion() |
| for obj in lv.content.getContent(): | for obj in lv.content.getContent(): |
| logging.info("XXXXXXXXXX %s"%repr(obj)) | #logging.info("XXXXXXXXXX %s"%repr(obj)) |
| ret.append((obj[1].getId(),obj[0].versionNumber)) | ret.append((obj[1].getId(),obj[0].versionNumber)) |
| return ret | return ret |
| Line 1377 class CDLIBasketVersion(Implicit,Persist | Line 1378 class CDLIBasketVersion(Implicit,Persist |
| return self.downloadObjectsAsOneFileFinally(lock=lock,procedure=procedure,REQUEST=REQUEST,current="no") | return self.downloadObjectsAsOneFileFinally(lock=lock,procedure=procedure,REQUEST=REQUEST,current="no") |
| def downloadObjectsAsOneFileFinally(self,lock=None,procedure=None,REQUEST=None,current="no"): | def downloadObjectsAsOneFileFinally(self,lock=None,procedure=None,REQUEST=None,current="no",repeat=None): |
| """print do the download""" | """print do the download""" |
| logging.debug("HIHHHH") | |
| ret="" | ret="" |
| lockedObjects={} | lockedObjects={} |
| self.temp_folder.downloadCounterBaskets+=1 | |
| self._p_changed=1 | |
| transaction.get().commit() | |
| if lock: | |
| if lock: | |
| logging.debug("------lock:"+repr(lock)) | |
| if str(self.REQUEST['AUTHENTICATED_USER'])=='Anonymous User': | if str(self.REQUEST['AUTHENTICATED_USER'])=='Anonymous User': |
| self.temp_folder.downloadCounterBaskets-=1 | |
| self._p_changed=1 | |
| transaction.get().commit() | |
| self.temp_folder.downloadCounterBaskets-=1 | |
| self._p_changed=1 | |
| transaction.get().commit() | |
| return "please login first" | return "please login first" |
| #check if a locked object exist in the basket. | #check if a locked object exist in the basket. |
| Line 1413 class CDLIBasketVersion(Implicit,Persist | Line 1408 class CDLIBasketVersion(Implicit,Persist |
| self.REQUEST.SESSION['lockedObjects']=lockedObjects | self.REQUEST.SESSION['lockedObjects']=lockedObjects |
| pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','lockedObjects.zpt')).__of__(self) | pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','lockedObjects.zpt')).__of__(self) |
| self.temp_folder.downloadCounterBaskets-=1 | |
| self._p_changed=1 | |
| transaction.get().commit() | |
| return pt() | return pt() |
| Line 1425 class CDLIBasketVersion(Implicit,Persist | Line 1417 class CDLIBasketVersion(Implicit,Persist |
| for object in self.content.getContent(): | threadName=repeat |
| logging.error("ret:"+repr(object[0])) | if not threadName or threadName=="": |
| logging.error(" -"+repr(procedure)) | thread=DownloadBasketFinallyThread() |
| logging.error(" -"+repr(object[1].lockedBy)) | threadName=thread.getName()[0:] |
| if (not hasattr(self,'_v_downloadBasket')): | |
| self._v_downloadBasket={} | |
| if (procedure=="downloadAll") or (object[1].lockedBy=='') or (object[1].lockedBy==self.REQUEST['AUTHENTICATED_USER']): | |
| logging.error("ret1") | |
| if current=="no": #version as they are in the basket | |
| logging.error("ret2") | |
| ret+=str(object[0].getData())+"\n" | |
| elif current=="yes": | |
| logging.error("ret3") | |
| #search current object | |
| founds=self.CDLICatalog.search({'title':object[1].getId().split(".")[0]}) | |
| if len(founds)>0: | |
| ret+=str(founds[0].getObject().getLastVersion().getData())+"\n" | |
| if lock and object[1].lockedBy=='': | self._v_downloadBasket[threadName]=thread |
| logging.debug("dwonloadfinally:"+repr(self)) | |
| basketID=self.aq_parent.aq_parent.getId() | |
| versionNumber=self.aq_parent.getId() | |
| if lock: | |
| logging.debug("-----start locking") | |
| for object in self.content.getContent(): | |
| if object[1].lockedBy =='': | |
| object[1].lockedBy=self.REQUEST['AUTHENTICATED_USER'] | object[1].lockedBy=self.REQUEST['AUTHENTICATED_USER'] |
| logging.debug("-----finished locking") | |
| #obj.lockedBy=user | |
| self._v_downloadBasket[threadName].set(lock,procedure,self.REQUEST['AUTHENTICATED_USER'],current,basketID,versionNumber) | |
| self._v_downloadBasket[threadName].start() | |
| wait_template=self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['wait_template']) | |
| if wait_template: | |
| return wait_template[0][1]() | |
| pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','downloadBasketWait.zpt')).__of__(self) | |
| return pt(txt=self.absolute_url()+'/downloadObjectsAsOneFileFinally',threadName=threadName, | |
| counter=self._v_downloadBasket[threadName].getCounter(), | |
| number=self._v_downloadBasket[threadName].getNumberOfFiles()) | |
| #_v_xmltrans.run() | |
| else: | |
| #recover thread, if lost | |
| if not hasattr(self,'_v_downloadBasket'): | |
| self._v_downloadBasket={} | |
| if not self._v_downloadBasket.get(threadName,None): | |
| for thread in threading.enumerate(): | |
| if threadName == thread.getName(): | |
| self._v_downloadBasket[threadName]=thread | |
| if self._v_downloadBasket.get(threadName,None) and (self._v_downloadBasket[threadName] is not None) and (not self._v_downloadBasket[threadName].end) : | |
| wait_template=self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['wait_template']) | |
| if wait_template: | |
| return wait_template[0][1]() | |
| pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','downloadBasketWait.zpt')).__of__(self) | |
| return pt(txt=self.absolute_url()+'/downloadObjectsAsOneFileFinally',threadName=threadName, | |
| counter=self._v_downloadBasket[threadName].getCounter(), | |
| number=self._v_downloadBasket[threadName].getNumberOfFiles()) | |
| else: | |
| logging.debug("FINISHED") | |
| if not self._v_downloadBasket.get(threadName,None): | |
| for thread in threading.enumerate(): | |
| if threadName == thread.getName(): | |
| self._v_downloadBasket[threadName]=thread | |
| #files = self._v_downloadBasket[threadName].result | |
| files=self.basketContainer.resultHash[threadName] | |
| lockedFiles=self.basketContainer.resultLockedHash[threadName] | |
| # fh=file("/var/tmp/test") | |
| #ret =fh.read() | |
| if (not isinstance(self.aq_parent,CDLIBasket)): | if (not isinstance(self.aq_parent,CDLIBasket)): |
| basket_name=self.aq_parent.aq_parent.title+"_V"+self.getId() | basket_name=self.aq_parent.aq_parent.title+"_V"+self.getId() |
| Line 1453 class CDLIBasketVersion(Implicit,Persist | Line 1499 class CDLIBasketVersion(Implicit,Persist |
| #write basketname to header of atf file | #write basketname to header of atf file |
| ret="#basket: %s\n"%basket_name+ret | |
| self.temp_folder.downloadCounterBaskets-=1 | |
| self._p_changed=1 | |
| transaction.get().commit() | |
| self.REQUEST.RESPONSE.setHeader("Content-Disposition","""attachement; filename="%s.atf" """%basket_name) | self.REQUEST.RESPONSE.setHeader("Content-Disposition","""attachement; filename="%s.atf" """%basket_name) |
| self.REQUEST.RESPONSE.setHeader("Content-Type","application/octet-stream") | self.REQUEST.RESPONSE.setHeader("Content-Type","application/octet-stream") |
| length=len(ret) | #length=len(ret) |
| self.REQUEST.RESPONSE.setHeader("Content-Length",length) | #self.REQUEST.RESPONSE.setHeader("Content-Length",length) |
| ret="#basket: %s\n"%basket_name | |
| self.REQUEST.RESPONSE.write(ret) | self.REQUEST.RESPONSE.write(ret) |
| return True | |
| for fileName in files: | |
| try: | |
| self.REQUEST.RESPONSE.write(file(fileName).read()) | |
| except: | |
| logging.error("downloadasonefile: cannot read %s"%fileName) | |
| self.REQUEST.RESPONSE.write("\n# locked files\n") | |
| for fileName in lockedFiles: | |
| self.REQUEST.RESPONSE.write("# %s by %s\n"%fileName) | |
| self.REQUEST.RESPONSE.write("# locked files end\n") | |
| del self.basketContainer.resultHash[threadName] | |
| del self.basketContainer.resultLockedHash[threadName] | |
| def numberOfItems(self): | def numberOfItems(self): |
| """return anzahl der elemente im basket""" | """return anzahl der elemente im basket""" |
| Line 1568 class CDLIFileObject(CatalogAware,extVer | Line 1627 class CDLIFileObject(CatalogAware,extVer |
| """Return cataloguable key for ourselves.""" | """Return cataloguable key for ourselves.""" |
| return str(self) | return str(self) |
| def setAuthor(self, author): | |
| """change the author""" | |
| self.author = author | |
| def makeThisVersionCurrent_html(self): | def makeThisVersionCurrent_html(self): |
| """form for mthis version current""" | """form for mthis version current""" |
| Line 2058 class CDLIFileFolder(extVersionedFileFol | Line 2121 class CDLIFileFolder(extVersionedFileFol |
| ids = fileTree & self.v_file_ids | ids = fileTree & self.v_file_ids |
| #self.REQUEST.SESSION['fileIds']=ids#store fieldIds in session for further usage | #self.REQUEST.SESSION['fileIds']=ids#store fieldIds in session for further usage |
| l=makelist(fileTree)[0:] | l=makelist(fileTree)[0:] |
| logging.debug("l-list:"+repr(l)) | #logging.debug("l-list:"+repr(l)) |
| self.REQUEST.SESSION['fileIds']=l#store fieldIds in session for further usage | self.REQUEST.SESSION['fileIds']=l#store fieldIds in session for further usage |
| self.REQUEST.SESSION['searchList']=l | self.REQUEST.SESSION['searchList']=l |
| #self.REQUEST.SESSION['searchList']=['P000001.atf'] | #self.REQUEST.SESSION['searchList']=['P000001.atf'] |
| Line 2291 class CDLIRoot(Folder): | Line 2354 class CDLIRoot(Folder): |
| def getFileObjectLastVersion(self,fileId): | def getFileObjectLastVersion(self,fileId): |
| """get an object""" | """get an object""" |
| x=self.v_files_lastVersion.get(fileId) | x=self.v_files_lastVersion.get(fileId) |
| #logging.debug(x) | l#ogging.debug("lastVersion: "+repr(x)) |
| return x | return x |
| def showFileIds(self): | def showFileIds(self): |
| Line 2587 class CDLIRoot(Folder): | Line 2650 class CDLIRoot(Folder): |
| return """ 2;url=%s?repeat=%s """%(self.absolute_url()+txt,threadName) | return """ 2;url=%s?repeat=%s """%(self.absolute_url()+txt,threadName) |
| def refreshTxtBasket(self,txt="",threadName=None): | |
| """txt fuer refresh""" | |
| return """ 2;url=%s?repeat=%s """%(txt,threadName) | |
| def getResult(self,threadName=None): | def getResult(self,threadName=None): |
| """result of thread""" | """result of thread""" |