Annotation of cdli/DownloadBasket.py, revision 1.2
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
1.2 ! dwinter 16: self.counter=0 # zaehlt wieviele Files schon gefunden wurden
! 17:
! 18: self.number=0 # Anzahl der Files im Basket
1.1 dwinter 19: Thread.__init__(self)
20:
1.2 ! dwinter 21: def set(self,lock,procedure,user,current,basketID,versionNumber,serverport="28080"):
1.1 dwinter 22: self.procedure=procedure
23: self.lock=lock
1.2 ! dwinter 24: self.user=user
1.1 dwinter 25: self.basketID = basketID
26: self.versionNumber = versionNumber
27: self.serverport=serverport
28: self.current=current
29: logging.debug("download thread:set")
1.2 ! dwinter 30: logging.debug("download thread:user"+repr(self.user))
1.1 dwinter 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:
1.2 ! dwinter 51: logging.error("ERROR: downloadBasket: cannot find basket:"+self.basketID)
1.1 dwinter 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:
1.2 ! dwinter 60: self.downloadObjectsAsOneFileFinally(self.lock,self.procedure,self.user,self.current,basketVersion)
1.1 dwinter 61: self.end=True
62:
63: def getResult(self):
64: """method for accessing result"""
65:
66: return self.result
67:
1.2 ! dwinter 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;
1.1 dwinter 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:
1.2 ! dwinter 90: def downloadObjectsAsOneFileFinally(self,lock=None,procedure=None,user=None,current="no",basketVersion=None):
1.1 dwinter 91: """print do the download"""
92: logging.debug("download thread")
93:
94: logging.debug("donwloadBasketasonefile: found basket:"+repr(basketVersion))
95: ret=""
96:
1.2 ! dwinter 97: self.counter=0
1.1 dwinter 98: #fh=file("/var/tmp/test","w")
99: files=[]
1.2 ! dwinter 100: objects=basketVersion.getContent()
! 101: self.number=len(objects)
! 102: for object in objects:
! 103:
! 104: self.counter+=1
1.1 dwinter 105: # logging.error("ret:"+repr(object[0]))
106: # logging.error(" -"+repr(procedure))
1.2 ! dwinter 107: lockedBy=object[1].lockedBy
! 108: # lockedBy=""
1.1 dwinter 109: # logging.error(" -"+repr(lockedBy))
110: #
1.2 ! dwinter 111: if (procedure=="downloadAll") or (lockedBy=='') or (lockedBy==user):
! 112: #logging.error("ret1")
1.1 dwinter 113: if current=="no": #version as they are in the basket
1.2 ! dwinter 114: #logging.error("ret2")
1.1 dwinter 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
1.2 ! dwinter 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"
1.1 dwinter 129:
130:
1.2 ! dwinter 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
1.1 dwinter 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>