--- cdli/cdli_files.py 2006/12/22 20:35:33 1.55
+++ cdli/cdli_files.py 2007/01/24 18:05:24 1.58
@@ -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):
@@ -1198,10 +1201,10 @@ class CDLIBasketVersion(Implicit,Persist
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"