File:  [Repository] / cdli / DownloadBasket.py
Revision 1.2: download - view: text, annotated - select for diffs - revision graph
Thu Oct 2 11:42:43 2008 UTC (15 years, 8 months ago) by dwinter
Branches: MAIN
CVS tags: HEAD
*** empty log message ***

    1: 
    2: from threading import Thread
    3: from ZPublisher.HTTPResponse import HTTPResponse
    4: from ZPublisher.HTTPRequest import HTTPRequest
    5: from ZPublisher.BaseRequest import RequestContainer
    6: import logging
    7: import os
    8: import transaction
    9: class DownloadBasketFinallyThread(Thread):
   10: 
   11:     def __init__(self):
   12:         """init for uploadATFfinallyThread"""
   13:         self.continueVar=True
   14:         self.returnValue=None
   15:         self.end=False
   16:         self.counter=0 # zaehlt wieviele Files schon gefunden wurden
   17:     
   18:         self.number=0 # Anzahl der Files im Basket
   19:         Thread.__init__(self)
   20: 
   21:     def set(self,lock,procedure,user,current,basketID,versionNumber,serverport="28080"):
   22:         self.procedure=procedure
   23:         self.lock=lock
   24:         self.user=user
   25:         self.basketID = basketID
   26:         self.versionNumber = versionNumber
   27:         self.serverport=serverport
   28:         self.current=current
   29:         logging.debug("download thread:set")
   30:         logging.debug("download thread:user"+repr(self.user))
   31:        
   32:     def __call__(self):
   33:         """call of the thread (equals run)"""
   34:         logging.debug("download thread:call")
   35:         self.run()
   36:         return True
   37:     
   38:     def run(self):
   39:         """call of the thread (equals run)"""
   40:         logging.error("---------download thread:run")
   41:         
   42:         from Zope2 import DB
   43:         self.conn = DB.open()
   44:         root = self.conn.root()
   45:         app  = root['Application']
   46:         self.ctx = self.getContext(app,serverport=self.serverport).cdliRoot.basketContainer
   47:         logging.error("---------download thread:run2")
   48:         baskets=self.ctx.ZopeFind(self.ctx,obj_metatypes=['CDLIBasket'],obj_ids=[self.basketID])
   49:         logging.error("---------download thread:run3")
   50:         if len(baskets)!=1:
   51:             logging.error("ERROR: downloadBasket: cannot find basket:"+self.basketID)
   52:             self.end=True
   53:             return
   54:         
   55:         basket=baskets[0]
   56:         logging.error("donwloadBasket: found basket:"+repr(basket))
   57:         
   58:         basketVersion=getattr(basket[1],self.versionNumber)
   59:         
   60:         self.downloadObjectsAsOneFileFinally(self.lock,self.procedure,self.user,self.current,basketVersion)
   61:         self.end=True
   62:         
   63:     def getResult(self):
   64:         """method for accessing result"""
   65:         
   66:         return self.result
   67:     
   68:     def getCounter(self):
   69:         """gibt den Counter zurueck, wieviele Objekte schon gefunden wurden"""
   70:         logging.error("counter:"+repr(self.counter))
   71:         return self.counter
   72:     
   73: 
   74:     
   75:     def getNumberOfFiles(self):
   76:         """gibt anzahl zurueck"""
   77:         return self.number;
   78:     def getContext(self, app,serverport="8080"):
   79:         """get the context within the ZODB"""
   80:         
   81:         resp = HTTPResponse(stdout=None)
   82:         env = {
   83:             'SERVER_NAME':'localhost',
   84:             'SERVER_PORT':serverport,
   85:             'REQUEST_METHOD':'GET'
   86:             }
   87:         req = HTTPRequest(None, env, resp)
   88:         return app.__of__(RequestContainer(REQUEST = req))
   89:           
   90:     def downloadObjectsAsOneFileFinally(self,lock=None,procedure=None,user=None,current="no",basketVersion=None):
   91:         """print do the download"""
   92:         logging.debug("download thread")
   93:   
   94:         logging.debug("donwloadBasketasonefile: found basket:"+repr(basketVersion))
   95:         ret=""
   96: 
   97:         self.counter=0
   98:         #fh=file("/var/tmp/test","w")
   99:         files=[]
  100:         objects=basketVersion.getContent()
  101:         self.number=len(objects)
  102:         for object in objects:
  103:        
  104:                 self.counter+=1
  105: #                logging.error("ret:"+repr(object[0]))
  106: #                logging.error("    -"+repr(procedure))
  107:                 lockedBy=object[1].lockedBy
  108: #                lockedBy=""
  109: #                logging.error("    -"+repr(lockedBy))
  110: #                
  111:                 if (procedure=="downloadAll") or (lockedBy=='') or (lockedBy==user):
  112:                     #logging.error("ret1")
  113:                     if current=="no": #version as they are in the basket
  114:                         #logging.error("ret2")
  115:                         #object[0].addToFile2("/var/tmp/test2")
  116:                         #ret+=str(object[0].getData())+"\n"
  117:                         files.append(object[0].getFileName())
  118:                     elif current=="yes":
  119:                         logging.error("ret3")
  120:                         #search current object
  121:                         #founds=self.CDLICatalog.search({'title':object[1].getId().split(".")[0]})
  122:                         obj=self.ctx.getFileObjectLastVersion(object[1].getId())
  123:                         if obj:
  124:                             files.append(obj.getFileName())
  125:                         else:
  126:                             logging.error("donwloadBasketasonefile: don't know: "+repr(object[0].getId()))
  127:                         #if len(founds)>0:      
  128:                           #  ret+=str(founds[0].getObject().getLastVersion().getData())+"\n"
  129:                       
  130:       
  131:                 #if lock and lockedBy=='':
  132:                     #obj=self.ctx.getFileObject(object[1].getId())
  133:                    # founds=self.ctx.CDLICatalog.search({'title':object[1].getId().split(".")[0]})
  134:                    #if len(founds)>0:      
  135:                           #founds[0].getObject().lockedBy=user
  136:                       
  137:                 #    object[1].lockedBy=user
  138:                 #    transaction.get().commit()
  139:                     #obj.lockedBy=user
  140: #        logging.error("---------download thread:run5")
  141: #        pin,pout =os.popen2("xargs cat")
  142: #        logging.error("---------download thread:run6")
  143: #        pin.write(" ".join(files))
  144: #        logging.error("---------download thread:run7")
  145: #        pin.close()
  146: #        logging.error("---------download thread:run8")
  147: #    
  148: #      
  149: #        
  150: #        fw = file("/var/tmp/test","w")
  151: #        fw.write(pout.read())
  152: #        fw.close()
  153:         
  154:         if not hasattr(self.ctx,'resultHash'):
  155:             self.ctx.resultHash={}
  156:         self.ctx.resultHash[self.getName()]=files
  157:         transaction.get().commit()
  158:         self.conn.close()
  159:         logging.error("---------download thread:run9")
  160:         return True
  161:         

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