--- cdli/cdli_basket.py 2009/06/21 11:12:00 1.2 +++ cdli/cdli_basket.py 2011/07/21 21:58:50 1.7 @@ -33,7 +33,9 @@ from types import * import pickle import tempfile from cdli_files import CDLIFile +from cdli_files import splitatf,checkFile from cdli_helpers import * + class BasketContent(SimpleItem): """classe fuer den Inhalt eines Baskets""" @@ -80,7 +82,12 @@ class BasketContent(SimpleItem): for x in content: if not((x[0] is None) or (x[1] is None)): - contentList.append((x[1].getId(),x[0].getVersionNumber())) + try: # old version + contentList.append((x[1].getId(),x[0].getVersionNumber())) + except: + contentList.append(x) + + logging.debug("cl: %s"%contentList) self.contentList=contentList[0:] @@ -134,7 +141,7 @@ class uploadATFfinallyThread(Thread): self.result="" #find context within ZODB - from Zope import DB + from Zope2 import DB conn = DB.open() root = conn.root() app = root['Application'] @@ -308,7 +315,7 @@ class uploadATFThread(Thread): idTmp=self.idTmp self.result="" #find context within ZODB - from Zope import DB + from Zope2 import DB conn = DB.open() root = conn.root() app = root['Application'] @@ -347,14 +354,14 @@ class uploadATFThread(Thread): #make sure that id is a string and not an integer basketId=str(basketId) - + logging.info("basketID:"+basketId) #TODO: make this configurable, at the moment, rootFolder for cdli has to be cdliRoot ctx2=ctx.cdliRoot #get temporary file for staging the downloaded and splitted files dir=tempfile.mkdtemp() - + logging.info("tmpfFile:"+str(dir)) changed=[] # changed files errors=[] # files with errors lockerrors=[] # files with errors @@ -363,6 +370,7 @@ class uploadATFThread(Thread): psNotInCatalog=[] # files not in the catalog #split the uploadedd atf file + logging.info("start splitting") basketNameFromFile, numberOfFiles=splitatf(upload,dir,ext=self) #find basketId if not set @@ -571,6 +579,21 @@ class CDLIBasketContainer(OrderedFolder) None security.declareProtected('manage','uploadBasket_html') + + def uploadBasketAsync_html(self,basketId='0'): + """upload an atf file, html form, jetzt aufruf der nicht asyncronen version mit ticktes""" + + + basketId=str(basketId) + if not basketId=='0': + basketName=getattr(self.basketContainer,basketId).title + else: + basketName="" + + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','uploadBasketAsync_html.zpt')).__of__(self) + return pt(basketId=basketId,basketName=basketName) + + def uploadBasket_html(self,basketId='0'): """upload an atf file, html form""" @@ -997,8 +1020,10 @@ class CDLIBasket(Folder,CatalogAware): return versions - def updateObjects(self,ids,RESPONSE=None,REQUEST=None): - """update ids, ids not in the basket the add""" + def updateObjects(self,ids=[],RESPONSE=None,REQUEST=None): + """update ids, ids not in the basket then add""" + logging.debug("update") + logging.debug(repr(ids)) if type(ids) is not ListType: ids=[ids] @@ -1006,10 +1031,19 @@ class CDLIBasket(Folder,CatalogAware): oldContent=lastVersion.content.getContent() newContent=[] - #first copy the old + #keine ids dann alle update + if len(ids)==0: + ids=[x[0] for x in oldContent] + + #first copy the id not to be updated for obj in oldContent: - if obj[1].getId() not in ids: - newContent.append(obj) + logging.debug("obj:"+repr(obj)) + try: # old format of the basket + if obj[1].getId() not in ids: + newContent.append(obj) + except: + if obj[0] not in ids: + newContent.append(obj) #now add the new for id in ids: @@ -1018,17 +1052,20 @@ class CDLIBasket(Folder,CatalogAware): for found in founds: if found.getObject() not in oldContent: #TODO: was passiert wenn, man eine Object dazufuegt, das schon da ist aber eine neuere version - newContent.append((found.getObject().getLastVersion(),found.getObject())) + newContent.append((id,found.getObject().getLastVersion().getVersionNumber())) content=newContent user=self.getActualUserName() - + logging.debug(newContent) ob=manage_addCDLIBasketVersion(self,user,comment="",basketContent=newContent) obj=self._getOb(ob.getId()) + logging.debug(repr(obj)) + logging.debug("done") + logging.debug(obj.absolute_url()) if RESPONSE: - + logging.debug("redirect") RESPONSE.redirect(obj.absolute_url()) return obj @@ -1120,8 +1157,10 @@ class CDLIBasket(Folder,CatalogAware): retrieved = self.CDLICache.retrieve(hash) if retrieved: + logging.debug("add Objects: retrieved") newContent=Set(map(swap,retrieved)) else: + logging.debug("add Objects: new") newContent=Set([(self.getFileObjectLastVersion(x),self.getFileObject(x)) for x in ids]) @@ -1164,12 +1203,12 @@ class CDLIBasket(Folder,CatalogAware): return lv.getComment(),lv.getUser(),lv.getTime(),ret - def changeBasket(self,ids,submit,RESPONSE=None,REQUEST=None): + def changeBasket(self,submit,ids=[],RESPONSE=None,REQUEST=None): """change a basket""" if submit=="update": - return self.updateObjects(ids,RESPONSE=RESPONSE,REQUEST=REQUEST) + self.updateObjects(ids,RESPONSE=RESPONSE,REQUEST=REQUEST) elif submit=="delete": - return self.deleteObjects(ids,RESPONSE=RESPONSE,REQUEST=REQUEST) + self.deleteObjects(ids,RESPONSE=RESPONSE,REQUEST=REQUEST) def deleteObjects(self,ids,RESPONSE=None,REQUEST=None): """delete objects""" @@ -1529,12 +1568,16 @@ class CDLIBasketVersion(Implicit,Persist def getObjUrl(self,result): """getUrl of the version of the object""" - + logging.debug("getObjUrl:"+result) founds=self.CDLICatalog.search({'title':result}) if len(founds)>0: - return founds[0].getObject().getLastVersion().absolute_url() + logging.debug("getObjUrl: founds 1") + logging.debug("getObjUrl:"+repr(founds[0].getObject())) + #return founds[0].getObject().getLastVersion().absolute_url() + return founds[0].getObject().absolute_url() else: #assume version number + logging.debug("getObjUrl: founds 2") splitted=result.split("_") founds=self.CDLICatalog.search({'title':splitted[1]}) return founds[0].getObject().getLastVersion().absolute_url()+'/'+result