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>