--- cdli/cdli_files.py 2006/12/22 20:35:33 1.55 +++ cdli/cdli_files.py 2007/01/24 18:08:15 1.59 @@ -22,6 +22,8 @@ from ZPublisher.HTTPResponse import HTTP from ZPublisher.BaseRequest import RequestContainer import threading from BTrees.OOBTree import OOBTree +import logging +import transaction def unique(s): """Return a list of the elements in s, but without duplicates. @@ -166,7 +168,7 @@ class uploadATFfinallyThread(Thread): #add the files self.uploadATFfinallyThread(ctx,self.procedure,comment=self.comment,basketname=self.basketname,unlock=self.unlock,SESSION=self.SESSION,username=self.username) #commit the transactions - get_transaction().commit() + transaction.get().commit() conn.close() #set flag for end of this method self.end=True @@ -310,9 +312,9 @@ class uploadATFThread(Thread): self.uploadATFThread(ctx,self.upload,self.basketId) #ctx.cdliRoot.cdli_main.tmpStore2[self.getName()[0:]]=self.returnValue - - get_transaction().commit() - + + + transaction.get().commit() while self.continueVar: pass @@ -629,8 +631,8 @@ class BasketObject_old(Folder): self.temp_folder.downloadCounter+=1 self._p_changed=1 - get_transaction().commit() - + + transaction.get().commit() for object in self.contents: @@ -648,7 +650,8 @@ class BasketObject_old(Folder): self.REQUEST.RESPONSE.write(ret) self.temp_folder.downloadCounter-=1 self._p_changed=1 - get_transaction().commit() + transaction.get().commit() + def manage_addBasket_oldObjectForm(self): @@ -1191,17 +1194,17 @@ class CDLIBasketVersion(Implicit,Persist self.temp_folder.downloadCounterBaskets+=1 self._p_changed=1 - get_transaction().commit() + transaction.get().commit() if lock: if str(self.REQUEST['AUTHENTICATED_USER'])=='Anonymous User': self.temp_folder.downloadCounterBaskets-=1 self._p_changed=1 - get_transaction().commit() + transaction.get().commit() self.temp_folder.downloadCounterBaskets-=1 self._p_changed=1 - get_transaction().commit() + transaction.get().commit() return "please login first" #check if a locked object exist in the basket. @@ -1221,7 +1224,7 @@ class CDLIBasketVersion(Implicit,Persist self.temp_folder.downloadCounterBaskets-=1 self._p_changed=1 - get_transaction().commit() + transaction.get().commit() return pt() @@ -1251,7 +1254,7 @@ class CDLIBasketVersion(Implicit,Persist self.temp_folder.downloadCounterBaskets-=1 self._p_changed=1 - get_transaction().commit() + transaction.get().commit() self.REQUEST.RESPONSE.setHeader("Content-Disposition","""attachement; filename="%s.atf" """%basket_name) self.REQUEST.RESPONSE.setHeader("Content-Type","application/octet-stream") @@ -1830,7 +1833,7 @@ class CDLIFileFolder(extVersionedFileFol self.temp_folder.downloadCounter+=1 self._p_changed=1 - get_transaction().commit() + transaction.get().commit() list=[(x.getId,x) for x in catalog()] list.sort(sortF) @@ -1850,7 +1853,7 @@ class CDLIFileFolder(extVersionedFileFol RESPONSE.write(obj.getLastVersion().getData()[0:]) self.temp_folder.downloadCounter-=1 self._p_changed=1 - get_transaction().commit() + transaction.get().commit() #os.close(tf) #RESPONSE.redirect(self.absolute_url()+"/downloadFile?fn="%tfilename) return True @@ -1932,30 +1935,64 @@ class CDLIRoot(Folder): meta_type="CDLIRoot" downloadCounterBaskets=0# counts the current basket downloads if counter > 10 no downloads are possible + def findWordRegExp(self,searchTerm): + """find all words in index which match regexp in SearchTerm""" + ret=[] + for x in self.lineIndex.iterkeys(): + if re.match(searchTerm,x): + ret.append(x) + return ret + + def searchRegExpInLineIndexDocs(self,searchTerm): + """search in inLineIndex with regexp""" + if not searchTerm: + return [] + ret=[] + words=self.findWordRegExp(searchTerm) # suche nach allen Treffern + logging.info("wd:%s"%words) + for word in words: + ret+=self.searchInLineIndexDocs(word) + + return unique(ret) + def showInLineIndex(self): """get the index for debug purposes""" print "show" for x in self.lineIndex.iterkeys(): - print "word:",x - for y in self.lineIndex[x].iterkeys(): - print "doc",y,self.lineIndex[x][y] + logging.info("word:%s"%repr(x)) + #for y in self.lineIndex[x].iterkeys(): + # print "doc",repr(y),repr(self.lineIndex[x][y]) return self.lineIndex - def searchInLineIndexDocs(self,word,uniq=True): + def searchInLineIndexDocs(self,word,uniq=True,regExp=False): """search occurences""" + + if regExp: + return self.searchRegExpInLineIndexDocs(word) - - lst=list(self.lineIndex.get(word.upper()).keys()) + try: + lst=list(self.lineIndex.get(word).keys()) + except: + lst=[] if uniq: return unique(lst) else: return lst - def getLinesFromIndex(self,word,doc): + def getLinesFromIndex(self,word,doc,regExp=False): """get lines""" - return self.lineIndex[word][doc] - + if not regExp: + return self.lineIndex.get(word)[doc] + else: # wenn regexp, suche welches word + for w in self.findWordRegExp(word): + if self.lineIndex.get(w): # ein word in im dex gefunden + try: + dc=self.lineIndex.get(word)[doc] + return dc # und ein document dann gib es zurueck + except: + pass #andernfalls weiter + def cleanInLineIndex(self): """delete InlineIndex""" for x in list(self.lineIndex.keys()): @@ -1989,7 +2026,7 @@ class CDLIRoot(Folder): self.lineIndex=li - get_transaction().commit() + transaction.get().commit() def showFile(self,fileId): @@ -2000,18 +2037,69 @@ class CDLIRoot(Folder): return f[0].getObject().getLastVersionFormattedData() - def showLineFromFile(self,fileId,lineNum): + def showLineFromFile(self,fileId,lineNum,word): """get line lineNum fromFileId""" file=self.showFile(fileId) - str="^%s\.(.*)"%lineNum - - m=re.search(str,file,flags=re.M) - if m: - return m.group(1) - else: - return "" + #str="^%s\.[^%s\.]*%s[^\n]*\n"%(lineNum,lineNum,word) + #str="^%s\..*?%s[^\n]*\n"%(lineNum,word) + #print str + #m=re.search(str,file,flags=re.M|re.DOTALL) + #if m: + # return m.group() + #else: + # return "" + #ret=lineNum+"." + #splitted=file.split(lineNum+".") + #if len(splitted)>1: + #for part in splitted[1:]: + #if part.find(word)>-1: + # for x in part.split("\n"): + #ret+=x + #if x.find(word)>-1: + #break + #break; + #return ret + + def showWordInFile(self,fileId,word,lineList=None): + """get lines with word fromFileId""" + + file=self.showFile(fileId) + + ret=[] + for line in file.split("\n"): + if line.find(word)>-1: + if lineList: #liste of moeglichen Zeilennummern + num=line.split(".")[0] #Zeilenummer ist alles vor dem . in der Zeile + + if num in lineList: + + ret.append(line) + else: # nimm alles ohne line check + ret.append(line) + return ret + + def tagWordInFile(self,fileId,word,lineList=None): + """get lines with word fromFileId""" + + file=self.showFile(fileId) + tagStr="""%s""" + ret=[] + for line in file.split("\n"): + if line.find(word)>-1: + if lineList: #liste of moeglichen Zeilennummern + num=line.split(".")[0] #Zeilenummer ist alles vor dem . in der Zeile + + if num in lineList: + + ret.append(line.replace(word,tagStr%word)) + else: # nimm alles ohne line check + ret.append(line.replace(word,tagStr%word)) + else: + ret.append(line) + return "
\n".join(ret) + def URLquote(self,str): """quote url""" return urllib.quote(str) @@ -2020,6 +2108,14 @@ class CDLIRoot(Folder): """unquote url""" return urllib.unquote(str) + def URLquote_plus(self,str): + """quote url""" + return urllib.quote_plus(str) + + def URLunquote_plus(self,str): + """unquote url""" + return urllib.unquote_plus(str) + def forceunlock(self): "break all locks" @@ -2252,7 +2348,7 @@ class CDLIRoot(Folder): if not obj: manage_addCDLIFileFolder(root,folder,folder) fobj=getattr(root,folder) - #get_transaction().commit() + #transaction.get().commit() else: fobj=obj[0][1] @@ -2280,9 +2376,9 @@ class CDLIRoot(Folder): if count > 1000: print "committing" - get_transaction().commit() + transaction.get().commit() count=0 - get_transaction().commit() + transaction.get().commit() return "ok"