Annotation of cdli/DownloadBasket.py, revision 1.4
1.1 dwinter 1: from threading import Thread
2: from ZPublisher.HTTPResponse import HTTPResponse
3: from ZPublisher.HTTPRequest import HTTPRequest
4: from ZPublisher.BaseRequest import RequestContainer
5: import logging
6: import os
7: import transaction
8: class DownloadBasketFinallyThread(Thread):
9:
10: def __init__(self):
11: """init for uploadATFfinallyThread"""
12: self.continueVar=True
13: self.returnValue=None
14: self.end=False
1.2 dwinter 15: self.counter=0 # zaehlt wieviele Files schon gefunden wurden
16:
17: self.number=0 # Anzahl der Files im Basket
1.1 dwinter 18: Thread.__init__(self)
19:
1.2 dwinter 20: def set(self,lock,procedure,user,current,basketID,versionNumber,serverport="28080"):
1.1 dwinter 21: self.procedure=procedure
22: self.lock=lock
1.2 dwinter 23: self.user=user
1.1 dwinter 24: self.basketID = basketID
25: self.versionNumber = versionNumber
26: self.serverport=serverport
27: self.current=current
28: logging.debug("download thread:set")
1.2 dwinter 29: logging.debug("download thread:user"+repr(self.user))
1.1 dwinter 30:
31: def __call__(self):
32: """call of the thread (equals run)"""
33: logging.debug("download thread:call")
34: self.run()
35: return True
36:
37: def run(self):
38: """call of the thread (equals run)"""
39: logging.error("---------download thread:run")
40:
41: from Zope2 import DB
42: self.conn = DB.open()
43: root = self.conn.root()
44: app = root['Application']
45: self.ctx = self.getContext(app,serverport=self.serverport).cdliRoot.basketContainer
46: logging.error("---------download thread:run2")
47: baskets=self.ctx.ZopeFind(self.ctx,obj_metatypes=['CDLIBasket'],obj_ids=[self.basketID])
48: logging.error("---------download thread:run3")
49: if len(baskets)!=1:
1.2 dwinter 50: logging.error("ERROR: downloadBasket: cannot find basket:"+self.basketID)
1.1 dwinter 51: self.end=True
52: return
53:
54: basket=baskets[0]
55: logging.error("donwloadBasket: found basket:"+repr(basket))
56:
57: basketVersion=getattr(basket[1],self.versionNumber)
58:
1.2 dwinter 59: self.downloadObjectsAsOneFileFinally(self.lock,self.procedure,self.user,self.current,basketVersion)
1.1 dwinter 60: self.end=True
61:
62: def getResult(self):
63: """method for accessing result"""
64:
65: return self.result
66:
1.2 dwinter 67: def getCounter(self):
68: """gibt den Counter zurueck, wieviele Objekte schon gefunden wurden"""
69: logging.error("counter:"+repr(self.counter))
70: return self.counter
71:
72:
73:
74: def getNumberOfFiles(self):
75: """gibt anzahl zurueck"""
76: return self.number;
1.1 dwinter 77: def getContext(self, app,serverport="8080"):
78: """get the context within the ZODB"""
79:
80: resp = HTTPResponse(stdout=None)
81: env = {
82: 'SERVER_NAME':'localhost',
83: 'SERVER_PORT':serverport,
84: 'REQUEST_METHOD':'GET'
85: }
86: req = HTTPRequest(None, env, resp)
87: return app.__of__(RequestContainer(REQUEST = req))
88:
1.2 dwinter 89: def downloadObjectsAsOneFileFinally(self,lock=None,procedure=None,user=None,current="no",basketVersion=None):
1.1 dwinter 90: """print do the download"""
91: logging.debug("download thread")
92:
93: logging.debug("donwloadBasketasonefile: found basket:"+repr(basketVersion))
94: ret=""
95:
1.2 dwinter 96: self.counter=0
1.1 dwinter 97: #fh=file("/var/tmp/test","w")
98: files=[]
1.4 ! dwinter 99: lockedFiles=[]
1.2 dwinter 100: objects=basketVersion.getContent()
101: self.number=len(objects)
1.4 ! dwinter 102: logging.error("objects:"+repr(self.number))
1.2 dwinter 103: for object in objects:
104:
105: self.counter+=1
1.1 dwinter 106: # logging.error("ret:"+repr(object[0]))
107: # logging.error(" -"+repr(procedure))
1.4 ! dwinter 108: try:
1.3 dwinter 109: lockedBy=object[1].lockedBy
1.4 ! dwinter 110: except:
! 111: logging.error("no object:"+repr(self.counter))
! 112: logging.error("no object:"+repr(object))
! 113: continue
1.3 dwinter 114:
1.2 dwinter 115: # lockedBy=""
1.1 dwinter 116: # logging.error(" -"+repr(lockedBy))
117: #
1.2 dwinter 118: if (procedure=="downloadAll") or (lockedBy=='') or (lockedBy==user):
1.4 ! dwinter 119: logging.error("ret1")
1.1 dwinter 120: if current=="no": #version as they are in the basket
1.4 ! dwinter 121: logging.error("ret2")
1.1 dwinter 122: #object[0].addToFile2("/var/tmp/test2")
123: #ret+=str(object[0].getData())+"\n"
124: files.append(object[0].getFileName())
125: elif current=="yes":
126: logging.error("ret3")
127: #search current object
1.2 dwinter 128: #founds=self.CDLICatalog.search({'title':object[1].getId().split(".")[0]})
129: obj=self.ctx.getFileObjectLastVersion(object[1].getId())
130: if obj:
131: files.append(obj.getFileName())
132: else:
133: logging.error("donwloadBasketasonefile: don't know: "+repr(object[0].getId()))
134: #if len(founds)>0:
135: # ret+=str(founds[0].getObject().getLastVersion().getData())+"\n"
1.1 dwinter 136:
1.4 ! dwinter 137: else:
! 138: logging.error("ret4")
! 139: lockedFiles.append(object[0].getId())
1.1 dwinter 140:
1.2 dwinter 141: #if lock and lockedBy=='':
142: #obj=self.ctx.getFileObject(object[1].getId())
143: # founds=self.ctx.CDLICatalog.search({'title':object[1].getId().split(".")[0]})
144: #if len(founds)>0:
145: #founds[0].getObject().lockedBy=user
146:
147: # object[1].lockedBy=user
148: # transaction.get().commit()
149: #obj.lockedBy=user
1.1 dwinter 150: # logging.error("---------download thread:run5")
151: # pin,pout =os.popen2("xargs cat")
152: # logging.error("---------download thread:run6")
153: # pin.write(" ".join(files))
154: # logging.error("---------download thread:run7")
155: # pin.close()
156: # logging.error("---------download thread:run8")
157: #
158: #
159: #
160: # fw = file("/var/tmp/test","w")
161: # fw.write(pout.read())
162: # fw.close()
163:
164: if not hasattr(self.ctx,'resultHash'):
165: self.ctx.resultHash={}
166: self.ctx.resultHash[self.getName()]=files
1.4 ! dwinter 167:
! 168: if not hasattr(self.ctx,'resultLockedHash'):
! 169: self.ctx.resultLockedHash={}
! 170: self.ctx.resultLockedHash[self.getName()]=lockedFiles
! 171:
1.1 dwinter 172: transaction.get().commit()
173: self.conn.close()
174: logging.error("---------download thread:run9")
175: return True
176:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>