Commits

Jason R. Coombs committed 42ea943

Began an implementation following http://packages.python.org/Whoosh/tech/backend.html

Comments (0)

Files changed (3)

+import pymongo
+import whoosh.index
+
+from . import reading
+from . import writing
+
+class Index(whoosh.index.Index):
+	database_name = 'thwump'
+	collection_name = 'index'
+	def __init__(self, *args, **kwargs):
+		self.connection = pymongo.Connection(*args, **kwargs)
+		self.collection = self.connection[self.database_name][self.collection_name]
+
+	def is_empty(self):
+		return not self.doc_count()
+
+	def doc_count(self):
+		return self.collection.count()
+
+	def reader(self, reuse=None):
+		return reuse or reading.IndexReader(self)
+
+	def writer(self, **kwargs):
+		return writing.IndexWriter(self)

thwump/reading.py

+import whoosh.reading
+
+class IndexReader(whoosh.reading.IndexReader):
+	def __init__(self, index):
+		self.index = index
+
+	def __contains__(self, term):
+		"""
+		Returns True if the given term tuple (fieldname, text) is
+		in this reader.
+		"""
+		fieldname, text = term
+		query = dict(fieldname=fieldname, text=text)
+		return bool(self.index.collection.find(query).count())
+
+	def __iter__(self):
+		"""
+		Yields (fieldname, text, docfreq, indexfreq) tuples for each term in
+		the reader, in lexical order.
+		"""
+		fields = 'fieldname', 'text', 'docfreq', 'indexfreq'
+		cur = self.index.collection.find(fields=fields).sort('fieldname')
+		return (tuple(rec[field] for field in fields) for rec in cur)

thwump/writing.py

+import whoosh.writing
+
+class IndexWriter(whoosh.writing.IndexWriter):
+	"stubbed"
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.