Annotation of cdli/DownloadBasket.py, revision 1.1

1.1     ! dwinter     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>