Diff for /cdli/cdli_files.py between versions 1.86 and 1.87

version 1.86, 2008/09/29 12:37:37 version 1.87, 2008/10/01 15:58:11
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 1036  class CDLIBasket(Folder,CatalogAware): Line 1036  class CDLIBasket(Folder,CatalogAware):
             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
Line 1363  class CDLIBasketVersion(Implicit,Persist Line 1362  class CDLIBasketVersion(Implicit,Persist
     security.declareProtected('manage','downloadObjectsAsOneFile')      security.declareProtected('manage','downloadObjectsAsOneFile')
     def downloadObjectsAsOneFile(self,lock=None,procedure=None,REQUEST=None,check="yes",current="no"):      def downloadObjectsAsOneFile(self,lock=None,procedure=None,REQUEST=None,check="yes",current="no"):
         """download all selected files in one file"""          """download all selected files in one file"""
                  logging.debug("doasof")
         if self.temp_folder.downloadCounterBaskets > 10000:          if self.temp_folder.downloadCounterBaskets > 10000:
             return """I am sorry, currently the server has to many requests for downloads, please come back later!"""              return """I am sorry, currently the server has to many requests for downloads, please come back later!"""
   
Line 1377  class CDLIBasketVersion(Implicit,Persist Line 1376  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")          logging.debug("HIHHHH")
         ret=""          ret=""
         lockedObjects={}          lockedObjects={}
   
         self.temp_folder.downloadCounterBaskets+=1   
         self._p_changed=1  
         transaction.get().commit()         
           
           logging.debug("lock:"+repr(lock))
         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 1406  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 1415  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
                     object[1].lockedBy=self.REQUEST['AUTHENTICATED_USER']              logging.debug("dwonloadfinally:"+repr(self))
               basketID=self.aq_parent.aq_parent.getId()
               versionNumber=self.aq_parent.getId()
               self._v_downloadBasket[threadName].set(lock,procedure,REQUEST,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)
               #_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)
               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]
                # 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 1482  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:
                     self.REQUEST.RESPONSE.write(file(fileName).read())
    
                 del self.basketContainer.resultHash[threadName]
                   
     def numberOfItems(self):      def numberOfItems(self):
         """return anzahl der elemente im basket"""          """return anzahl der elemente im basket"""
Line 2587  class CDLIRoot(Folder): Line 2616  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"""

Removed from v.1.86  
changed lines
  Added in v.1.87


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>