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, 7 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


from threading import Thread
from ZPublisher.HTTPResponse import HTTPResponse
from ZPublisher.HTTPRequest import HTTPRequest
from ZPublisher.BaseRequest import RequestContainer
import logging
import os
import transaction
class DownloadBasketFinallyThread(Thread):

    def __init__(self):
        """init for uploadATFfinallyThread"""
        self.continueVar=True
        self.returnValue=None
        self.end=False
        Thread.__init__(self)

    def set(self,lock,procedure,REQUEST,current,basketID,versionNumber,serverport="28080"):
        self.procedure=procedure
        self.lock=lock
        self.REQUEST=REQUEST
        self.basketID = basketID
        self.versionNumber = versionNumber
        self.serverport=serverport
        self.current=current
        logging.debug("download thread:set")
       
    def __call__(self):
        """call of the thread (equals run)"""
        logging.debug("download thread:call")
        self.run()
        return True
    
    def run(self):
        """call of the thread (equals run)"""
        logging.error("---------download thread:run")
        
        from Zope2 import DB
        self.conn = DB.open()
        root = self.conn.root()
        app  = root['Application']
        self.ctx = self.getContext(app,serverport=self.serverport).cdliRoot.basketContainer
        logging.error("---------download thread:run2")
        baskets=self.ctx.ZopeFind(self.ctx,obj_metatypes=['CDLIBasket'],obj_ids=[self.basketID])
        logging.error("---------download thread:run3")
        if len(baskets)!=1:
            logging.error("ERROR: donwloadBasketcannot find basket:"+self.basketID)
            self.end=True
            return
        
        basket=baskets[0]
        logging.error("donwloadBasket: found basket:"+repr(basket))
        
        basketVersion=getattr(basket[1],self.versionNumber)
        
        self.downloadObjectsAsOneFileFinally(self.lock,self.procedure,self.REQUEST,self.current,basketVersion)
        self.end=True
        
    def getResult(self):
        """method for accessing result"""
        
        return self.result
    
    def getContext(self, app,serverport="8080"):
        """get the context within the ZODB"""
        
        resp = HTTPResponse(stdout=None)
        env = {
            'SERVER_NAME':'localhost',
            'SERVER_PORT':serverport,
            'REQUEST_METHOD':'GET'
            }
        req = HTTPRequest(None, env, resp)
        return app.__of__(RequestContainer(REQUEST = req))
          
    def downloadObjectsAsOneFileFinally(self,lock=None,procedure=None,REQUEST=None,current="no",basketVersion=None):
        """print do the download"""
        logging.debug("download thread")
  
        logging.debug("donwloadBasketasonefile: found basket:"+repr(basketVersion))
        ret=""

        i=0
        #fh=file("/var/tmp/test","w")
        files=[]
        for object in basketVersion.getContent():
                logging.error(i)
                i+=1
#                logging.error("ret:"+repr(object[0]))
#                logging.error("    -"+repr(procedure))
#                #lockedBy=object[1].lockedBy
                lockedBy=""
#                logging.error("    -"+repr(lockedBy))
#                
                if (procedure=="downloadAll") or (lockedBy=='') or (lockedBy==self.REQUEST['AUTHENTICATED_USER']):
                    logging.error("ret1")
                    if current=="no": #version as they are in the basket
                        logging.error("ret2")
                        #object[0].addToFile2("/var/tmp/test2")
                        #ret+=str(object[0].getData())+"\n"
                        files.append(object[0].getFileName())
                    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 lockedBy=='':
                    object[1].lockedBy=self.REQUEST['AUTHENTICATED_USER']
#        logging.error("---------download thread:run5")
#        pin,pout =os.popen2("xargs cat")
#        logging.error("---------download thread:run6")
#        pin.write(" ".join(files))
#        logging.error("---------download thread:run7")
#        pin.close()
#        logging.error("---------download thread:run8")
#    
#      
#        
#        fw = file("/var/tmp/test","w")
#        fw.write(pout.read())
#        fw.close()
        
        if not hasattr(self.ctx,'resultHash'):
            self.ctx.resultHash={}
        self.ctx.resultHash[self.getName()]=files
        transaction.get().commit()
        self.conn.close()
        logging.error("---------download thread:run9")
        return True
        

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