version 1.86, 2008/09/29 12:37:37
|
version 1.91, 2008/10/06 12:57:12
|
Line 31 from BTrees.IOBTree import IOBTree
|
Line 31 from BTrees.IOBTree import IOBTree
|
import cdliSplitter |
import cdliSplitter |
from sets import Set |
from sets import Set |
import md5 |
import md5 |
|
from DownloadBasket import DownloadBasketFinallyThread |
|
|
def makelist(mySet): |
def makelist(mySet): |
x = list(mySet) |
x = list(mySet) |
Line 1036 class CDLIBasket(Folder,CatalogAware):
|
Line 1036 class CDLIBasket(Folder,CatalogAware):
|
actualNo=obj[1].getLastVersion().getVersionNumber() |
actualNo=obj[1].getLastVersion().getVersionNumber() |
storedNo=obj[0].getVersionNumber() |
storedNo=obj[0].getVersionNumber() |
|
|
founds=self.CDLICatalog.search({'title':obj[0].getId()}) |
|
if len(founds)>0: |
|
actualNo=founds[0].getObject().getLastVersion().getVersionNumber() |
|
|
|
if len(founds)>0 and founds[0].getObject().aq_parent.getId()==".trash": |
actualNo=self.getFileObjectLastVersion(obj.getId()).getVersionNumber() |
return False, -1 |
|
|
#if len(founds)>0 and founds[0].getObject().aq_parent.getId()==".trash": |
|
# return False, -1 |
|
|
if actualNo==storedNo: |
if actualNo==storedNo: |
return True , 0 |
return True , 0 |
Line 1363 class CDLIBasketVersion(Implicit,Persist
|
Line 1362 class CDLIBasketVersion(Implicit,Persist
|
security.declareProtected('manage','downloadObjectsAsOneFile') |
security.declareProtected('manage','downloadObjectsAsOneFile') |
def downloadObjectsAsOneFile(self,lock=None,procedure=None,REQUEST=None,check="yes",current="no"): |
def downloadObjectsAsOneFile(self,lock=None,procedure=None,REQUEST=None,check="yes",current="no"): |
"""download all selected files in one file""" |
"""download all selected files in one file""" |
|
logging.debug("doasof") |
if self.temp_folder.downloadCounterBaskets > 10000: |
if self.temp_folder.downloadCounterBaskets > 10000: |
return """I am sorry, currently the server has to many requests for downloads, please come back later!""" |
return """I am sorry, currently the server has to many requests for downloads, please come back later!""" |
|
|
Line 1377 class CDLIBasketVersion(Implicit,Persist
|
Line 1376 class CDLIBasketVersion(Implicit,Persist
|
|
|
return self.downloadObjectsAsOneFileFinally(lock=lock,procedure=procedure,REQUEST=REQUEST,current="no") |
return self.downloadObjectsAsOneFileFinally(lock=lock,procedure=procedure,REQUEST=REQUEST,current="no") |
|
|
def downloadObjectsAsOneFileFinally(self,lock=None,procedure=None,REQUEST=None,current="no"): |
def downloadObjectsAsOneFileFinally(self,lock=None,procedure=None,REQUEST=None,current="no",repeat=None): |
"""print do the download""" |
"""print do the download""" |
|
|
logging.debug("HIHHHH") |
logging.debug("HIHHHH") |
ret="" |
ret="" |
lockedObjects={} |
lockedObjects={} |
|
|
self.temp_folder.downloadCounterBaskets+=1 |
|
self._p_changed=1 |
|
transaction.get().commit() |
|
|
|
|
logging.debug("lock:"+repr(lock)) |
if lock: |
if lock: |
|
logging.debug("------lock:"+repr(lock)) |
if str(self.REQUEST['AUTHENTICATED_USER'])=='Anonymous User': |
if str(self.REQUEST['AUTHENTICATED_USER'])=='Anonymous User': |
self.temp_folder.downloadCounterBaskets-=1 |
|
self._p_changed=1 |
|
transaction.get().commit() |
|
self.temp_folder.downloadCounterBaskets-=1 |
|
self._p_changed=1 |
|
transaction.get().commit() |
|
return "please login first" |
return "please login first" |
|
|
#check if a locked object exist in the basket. |
#check if a locked object exist in the basket. |
Line 1413 class CDLIBasketVersion(Implicit,Persist
|
Line 1406 class CDLIBasketVersion(Implicit,Persist
|
self.REQUEST.SESSION['lockedObjects']=lockedObjects |
self.REQUEST.SESSION['lockedObjects']=lockedObjects |
pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','lockedObjects.zpt')).__of__(self) |
pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','lockedObjects.zpt')).__of__(self) |
|
|
self.temp_folder.downloadCounterBaskets-=1 |
|
self._p_changed=1 |
|
transaction.get().commit() |
|
|
|
return pt() |
return pt() |
|
|
Line 1425 class CDLIBasketVersion(Implicit,Persist
|
Line 1415 class CDLIBasketVersion(Implicit,Persist
|
|
|
|
|
|
|
for object in self.content.getContent(): |
threadName=repeat |
logging.error("ret:"+repr(object[0])) |
if not threadName or threadName=="": |
logging.error(" -"+repr(procedure)) |
thread=DownloadBasketFinallyThread() |
logging.error(" -"+repr(object[1].lockedBy)) |
threadName=thread.getName()[0:] |
|
|
|
if (not hasattr(self,'_v_downloadBasket')): |
|
self._v_downloadBasket={} |
|
|
if (procedure=="downloadAll") or (object[1].lockedBy=='') or (object[1].lockedBy==self.REQUEST['AUTHENTICATED_USER']): |
|
logging.error("ret1") |
|
if current=="no": #version as they are in the basket |
|
logging.error("ret2") |
|
ret+=str(object[0].getData())+"\n" |
|
elif current=="yes": |
|
logging.error("ret3") |
|
#search current object |
|
founds=self.CDLICatalog.search({'title':object[1].getId().split(".")[0]}) |
|
if len(founds)>0: |
|
ret+=str(founds[0].getObject().getLastVersion().getData())+"\n" |
|
|
|
if lock and object[1].lockedBy=='': |
self._v_downloadBasket[threadName]=thread |
|
logging.debug("dwonloadfinally:"+repr(self)) |
|
basketID=self.aq_parent.aq_parent.getId() |
|
versionNumber=self.aq_parent.getId() |
|
|
|
if lock: |
|
logging.debug("-----start locking") |
|
for object in self.content.getContent(): |
|
if object[1].lockedBy =='': |
object[1].lockedBy=self.REQUEST['AUTHENTICATED_USER'] |
object[1].lockedBy=self.REQUEST['AUTHENTICATED_USER'] |
|
logging.debug("-----finished locking") |
|
|
|
#obj.lockedBy=user |
|
self._v_downloadBasket[threadName].set(lock,procedure,self.REQUEST['AUTHENTICATED_USER'],current,basketID,versionNumber) |
|
|
|
self._v_downloadBasket[threadName].start() |
|
|
|
|
|
|
|
wait_template=self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['wait_template']) |
|
|
|
if wait_template: |
|
return wait_template[0][1]() |
|
pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','downloadBasketWait.zpt')).__of__(self) |
|
|
|
return pt(txt=self.absolute_url()+'/downloadObjectsAsOneFileFinally',threadName=threadName, |
|
counter=self._v_downloadBasket[threadName].getCounter(), |
|
number=self._v_downloadBasket[threadName].getNumberOfFiles()) |
|
#_v_xmltrans.run() |
|
|
|
else: |
|
#recover thread, if lost |
|
if not hasattr(self,'_v_downloadBasket'): |
|
self._v_downloadBasket={} |
|
if not self._v_downloadBasket.get(threadName,None): |
|
for thread in threading.enumerate(): |
|
if threadName == thread.getName(): |
|
self._v_downloadBasket[threadName]=thread |
|
|
|
if self._v_downloadBasket.get(threadName,None) and (self._v_downloadBasket[threadName] is not None) and (not self._v_downloadBasket[threadName].end) : |
|
|
|
wait_template=self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['wait_template']) |
|
if wait_template: |
|
return wait_template[0][1]() |
|
|
|
pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','downloadBasketWait.zpt')).__of__(self) |
|
return pt(txt=self.absolute_url()+'/downloadObjectsAsOneFileFinally',threadName=threadName, |
|
counter=self._v_downloadBasket[threadName].getCounter(), |
|
number=self._v_downloadBasket[threadName].getNumberOfFiles()) |
|
else: |
|
|
|
|
|
logging.debug("FINISHED") |
|
if not self._v_downloadBasket.get(threadName,None): |
|
for thread in threading.enumerate(): |
|
if threadName == thread.getName(): |
|
self._v_downloadBasket[threadName]=thread |
|
|
|
#files = self._v_downloadBasket[threadName].result |
|
files=self.basketContainer.resultHash[threadName] |
|
lockedFiles=self.basketContainer.resultLockedHash[threadName] |
|
logging.error(files) |
|
# fh=file("/var/tmp/test") |
|
#ret =fh.read() |
|
|
if (not isinstance(self.aq_parent,CDLIBasket)): |
if (not isinstance(self.aq_parent,CDLIBasket)): |
basket_name=self.aq_parent.aq_parent.title+"_V"+self.getId() |
basket_name=self.aq_parent.aq_parent.title+"_V"+self.getId() |
Line 1453 class CDLIBasketVersion(Implicit,Persist
|
Line 1497 class CDLIBasketVersion(Implicit,Persist
|
|
|
|
|
#write basketname to header of atf file |
#write basketname to header of atf file |
ret="#basket: %s\n"%basket_name+ret |
|
|
|
self.temp_folder.downloadCounterBaskets-=1 |
|
self._p_changed=1 |
|
transaction.get().commit() |
|
|
|
self.REQUEST.RESPONSE.setHeader("Content-Disposition","""attachement; filename="%s.atf" """%basket_name) |
self.REQUEST.RESPONSE.setHeader("Content-Disposition","""attachement; filename="%s.atf" """%basket_name) |
self.REQUEST.RESPONSE.setHeader("Content-Type","application/octet-stream") |
self.REQUEST.RESPONSE.setHeader("Content-Type","application/octet-stream") |
length=len(ret) |
#length=len(ret) |
self.REQUEST.RESPONSE.setHeader("Content-Length",length) |
#self.REQUEST.RESPONSE.setHeader("Content-Length",length) |
|
|
|
ret="#basket: %s\n"%basket_name |
self.REQUEST.RESPONSE.write(ret) |
self.REQUEST.RESPONSE.write(ret) |
return True |
|
|
for fileName in files: |
|
try: |
|
self.REQUEST.RESPONSE.write(file(fileName).read()) |
|
except: |
|
logging.error("downloadasonefile: cannot read %s"%fileName) |
|
|
|
|
|
self.REQUEST.RESPONSE.write("\n# locked files\n") |
|
for fileName in lockedFiles: |
|
self.REQUEST.RESPONSE.write("# %s\n"%fileName) |
|
|
|
self.REQUEST.RESPONSE.write("# locked files end\n") |
|
|
|
del self.basketContainer.resultHash[threadName] |
|
del self.basketContainer.resultLockedHash[threadName] |
|
|
def numberOfItems(self): |
def numberOfItems(self): |
"""return anzahl der elemente im basket""" |
"""return anzahl der elemente im basket""" |
Line 1568 class CDLIFileObject(CatalogAware,extVer
|
Line 1625 class CDLIFileObject(CatalogAware,extVer
|
"""Return cataloguable key for ourselves.""" |
"""Return cataloguable key for ourselves.""" |
return str(self) |
return str(self) |
|
|
|
def setAuthor(self, author): |
|
"""change the author""" |
|
self.author = author |
|
|
def makeThisVersionCurrent_html(self): |
def makeThisVersionCurrent_html(self): |
"""form for mthis version current""" |
"""form for mthis version current""" |
|
|
Line 2587 class CDLIRoot(Folder):
|
Line 2648 class CDLIRoot(Folder):
|
|
|
return """ 2;url=%s?repeat=%s """%(self.absolute_url()+txt,threadName) |
return """ 2;url=%s?repeat=%s """%(self.absolute_url()+txt,threadName) |
|
|
|
def refreshTxtBasket(self,txt="",threadName=None): |
|
"""txt fuer refresh""" |
|
|
|
return """ 2;url=%s?repeat=%s """%(txt,threadName) |
|
|
|
|
def getResult(self,threadName=None): |
def getResult(self,threadName=None): |
"""result of thread""" |
"""result of thread""" |