--- cdli/cdli_files.py 2009/06/05 07:30:11 1.107 +++ cdli/cdli_files.py 2010/03/19 14:01:41 1.115 @@ -90,7 +90,7 @@ class CDLIFileObject(CatalogAware,extVer def getPNumber(self): """get the pnumber""" try: - txt=re.match("&[Pp](\d*)\s*=([^\r\n]*)",self.getData()[0:]) + txt=re.match("&[PpSs](\d*)\s*=([^\r\n]*)",self.getData()[0:]) except: txt=self.getData()[0:] @@ -104,7 +104,7 @@ class CDLIFileObject(CatalogAware,extVer def getDesignation(self): """get the designation out of the file""" try: - txt=re.match("&[Pp](\d*)\s*=([^\r\n]*)",self.getData()[0:]) + txt=re.match("&[PpSs](\d*)\s*=([^\r\n]*)",self.getData()[0:]) except: txt=self.getData()[0:] @@ -318,8 +318,8 @@ def checkFile(filename,data,folder): # first check the file name fn=filename.split(".") # no extension - if not fn[0][0]=="P": - return False,"P missing in the filename" + if not (fn[0][0]=="P" or fn[0][0]=="S"): + return False,"P/S missing in the filename" elif len(fn[0])!=7: return False,"P number has not the right length 6" elif not checkUTF8(data): @@ -343,7 +343,7 @@ def splitatf(fh,dir=None,ext=None): for lineTmp in iter: lineTmp=lineTmp.replace(codecs.BOM_UTF8,'') # make sure that all BOM are removed.. for line in lineTmp.split("\r"): - #logging.log("Deal with: %s"%line) + #logging.info("Deal with: %s"%line) if ext: i+=1 if (i%100)==0: @@ -721,6 +721,19 @@ class CDLIRoot(Folder): splitter = {'words':cdliSplitter.wordSplitter(), 'graphemes':cdliSplitter.graphemeSplitter()} + def redirect(self,RESPONSE,url): + """mache ein redirect mit einem angehaengten time stamp um ein reload zu erzwingen""" + + timeStamp=time.time() + + if url.find("?")>-1: #giebt es schon parameter + addStr="&time=%s" + else: + addStr="?time=%s" + + RESPONSE.setHeader('Last-Modified',email.Utils.formatdate().split("-")[0]+'GMT') + logging.error(email.Utils.formatdate()+' GMT') + RESPONSE.redirect(url+addStr%timeStamp) def unicodify(self,txt): return unicodify(txt) @@ -756,7 +769,9 @@ class CDLIRoot(Folder): """view an Object""" ob = self.CDLICatalog({'title':id}) if len(ob)>0: - RESPONSE.redirect(ob[0].getLastVersion().absolute_url()) + logging.info("objekt:"+repr(ob[0])) + #RESPONSE.redirect(ob[0].getLastVersion().absolute_url()) + RESPONSE.redirect(ob[0].absolute_url+"/download") return "not found" def addCDLIFileObjectForm(self,id,RESPONSE): """view an Object""" @@ -779,16 +794,41 @@ class CDLIRoot(Folder): RESPONSE.redirect(ob[0].absolute_url+"/unlock") return "not found" + def getFileObject(self,fileId): """get an object""" + logging.debug("getFileObj:"+repr(fileId)) + if isinstance(fileId,CDLIFileObject): # support for old baskets + return fileId x=self.v_files.get(fileId) - #logging.debug(x) + logging.debug("obj: "+repr(x)) + if x==None: + folder=fileId[0:3] + f2=fileId[0:5] + fObj = getattr(self.cdliRoot.cdli_main,folder); + f2Obj = getattr(fObj,f2) + + o = getattr(f2Obj,fileId) + logging.debug(o); + self.updateOrAddToFileBTree(o) + return o return x def getFileObjectLastVersion(self,fileId): """get an object""" x=self.v_files_lastVersion.get(fileId) - #logging.debug("lastVersion: "+repr(x)) + logging.debug("lastVersion: "+repr(x)) + if x==None: + folder=fileId[0:3] + f2=fileId[0:5] + fObj = getattr(self.cdliRoot.cdli_main,folder); + f2Obj = getattr(fObj,f2) + + o =getattr(f2Obj,fileId) + logging.debug(o); + return o.getLastVersion() + + return x def showFileIds(self): @@ -817,8 +857,17 @@ class CDLIRoot(Folder): self.v_files_lastVersion.update({obj.getId():obj.getLastVersion()}) self.v_file_ids.add(obj.getId()) - logging.debug("update:"+obj.getId()+"XXX"+repr(obj)) + #change everthing around to make it persistent... + tmp = self.v_files + self.v_files=tmp + tmp2=self.v_file_ids + self.v_file_ids=tmp2 + + self.CDLICache.cleanCache() #be sure that the cache is clean + logging.debug("update:"+obj.getId()+"XXX"+repr(obj)) + + def deleteFromBTree(self,objId): """delete an obj""" self.v_files.pop(objId) @@ -951,7 +1000,7 @@ class CDLIRoot(Folder): if line.lstrip().startswith('#lem:'): continue # ignore p-num line - if line.startswith('&P'): + if line.startswith('&P') or line.startswith('&S'): continue # ignore version lines if line.startswith('#version'): @@ -1042,11 +1091,11 @@ class CDLIRoot(Folder): lv.author=user lv.versionComment="XXXXXXX" - - - - def forceunlock(self,REQUEST=None,user=None): + def forceunlock(self,REQUEST=None,user=None,fid=None): "break all locks" + if fid is not None: + self.getFileObject(fid).forceunlock() + return fid ret=[] for f in self.ZopeFind(self,obj_metatypes="CDLI file",search_sub=1): @@ -1067,8 +1116,8 @@ class CDLIRoot(Folder): """hole alle gesperrten files""" ret={} - for f in self.ZopeFind(self,obj_metatypes="CDLI file",search_sub=1): - lb = f[1].lockedBy + for nm,f in self.v_files.items(): + lb = str(f.lockedBy) add=False if (lb is not None) and (lb!=""): @@ -1080,7 +1129,7 @@ class CDLIRoot(Folder): if add==True: if not ret.has_key(lb): ret[lb]=[] - ret[lb].append(f[0]) + ret[lb].append(nm) if REQUEST is not None: @@ -1265,9 +1314,6 @@ class CDLIRoot(Folder): def uploadATFfinally(self,procedure='',comment="",basketname='',unlock=None,repeat=None,RESPONSE=None): """nowupload the files""" - - - threadName=repeat if not threadName or threadName=="": thread=uploadATFfinallyThread() @@ -1327,7 +1373,11 @@ class CDLIRoot(Folder): try: self.cdliRoot.updateOrAddToFileBTree(ob[0].getObject()) except: + logging.error("uploadATFfinally - cannot update Object %s Error: %s %s"%(ob[1],sys.exc_info()[0],sys.exc_info()[1])) + for x in stObj.returnValue['newPs']: + obj=self.getFileObject(x) #updates the object in the cache + logging.debug("Got:"+repr(obj)) if RESPONSE is not None: RESPONSE.redirect(self.absolute_url()) @@ -1374,17 +1424,21 @@ class CDLIRoot(Folder): id=f logging.debug("importFiles: addCDLIFile fobj2=%s, f=%s file2=%s"%(fobj2,repr(f),repr(file2))) fobj2.addFile(vC='',file=file(file2),author=author,newName=f) + logging.debug("importfiles: fobj2.add") count+=1 #now add the file to the storage ob = getattr(fobj2,f) - self.cdliRoot.updateOrAddToFileBTree(ob) - + logging.debug("importfiles: btree_start") + #self.cdliRoot.updateOrAddToFileBTree(ob) + logging.debug("importfiles: btree_end") if count%100==0: logging.debug("importfiles: committing") transaction.get().commit() + logging.debug("importfiles: committing") transaction.get().commit() + logging.debug("importfiles: committing done") return "ok"