* fix: forgotten txn stuff

This commit is contained in:
Eray Özkural
2005-12-08 21:04:54 +00:00
parent 2a1ebc299e
commit db25bf7547
3 changed files with 42 additions and 33 deletions
+2 -2
View File
@@ -85,10 +85,10 @@ class PackageDB(object):
# index summary and description # index summary and description
for (lang, doc) in package_info.summary.iteritems(): for (lang, doc) in package_info.summary.iteritems():
if lang in ['en', 'tr']: if lang in ['en', 'tr']:
pisi.search.add_doc('summary', lang, package_info.name, doc) pisi.search.add_doc('summary', lang, package_info.name, doc, txn)
for (lang, doc) in package_info.description.iteritems(): for (lang, doc) in package_info.description.iteritems():
if lang in ['en', 'tr']: if lang in ['en', 'tr']:
pisi.search.add_doc('description', lang, package_info.name, doc) pisi.search.add_doc('description', lang, package_info.name, doc, txn)
self.d.txn_proc(proc, txn) self.d.txn_proc(proc, txn)
+6 -6
View File
@@ -47,14 +47,14 @@ def finalize():
ctx.invidx[id][lang].close() ctx.invidx[id][lang].close()
ctx.invidx = {} ctx.invidx = {}
def add_doc(id, lang, docid, str): def add_doc(id, lang, docid, str, txn = None):
terms = preprocess(lang, str) terms = preprocess(lang, str)
ctx.invidx[id][lang].add_doc(docid, terms) ctx.invidx[id][lang].add_doc(docid, terms, txn)
def remove_doc(id, lang, docid, str): def remove_doc(id, lang, docid, str, txn = None):
ctx.invidx[id][lang].remove_doc(docid) ctx.invidx[id][lang].remove_doc(docid, txn)
def query(id, lang, terms): def query(id, lang, terms, txn = None):
import preprocess as p import preprocess as p
terms = map(lambda x: p.lower(lang, x), terms) terms = map(lambda x: p.lower(lang, x), terms)
return ctx.invidx[id][lang].query(terms) return ctx.invidx[id][lang].query(terms, txn)
+34 -25
View File
@@ -15,7 +15,6 @@ import types
import pisi.lockeddbshelve as shelve import pisi.lockeddbshelve as shelve
class InvertedIndex(object): class InvertedIndex(object):
"""a database of term -> set of documents""" """a database of term -> set of documents"""
@@ -25,36 +24,46 @@ class InvertedIndex(object):
def close(self): def close(self):
self.d.close() self.d.close()
def has_term(self, term): def has_term(self, term, txn = None):
return self.d.has_key(shelve.LockedDBShelf.encodekey(term)) return self.d.has_key(shelve.LockedDBShelf.encodekey(term), txn)
def get_term(self, term): def get_term(self, term, txn = None):
"""get set of doc ids given term""" """get set of doc ids given term"""
term = shelve.LockedDBShelf.encodekey(term) term = shelve.LockedDBShelf.encodekey(term)
if not self.has_term(term): def proc(txn):
self.d[term] = set() if not self.has_term(term, txn):
return self.d[term] self.d.put(term, set(), txn)
return self.d.get(term, txn)
return self.d.txn_proc(proc, txn)
def query(self, terms): def query(self, terms, txn = None):
docs = [ self.get_term(x) for x in terms ] def proc(txn):
return reduce(lambda x,y: x.union(y), docs) docs = [ self.get_term(x, txn) for x in terms ]
return reduce(lambda x,y: x.union(y), docs)
return self.d.txn_proc(proc, txn)
def list_terms(self): def list_terms(self, txn= None):
list = [] list = []
for term in self.d.iterkeys(): def f(txn):
list.append(term) for term in self.d.iterkeys(txn):
return list list.append(term)
return list
return self.d.txn_proc(f, txn)
def add_doc(self, doc, terms): def add_doc(self, doc, terms, txn = None):
for term_i in terms: def f(txn):
term_i = shelve.LockedDBShelf.encodekey(term_i) for term_i in terms:
term_i_docs = self.get_term(term_i) term_i = shelve.LockedDBShelf.encodekey(term_i)
term_i_docs.add(doc) term_i_docs = self.get_term(term_i, txn)
self.d[term_i] = term_i_docs # update term_i_docs.add(doc)
self.d.put(term_i, term_i_docs, txn) # update
return self.d.txn_proc(f, txn)
def remove_doc(self, doc, terms): def remove_doc(self, doc, terms):
for term_i in terms: def f(txn):
term_i = shelve.LockedDBShelf.encodekey(term_i) for term_i in terms:
term_i_docs = self.get_term(term_i) term_i = shelve.LockedDBShelf.encodekey(term_i)
term_i_docs.remove(doc) term_i_docs = self.get_term(term_i)
self.d[term_i] = term_i_docs # update term_i_docs.remove(doc)
self.d.put(term_i, term_i_docs, txn) # update
return self.d.txn_proc(f, txn)