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>