--- cdli/cdli_files.py 2007/10/06 13:44:46 1.80.2.1 +++ cdli/cdli_files.py 2007/10/19 16:25:06 1.80.2.2 @@ -912,7 +912,7 @@ class CDLIBasket(Folder,CatalogAware): def searchInBasket(self,indexName,searchStr,regExp=False): """searchInBasket""" - lst=self.searchInLineIndexDocs(indexName,searchStr,uniq=True,regExp=regExp) + lst=self.searchInLineIndexDocs(indexName,searchStr,uniq=True,regExp=regExp) #TODO: fix this ret={} lv=self.getLastVersion() @@ -1778,7 +1778,7 @@ class CDLIFileFolder(extVersionedFileFol folder_meta_type=['CDLI Folder'] default_catalog='CDLICatalog' - defaultFileCatalog=default_catalog #wenn dieses definiert ist, wird beim hinzufŸgen einer neuen version eines files dieser catalog neuiniziert + defaultFileCatalog=default_catalog #wenn dieses definiert ist, wird beim hinzufuegen einer neuen version eines files dieser catalog neuindiziert #downloadCounter=0 # counts how many download for all files currently run, be mehr als 5 wird verweigert. tmpStore2={} @@ -1789,20 +1789,12 @@ class CDLIFileFolder(extVersionedFileFol def delete(self,ids): - """delete this file, i.e. move into a trash folder""" - - found=self.ZopeFind(self,obj_ids=['.trash']) - - if len(found)<1: - manage_addCDLIFileFolder(self, '.trash',title="Trash") - trash=self._getOb('.trash') - else: - trash=found[0][1] - + """delete these files""" if type(ids) is not ListType: ids=[ids] - cut=self.manage_cutObjects(ids) - trash.manage_pasteObjects(cut) + + self.manage_delObjects(ids) + def getVersionNumbersFromIds(self,ids): """get the numbers of the current versions of documents described by their ids""" @@ -2036,162 +2028,19 @@ class CDLIRoot(Folder): """main folder for cdli""" meta_type="CDLIRoot" - downloadCounterBaskets=0# counts the current basket downloads if counter > 10 no downloads are possible + downloadCounterBaskets=0 # counts the current basket downloads if counter > 10 no downloads are possible def deleteFiles(self,ids): - """delete files (resp. move into .trash folder)""" - # find or generete trash folder - - found=self.ZopeFind(self,obj_ids=['.trash']) - - if len(found)<1: - manage_addCDLIFileFolder(self, '.trash',title="Trash") - trash=self._getOb('.trash') - else: - trash=found[0][1] - + """delete files""" for id in ids: founds=self.CDLICatalog.search({'title':id.split(".")[0]}) if founds: - logging.info(founds) + logging.debug("deleting %s"%founds) folder=founds[0].getObject().aq_parent #get the parent folder of the object - logging.info(folder) - cut=folder.manage_cutObjects([founds[0].getId]) #cut it out - trash.manage_pasteObjects(cut) #paste it in the trash + logging.debug("deleting from %s"%folder) + cut=folder.delete([founds[0].getId]) #cut it out - def findWordRegExp(self,indexName,searchTerm): - """find all words in index which match regexp in SearchTerm - @param indexName: name of the index to be searched in - @param searchTerm: word to be searched""" - - ret=[] - for x in self.lineIndexes[indexName].iterkeys(): - if re.match(searchTerm,x): - ret.append(x) - return ret - - def searchRegExpInLineIndexDocs(self,indexName,searchTerm): - """search in inLineIndex with regexp - @param indexName: name of the index to be searched in - @param searchTerm: term to be searched - """ - if not searchTerm: - return [] - ret=[] - words=self.findWordRegExp(indexName,searchTerm) # suche nach allen Treffern - logging.info("wd:%s"%words) - for word in words: - - ret+=self.searchInLineIndexDocs(indexName,word) - - - x= unique(ret) - logging.info("words_done") - return x - - def showInLineIndex(self): - """get the index for debug purposes""" - print "show" - for key in self.lineIndexes.keys(): - logging.info("index:%s"%key) - for x in self.lineIndexes[key].iterkeys(): - logging.info("word:%s"%repr(x)) - #for y in self.lineIndex[x].iterkeys(): - # print "doc",repr(y),repr(self.lineIndex[x][y]) - - return self.lineIndexes - - def searchInLineIndexDocs(self,indexName,word,uniq=True,regExp=False): - """search occurences in an index - @param indexName: name of the index to be searched in - @param word: word to be searched - @param unique: (optional) unify the list of results - @param regExp: (optional) use regular expressions - """ - - if regExp: - return self.searchRegExpInLineIndexDocs(indexName,word) - - try: - - lst=list(self.lineIndexes[indexName].get(word).keys()) - except: - logging.error("error: searchInLineIndexDocs (%s %s)"%(sys.exc_info()[0:2])) - lst=[] - if uniq: - return unique(lst) - else: - return lst - - def getLinesFromIndex(self,indexName,word,doc,regExp=False): - """return all lines from a document where word is found - @param indexName: Name of the index - @param word: word to be searched - @param doc: name of the document (usuallay the p-number) - @param regExp: (optional) use regExp - """ - - if not regExp: - return self.lineIndexes[indexName].get(word)[doc] - else: # wenn regexp, suche welches word - for w in self.findWordRegExp(indexName,word): - if self.lineIndexes[indexName].get(w): # ein word in im dex gefunden - try: - dc=self.lineIndex[indexName].get(word)[doc] - return dc # und ein document dann gib es zurueck - except: - pass #andernfalls weiter - - def cleanInLineIndex(self,indexName): - """empty an InlineIndex - @param indexName: name of the index - """ - for x in list(self.lineIndexes[indexName].keys()): - del(self.lineIndexes[indexName][x]) - print [x for x in self.lineIndexes[indexName].keys()] - - return "ok" - - def storeInLineIndex(self,indexName,key,value): - """store in index, key is normally a word or grapheme - and value is a tuple (documentname, line) where the word can be found - @param indexName: name of the index - @param key: key in index - @param value: value in index, value is a tuple (document name, line) - """ - logging.error("indexing: %s %s"%(indexName,key)) - if (not hasattr(self,'lineIndexes')): - - self.lineIndexes={} - - if self.lineIndexes.get(indexName,None) is None: - #index exisitiert noch nicht dann anlegen - - self.lineIndexes[indexName]=OOBTree() - lis=self.lineIndexes - li=lis[indexName] - - if li.has_key(key): - -# if li[key].has_key(value[0]) and (not (value[1] in li[key][value[0]])): - if li[key].has_key(value[0]): - tmp=li[key][value[0]] - tmp.append(value[1]) # add it if now in the array - li[key][value[0]]=tmp[0:] - else: - li[key][value[0]]=[value[1]] # new array for lines - - else: - - li[key]=OOBTree()# new btree for lines - li[key][value[0]]=[value[1]] - - - self.lineIndexes=lis - - transaction.get().commit() - def showFile(self,fileId,wholePage=False): """show a file @@ -2202,17 +2051,17 @@ class CDLIRoot(Folder): return "" if wholePage: - logging.info("whole") + logging.debug("show whole page") return f[0].getObject().getContentObject().view() else: return f[0].getObject().getLastVersionFormattedData() - def showWordInFile(self,fileId,word,lineList=None,regExp=True,indexName=""): - """get lines with word fromFileId""" + def showWordInFile(self,fileId,word,lineList=None,regExp=False,indexName=""): + """get lines with word from FileId""" file=self.showFile(fileId) - logging.info("regEXP %s"%regExp) + logging.debug("show word regEXP %s"%regExp) ret=[] if regExp: # wenn regexp dann generiere alle worte aus der list die der regexp entsprechen wordlist=self.findWordRegExp(indexName,word) @@ -2238,8 +2087,8 @@ class CDLIRoot(Folder): pass return ret - def tagWordInFile(self,fileId,word,lineList=None,regExp=True,indexName=""): - """get lines with word fromFileId""" + def tagWordInFile(self,fileId,word,lineList=None,regExp=False,indexName=""): + """get text with word highlighted from FileId""" file=self.showFile(fileId) tagStr=u'%s'