--- cdli/cdli_files.py 2007/01/24 18:08:15 1.59
+++ cdli/cdli_files.py 2007/01/30 00:58:26 1.60
@@ -135,6 +135,7 @@ class uploadATFfinallyThread(Thread):
self.SESSION=SESSION
self.username=username
self.serverport=serverport
+
def __call__(self):
"""call of the thread (equals run)"""
@@ -263,7 +264,15 @@ class uploadATFfinallyThread(Thread):
return True
+
+class tmpStore(SimpleItem):
+ """simple item"""
+ meta_type="cdli_upload"
+ def __init__(self,id):
+ """init tmp"""
+ self.id=id
+
class uploadATFThread(Thread):
"""class for checking the files befor uploading"""
@@ -276,13 +285,14 @@ class uploadATFThread(Thread):
Thread.__init__(self)
- def set(self,upload,basketId,username,serverport="8080"):
+ def set(self,upload,basketId,username,idTmp,serverport="8080"):
"""set start values for the thread"""
self.result=""
self.upload=upload
self.basketId=basketId
self.username=username
self.serverport=serverport
+ self.idTmp=idTmp
def __call__(self):
"""call method """
@@ -301,7 +311,7 @@ class uploadATFThread(Thread):
return app.__of__(RequestContainer(REQUEST = req))
def run(self):
-
+ idTmp=self.idTmp
self.result=""
#find context within ZODB
from Zope import DB
@@ -309,14 +319,15 @@ class uploadATFThread(Thread):
root = conn.root()
app = root['Application']
ctx = self.getContext(app,serverport=self.serverport)
- self.uploadATFThread(ctx,self.upload,self.basketId)
+ logging.info("run intern")
+ ctx.temp_folder._setObject(idTmp,tmpStore(idTmp))
+ logging.info("call thread intern")
+ self.uploadATFThread(ctx,self.upload,idTmp,self.basketId)
#ctx.cdliRoot.cdli_main.tmpStore2[self.getName()[0:]]=self.returnValue
transaction.get().commit()
- while self.continueVar:
- pass
conn.close()
@@ -325,10 +336,13 @@ class uploadATFThread(Thread):
"""method for accessing result"""
return self.result
- def uploadATFThread(self,ctx,upload,basketId=0):
+ def uploadATFThread(self,ctx,upload,idTmp,basketId=0):
"""upload an atf file"""
#TODO: add comments
#TODO: finish uploadATF
+
+ stObj=getattr(ctx.temp_folder,idTmp)
+ logging.info("start, upload thread")
self.result="
I got your file, start now to split it into single atf-files!
"
#make sure that id is a string and not an integer
@@ -367,7 +381,7 @@ class uploadATFThread(Thread):
basketNameFromId=getattr(ctx2.basketContainer,basketId).title
basketLen=getattr(ctx2.basketContainer,basketId).getLastVersion().numberOfItems()
-
+ logging.info("got the file, upload thread")
self.result+="""
I got the files
<
p>I am computing the differences to the exisiting files"""
@@ -412,19 +426,22 @@ class uploadATFThread(Thread):
#ready, set the returnValues
self.result+="Done
"
- self.returnValue={}
- self.returnValue['changed']=changed
- self.returnValue['errors']=errors
- self.returnValue['lockerrors']=lockerrors
- self.returnValue['newPs']=newPs
- self.returnValue['tmpdir']=dir
- self.returnValue['basketLen']=basketLen
- self.returnValue['numberOfFiles']=numberOfFiles
- self.returnValue['basketNameFromId']=basketNameFromId
- self.returnValue['basketNameFromFile']=basketNameFromFile
- self.returnValue['basketId']=basketId
- self.returnValue['dir']=dir
+ stObj.returnValue={}
+ stObj.returnValue['errors']=errors
+
+ stObj.returnValue['newPs']=newPs
+ stObj.returnValue['tmpdir']=dir
+ stObj.returnValue['basketLen']=basketLen
+ stObj.returnValue['numberOfFiles']=numberOfFiles
+ stObj.returnValue['basketNameFromId']=basketNameFromId
+ stObj.returnValue['basketNameFromFile']=basketNameFromFile
+ stObj.returnValue['basketId']=basketId
+ stObj.returnValue['dir']=dir
+
+ stObj.returnValue['changed']=[x[0].getId() for x in changed]
+ stObj.returnValue['lockerrors']=[x[0].getId() for x in lockerrors]
+ self.returnValue=True
#ctx2.cdli_main.setTemp('v_uploadATF_returnValue',True)
@@ -2193,7 +2210,14 @@ class CDLIRoot(Folder):
def uploadATF(self,repeat=None,upload=None,basketId=0,RESPONSE=None):
"""standard ausgabe"""
#self._v_uploadATF.returnValue=None
+ from random import randint
+ if not self.REQUEST.SESSION.get('idTmp',None):
+ idTmp=str(randint(0,1000000000))
+ self.REQUEST.SESSION['idTmp']=idTmp
+ else:
+ idTmp=self.REQUEST.SESSION.get('idTmp',None)
+
threadName=repeat
if not threadName or threadName=="":
tmpVar=False
@@ -2206,9 +2230,10 @@ class CDLIRoot(Folder):
self._v_uploadATF[threadName]=thread
#self._xmltrans.start()
#thread=Thread(target=self._v_uploadATF)
-
- self._v_uploadATF[threadName].set(upload,basketId,self.REQUEST['AUTHENTICATED_USER'],serverport=self.REQUEST['SERVER_PORT'])
+ logging.info("set thread. extern")
+ self._v_uploadATF[threadName].set(upload,basketId,self.REQUEST['AUTHENTICATED_USER'],idTmp,serverport=self.REQUEST['SERVER_PORT'])
#thread.start()
+ logging.info("start thread. extern")
self._v_uploadATF[threadName].start()
@@ -2230,7 +2255,7 @@ class CDLIRoot(Folder):
if threadName == thread.getName():
self._v_uploadATF[threadName]=thread
- if not self._v_uploadATF[threadName].returnValue:
+ if self._v_uploadATF.get(threadName,None) and (not self._v_uploadATF[threadName].returnValue):
wait_template=self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['wait_template'])
@@ -2253,15 +2278,12 @@ class CDLIRoot(Folder):
#
# #
#tmp=self.cdli_main.tmpStore2[threadName]
- tmp=self._v_uploadATF[threadName].returnValue
- self._v_uploadATF[threadName].continueVar=False
+ tmp=getattr(self.temp_folder,idTmp).returnValue
+
- self.REQUEST.SESSION['changed']=[x[0].getId() for x in tmp['changed']]
- self.REQUEST.SESSION['lockerrors']=[x[0].getId() for x in tmp['lockerrors']]
- self.REQUEST.SESSION['errors']=tmp['errors']
- self.REQUEST.SESSION['newPs']=tmp['newPs']
- self.REQUEST.SESSION['tmpdir']=tmp['dir']
+
+
#del(self.cdli_main.tmpStore2[threadName])
@@ -2293,8 +2315,9 @@ class CDLIRoot(Folder):
self._v_uploadATF[threadName]=thread
-
- self._v_uploadATF[threadName].set(procedure,comment=comment,basketname=basketname,unlock=unlock,SESSION=self.REQUEST.SESSION,username=self.REQUEST['AUTHENTICATED_USER'],serverport=self.REQUEST['SERVER_PORT'])
+ idTmp=self.REQUEST.SESSION['idTmp']
+ stObj=getattr(self.temp_folder,idTmp)
+ self._v_uploadATF[threadName].set(procedure,comment=comment,basketname=basketname,unlock=unlock,SESSION=stObj.returnValue,username=self.REQUEST['AUTHENTICATED_USER'],serverport=self.REQUEST['SERVER_PORT'])
self._v_uploadATF[threadName].start()
@@ -2327,7 +2350,7 @@ class CDLIRoot(Folder):
pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','uploadATFWait.zpt')).__of__(self)
return pt(txt='/uploadATFfinally',threadName=threadName)
else:
-
+ self.REQUEST.SESSION['idTmp']=None
if RESPONSE is not None:
RESPONSE.redirect(self.absolute_url())