* fix: forgotten txn stuff
This commit is contained in:
+2
-2
@@ -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)
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user