--- cdli/cdli_files.py 2007/03/23 13:58:10 1.73 +++ cdli/cdli_files.py 2007/04/23 13:07:10 1.76 @@ -26,6 +26,7 @@ import logging import transaction import copy import codecs +import sys def generateXMLReturn(hash): """erzeugt das xml file als returnwert fuer uploadATFRPC""" @@ -883,7 +884,43 @@ class CDLIBasket(Folder,CatalogAware): meta_type="CDLIBasket" default_catalog="CDLIBasketCatalog" + def searchInBasket(self,indexName,searchStr,regExp=False): + """searchInBasket""" + lst=self.searchInLineIndexDocs(indexName,searchStr,uniq=True,regExp=regExp) + ret={} + + lv=self.getLastVersion() + + + for obj in lv.content.getContent(): + id=obj[1].getId().split(".")[0] + if id in lst: + + ret[id]=self.showWordInFile(id,searchStr,lineList=self.getLinesFromIndex(indexName,searchStr,id,regExp=regExp),regExp=regExp,indexName=indexName) + + + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','searchResultsInBasket')).__of__(self) + return pt(result=ret,indexName=indexName,regExp=regExp,word=searchStr) + + + + + def searchInBasket_v1(self,searchStr): + """search occurences of searchStr in files im basket""" + ret=[] + lv=self.getLastVersion() + logging.info("searching") + for obj in lv.content.getContent(): + txt=obj[0].getData() + for x in txt.split("\n"): + logging.info("search %s"%x) + if re.match(searchStr,x): + ret.append(x) + + return "\n".join(ret) + + def getFile(self,obj): return obj[1] @@ -1322,7 +1359,7 @@ class CDLIBasketVersion(Implicit,Persist def __init__(self,id,user,comment="",basketContent=[]): """ init a basket version""" self.id=id - self.coment=comment + self.comment=comment self._setObject('content',BasketContent(basketContent)) #self.basketContent=basketContent[0:]a self.user=user @@ -2048,10 +2085,14 @@ class CDLIRoot(Folder): words=self.findWordRegExp(indexName,searchTerm) # suche nach allen Treffern logging.info("wd:%s"%words) for word in words: + ret+=self.searchInLineIndexDocs(indexName,word) - - return unique(ret) - + + + x= unique(ret) + logging.info("words_done") + return x + def showInLineIndex(self): """get the index for debug purposes""" print "show" @@ -2155,7 +2196,7 @@ class CDLIRoot(Folder): transaction.get().commit() - def showFile(self,fileId): + def showFile(self,fileId,wholePage=False): """show a file @param fileId: P-Number of the document to be displayed """ @@ -2163,14 +2204,18 @@ class CDLIRoot(Folder): if not f: return "" - return f[0].getObject().getLastVersionFormattedData() + if wholePage: + logging.info("whole") + return f[0].getObject().getLastVersion().view() + else: + return f[0].getObject().getLastVersionFormattedData() def showWordInFile(self,fileId,word,lineList=None,regExp=True,indexName=""): """get lines with word fromFileId""" file=self.showFile(fileId) - + logging.info("regEXP %s"%regExp) ret=[] if regExp: # wenn regexp dann generiere alle worte aus der list die der regexp entsprechen wordlist=self.findWordRegExp(indexName,word) @@ -2180,7 +2225,8 @@ class CDLIRoot(Folder): for line in file.split("\n"): found=False for word in wordlist: - if line.find(word)>-1: + try: # just a hack because of possible unicode errors in line + if line.find(word)>-1: if lineList: #liste of moeglichen Zeilennummern num=line.split(".")[0] #Zeilenummer ist alles vor dem . in der Zeile @@ -2191,6 +2237,8 @@ class CDLIRoot(Folder): ret.append(line) break; + except: + pass return ret def tagWordInFile(self,fileId,word,lineList=None,regExp=True,indexName=""):