From db25bf7547d0ed3f7d684b8b5d8643179ae613bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eray=20=C3=96zkural?= Date: Thu, 8 Dec 2005 21:04:54 +0000 Subject: [PATCH] * fix: forgotten txn stuff --- pisi/packagedb.py | 4 +-- pisi/search/__init__.py | 12 ++++---- pisi/search/invertedindex.py | 59 +++++++++++++++++++++--------------- 3 files changed, 42 insertions(+), 33 deletions(-) diff --git a/pisi/packagedb.py b/pisi/packagedb.py index 345e4678..cc407204 100644 --- a/pisi/packagedb.py +++ b/pisi/packagedb.py @@ -85,10 +85,10 @@ class PackageDB(object): # index summary and description for (lang, doc) in package_info.summary.iteritems(): 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(): 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) diff --git a/pisi/search/__init__.py b/pisi/search/__init__.py index 4ec0de93..472db3e4 100644 --- a/pisi/search/__init__.py +++ b/pisi/search/__init__.py @@ -47,14 +47,14 @@ def finalize(): ctx.invidx[id][lang].close() ctx.invidx = {} -def add_doc(id, lang, docid, str): +def add_doc(id, lang, docid, str, txn = None): 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): - ctx.invidx[id][lang].remove_doc(docid) +def remove_doc(id, lang, docid, str, txn = None): + ctx.invidx[id][lang].remove_doc(docid, txn) -def query(id, lang, terms): +def query(id, lang, terms, txn = None): import preprocess as p terms = map(lambda x: p.lower(lang, x), terms) - return ctx.invidx[id][lang].query(terms) + return ctx.invidx[id][lang].query(terms, txn) diff --git a/pisi/search/invertedindex.py b/pisi/search/invertedindex.py index 25e2af34..ef79bab3 100644 --- a/pisi/search/invertedindex.py +++ b/pisi/search/invertedindex.py @@ -15,7 +15,6 @@ import types import pisi.lockeddbshelve as shelve - class InvertedIndex(object): """a database of term -> set of documents""" @@ -25,36 +24,46 @@ class InvertedIndex(object): def close(self): self.d.close() - def has_term(self, term): - return self.d.has_key(shelve.LockedDBShelf.encodekey(term)) + def has_term(self, term, txn = None): + 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""" term = shelve.LockedDBShelf.encodekey(term) - if not self.has_term(term): - self.d[term] = set() - return self.d[term] + def proc(txn): + if not self.has_term(term, txn): + self.d.put(term, set(), txn) + return self.d.get(term, txn) + return self.d.txn_proc(proc, txn) - def query(self, terms): - docs = [ self.get_term(x) for x in terms ] - return reduce(lambda x,y: x.union(y), docs) + def query(self, terms, txn = None): + def proc(txn): + 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 = [] - for term in self.d.iterkeys(): - list.append(term) - return list + def f(txn): + for term in self.d.iterkeys(txn): + list.append(term) + return list + return self.d.txn_proc(f, txn) - def add_doc(self, doc, terms): - for term_i in terms: - term_i = shelve.LockedDBShelf.encodekey(term_i) - term_i_docs = self.get_term(term_i) - term_i_docs.add(doc) - self.d[term_i] = term_i_docs # update + def add_doc(self, doc, terms, txn = None): + def f(txn): + for term_i in terms: + term_i = shelve.LockedDBShelf.encodekey(term_i) + term_i_docs = self.get_term(term_i, txn) + 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): - for term_i in terms: - term_i = shelve.LockedDBShelf.encodekey(term_i) - term_i_docs = self.get_term(term_i) - term_i_docs.remove(doc) - self.d[term_i] = term_i_docs # update + def f(txn): + for term_i in terms: + term_i = shelve.LockedDBShelf.encodekey(term_i) + term_i_docs = self.get_term(term_i) + term_i_docs.remove(doc) + self.d.put(term_i, term_i_docs, txn) # update + return self.d.txn_proc(f, txn)