--- cdli/cdli_files.py 2008/10/02 11:42:42 1.88 +++ cdli/cdli_files.py 2008/10/13 10:45:02 1.98 @@ -401,7 +401,7 @@ class uploadATFfinallyThread(Thread): basketId=ob.getId() basket=getattr(ctx2.basketContainer,str(basketId)) ids=os.listdir(SESSION['tmpdir']) - logging.debug("should add:"+repr(ids)) + #logging.debug("should add:"+repr(ids)) basket.addObjects(ids,deleteOld=True,username=str(username)) logging.debug("uploadatffinallythread uploadfinally done") @@ -640,7 +640,7 @@ class CDLIBasketContainer(OrderedFolder) ret+=str(object[0].getData())+"\n" elif current=="yes": #search current object - logging.debug("current: %s"%object[1].getId().split(".")[0]) + #logging.debug("current: %s"%object[1].getId().split(".")[0]) founds=self.CDLICatalog.search({'title':object[1].getId().split(".")[0]}) if len(founds)>0: ret+=str(founds[0].getObject().getLastVersion().getData())+"\n" @@ -659,6 +659,10 @@ class CDLIBasketContainer(OrderedFolder) def deleteBaskets(self,ids=None): """delete baskets, i.e. move them into trash folder""" + if ids is None: + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','cdliError_html.zpt')).__of__(self) + txt="Sorry, no basket selected!" + return pt(txt=txt) found=self.ZopeFind(self,obj_ids=['trash']) @@ -670,19 +674,30 @@ class CDLIBasketContainer(OrderedFolder) if type(ids) is not ListType: ids=[ids] + logging.error("XERXON:"+repr(ids)) + if len(ids)==0: + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','cdliError_html.zpt')).__of__(self) + txt="Sorry, no basket selected!" + return pt(txt=txt) + cut=self.manage_cutObjects(ids) trash.manage_pasteObjects(cut) - + return None security.declareProtected('manage','manageBaskets') def manageBaskets(self,submit,ids=None,basket1="",basket2="",joinBasket="",subtractBasket="",REQUEST=None,RESPONSE=None): """manage baskets, delete or copy""" if submit=="delete": - self.deleteBaskets(ids) - + ret= self.deleteBaskets(ids) + if ret: + return ret elif submit=="join": flag,msg=self.joinBasket(joinBasket, ids) logging.info("joining %s %s"%(flag,msg)) - + if not flag: + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','cdliError_html.zpt')).__of__(self) + + return pt(txt=msg) + elif submit=="subtract": logging.info("BBBb %s %s"%(basket1,basket2)) flag,msg=self.subtractBasket(subtractBasket, basket1,basket2) @@ -821,6 +836,7 @@ class CDLIBasketContainer(OrderedFolder) @param basket2: see above """ + logging.info("CCCCC %s %s"%(basket1,basket2)) try: @@ -861,12 +877,16 @@ class CDLIBasketContainer(OrderedFolder) @param newbasket: name of the new basket @param oldbaskets: list of baskets to be joined """ + if oldBaskets is None: + return False, "No Baskets selected!" + try: newB=self.addBasket(newBasket) except: return False, "cannot create the new basket" newBasketContent={} + for ob in oldBaskets: x= getattr(self,ob,None) if x is None: @@ -1032,12 +1052,12 @@ class CDLIBasket(Folder,CatalogAware): def isActual(self,obj): """teste ob im basket die aktuelle version ist""" try: - logging.debug("isActual:"+repr(obj)) + #logging.debug("isActual:"+repr(obj)) actualNo=obj[1].getLastVersion().getVersionNumber() storedNo=obj[0].getVersionNumber() - actualNo=self.getFileObjectLastVersion(obj.getId()).getVersionNumber() + #actualNo=self.getFileObjectLastVersion(obj.getId()).getVersionNumber() #if len(founds)>0 and founds[0].getObject().aq_parent.getId()==".trash": # return False, -1 @@ -1047,6 +1067,8 @@ class CDLIBasket(Folder,CatalogAware): else: return False, actualNo except: + logging.error( """is actual: %s (%s %s)"""%(repr(obj),sys.exc_info()[0],sys.exc_info()[1])) + return False, -1 def history(self): @@ -1222,9 +1244,9 @@ class CDLIBasket(Folder,CatalogAware): hash = md5.new(repr(makelist(ids))).hexdigest() # erzeuge hash als identification #logging.debug("JJJJJJJ:"+repr(self.makelist(ids))) - logging.debug("JJJJJJJ:"+repr(hash)) + - if hasattr(self.cdliRoot,'v_tmpStore') and self.cdliRoot.v_tmpStore.has_key(hash): + if hasattr(self.cdliRoot,'v_tmpStore') and self.cdliRoot.v_tmpStore.has_key("hash"): #TODO: muss eigentlich self.cdliRoot.v_tmpStore.has_key(hash): heissen (ohne "), erstmal so gesetzt damit der hash hier nie benutzt wird logging.debug("from store!") newContent=Set(map(swap,self.cdliRoot.v_tmpStore[hash])) @@ -1253,7 +1275,7 @@ class CDLIBasket(Folder,CatalogAware): lv=self.getLastVersion() for obj in lv.content.getContent(): - logging.info("XXXXXXXXXX %s"%repr(obj)) + #logging.info("XXXXXXXXXX %s"%repr(obj)) ret.append((obj[1].getId(),obj[0].versionNumber)) return ret @@ -1362,7 +1384,7 @@ class CDLIBasketVersion(Implicit,Persist security.declareProtected('manage','downloadObjectsAsOneFile') def downloadObjectsAsOneFile(self,lock=None,procedure=None,REQUEST=None,check="yes",current="no"): """download all selected files in one file""" - logging.debug("doasof") + if self.temp_folder.downloadCounterBaskets > 10000: return """I am sorry, currently the server has to many requests for downloads, please come back later!""" @@ -1379,12 +1401,12 @@ class CDLIBasketVersion(Implicit,Persist def downloadObjectsAsOneFileFinally(self,lock=None,procedure=None,REQUEST=None,current="no",repeat=None): """print do the download""" - logging.debug("HIHHHH") + ret="" lockedObjects={} - logging.debug("lock:"+repr(lock)) + if lock: logging.debug("------lock:"+repr(lock)) if str(self.REQUEST['AUTHENTICATED_USER'])=='Anonymous User': @@ -1426,9 +1448,24 @@ class CDLIBasketVersion(Implicit,Persist self._v_downloadBasket[threadName]=thread logging.debug("dwonloadfinally:"+repr(self)) - basketID=self.aq_parent.aq_parent.getId() - versionNumber=self.aq_parent.getId() - + + if isinstance(self,CDLIBasketVersion): + obj=self + else: + obj=self.aq_parent + logging.debug("dwonloadfinally2:"+repr(obj)) + logging.debug("dwonloadfinally2:"+repr(obj.aq_parent)) + + obj2=obj.aq_parent + if not isinstance(obj2,CDLIBasket): + obj2=obj2.aq_parent + + basketID=obj2.getId() + versionNumber=obj.getId() + logging.debug("dwonloadfinally2:"+repr(basketID)) + logging.debug("dwonloadfinally2:"+repr(versionNumber)) + + if lock: logging.debug("-----start locking") for object in self.content.getContent(): @@ -1484,6 +1521,8 @@ class CDLIBasketVersion(Implicit,Persist #files = self._v_downloadBasket[threadName].result files=self.basketContainer.resultHash[threadName] + lockedFiles=self.basketContainer.resultLockedHash[threadName] + # fh=file("/var/tmp/test") #ret =fh.read() @@ -1501,12 +1540,25 @@ class CDLIBasketVersion(Implicit,Persist self.REQUEST.RESPONSE.setHeader("Content-Type","application/octet-stream") #length=len(ret) #self.REQUEST.RESPONSE.setHeader("Content-Length",length) + ret="#basket: %s\n"%basket_name - self.REQUEST.RESPONSE.write(ret) + self.REQUEST.RESPONSE.write(ret) + 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 by %s\n"%fileName) + + self.REQUEST.RESPONSE.write("# locked files end\n") + del self.basketContainer.resultHash[threadName] + del self.basketContainer.resultLockedHash[threadName] def numberOfItems(self): """return anzahl der elemente im basket""" @@ -1610,6 +1662,10 @@ class CDLIFileObject(CatalogAware,extVer """Return cataloguable key for ourselves.""" return str(self) + def setAuthor(self, author): + """change the author""" + self.author = author + def makeThisVersionCurrent_html(self): """form for mthis version current""" @@ -2100,7 +2156,7 @@ class CDLIFileFolder(extVersionedFileFol ids = fileTree & self.v_file_ids #self.REQUEST.SESSION['fileIds']=ids#store fieldIds in session for further usage l=makelist(fileTree)[0:] - logging.debug("l-list:"+repr(l)) + #logging.debug("l-list:"+repr(l)) self.REQUEST.SESSION['fileIds']=l#store fieldIds in session for further usage self.REQUEST.SESSION['searchList']=l #self.REQUEST.SESSION['searchList']=['P000001.atf'] @@ -2333,7 +2389,7 @@ class CDLIRoot(Folder): def getFileObjectLastVersion(self,fileId): """get an object""" x=self.v_files_lastVersion.get(fileId) - #logging.debug(x) + #logging.debug("lastVersion: "+repr(x)) return x def showFileIds(self):