File:  [Repository] / cdli / DownloadBasket.py
Revision 1.1: download - view: text, annotated - select for diffs - revision graph
Wed Oct 1 15:58:11 2008 UTC (15 years, 8 months ago) by dwinter
Branches: MAIN
CVS tags: HEAD
Incomplete - # 17: Erstellen gro§er Baskets
https://itgroup.mpiwg-berlin.mpg.de:8080/tracs/cdli/ticket/17

    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:         Thread.__init__(self)
   17: 
   18:     def set(self,lock,procedure,REQUEST,current,basketID,versionNumber,serverport="28080"):
   19:         self.procedure=procedure
   20:         self.lock=lock
   21:         self.REQUEST=REQUEST
   22:         self.basketID = basketID
   23:         self.versionNumber = versionNumber
   24:         self.serverport=serverport
   25:         self.current=current
   26:         logging.debug("download thread:set")
   27:        
   28:     def __call__(self):
   29:         """call of the thread (equals run)"""
   30:         logging.debug("download thread:call")
   31:         self.run()
   32:         return True
   33:     
   34:     def run(self):
   35:         """call of the thread (equals run)"""
   36:         logging.error("---------download thread:run")
   37:         
   38:         from Zope2 import DB
   39:         self.conn = DB.open()
   40:         root = self.conn.root()
   41:         app  = root['Application']
   42:         self.ctx = self.getContext(app,serverport=self.serverport).cdliRoot.basketContainer
   43:         logging.error("---------download thread:run2")
   44:         baskets=self.ctx.ZopeFind(self.ctx,obj_metatypes=['CDLIBasket'],obj_ids=[self.basketID])
   45:         logging.error("---------download thread:run3")
   46:         if len(baskets)!=1:
   47:             logging.error("ERROR: donwloadBasketcannot find basket:"+self.basketID)
   48:             self.end=True
   49:             return
   50:         
   51:         basket=baskets[0]
   52:         logging.error("donwloadBasket: found basket:"+repr(basket))
   53:         
   54:         basketVersion=getattr(basket[1],self.versionNumber)
   55:         
   56:         self.downloadObjectsAsOneFileFinally(self.lock,self.procedure,self.REQUEST,self.current,basketVersion)
   57:         self.end=True
   58:         
   59:     def getResult(self):
   60:         """method for accessing result"""
   61:         
   62:         return self.result
   63:     
   64:     def getContext(self, app,serverport="8080"):
   65:         """get the context within the ZODB"""
   66:         
   67:         resp = HTTPResponse(stdout=None)
   68:         env = {
   69:             'SERVER_NAME':'localhost',
   70:             'SERVER_PORT':serverport,
   71:             'REQUEST_METHOD':'GET'
   72:             }
   73:         req = HTTPRequest(None, env, resp)
   74:         return app.__of__(RequestContainer(REQUEST = req))
   75:           
   76:     def downloadObjectsAsOneFileFinally(self,lock=None,procedure=None,REQUEST=None,current="no",basketVersion=None):
   77:         """print do the download"""
   78:         logging.debug("download thread")
   79:   
   80:         logging.debug("donwloadBasketasonefile: found basket:"+repr(basketVersion))
   81:         ret=""
   82: 
   83:         i=0
   84:         #fh=file("/var/tmp/test","w")
   85:         files=[]
   86:         for object in basketVersion.getContent():
   87:                 logging.error(i)
   88:                 i+=1
   89: #                logging.error("ret:"+repr(object[0]))
   90: #                logging.error("    -"+repr(procedure))
   91: #                #lockedBy=object[1].lockedBy
   92:                 lockedBy=""
   93: #                logging.error("    -"+repr(lockedBy))
   94: #                
   95:                 if (procedure=="downloadAll") or (lockedBy=='') or (lockedBy==self.REQUEST['AUTHENTICATED_USER']):
   96:                     logging.error("ret1")
   97:                     if current=="no": #version as they are in the basket
   98:                         logging.error("ret2")
   99:                         #object[0].addToFile2("/var/tmp/test2")
  100:                         #ret+=str(object[0].getData())+"\n"
  101:                         files.append(object[0].getFileName())
  102:                     elif current=="yes":
  103:                         logging.error("ret3")
  104:                         #search current object
  105:                         founds=self.CDLICatalog.search({'title':object[1].getId().split(".")[0]})
  106:                         if len(founds)>0:      
  107:                             ret+=str(founds[0].getObject().getLastVersion().getData())+"\n"
  108:                       
  109:       
  110:                 if lock and lockedBy=='':
  111:                     object[1].lockedBy=self.REQUEST['AUTHENTICATED_USER']
  112: #        logging.error("---------download thread:run5")
  113: #        pin,pout =os.popen2("xargs cat")
  114: #        logging.error("---------download thread:run6")
  115: #        pin.write(" ".join(files))
  116: #        logging.error("---------download thread:run7")
  117: #        pin.close()
  118: #        logging.error("---------download thread:run8")
  119: #    
  120: #      
  121: #        
  122: #        fw = file("/var/tmp/test","w")
  123: #        fw.write(pout.read())
  124: #        fw.close()
  125:         
  126:         if not hasattr(self.ctx,'resultHash'):
  127:             self.ctx.resultHash={}
  128:         self.ctx.resultHash[self.getName()]=files
  129:         transaction.get().commit()
  130:         self.conn.close()
  131:         logging.error("---------download thread:run9")
  132:         return True
  133:         

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