# HG changeset patch # User Paul Boddie # Date 1253644344 -7200 # Node ID 563be18fc4e26ebe91d7167c9652197636a9ee3d # Parent 6313e687d8682b352dfd55c644a0d209f35c4e5f Changed find_positions methods to return an empty list instead of None where no results are returned. Changed itermerge initialisation to use sequences and an _add_seq method instead of iterators and an _add_iter method. Added a close method to the PhraseIterator class in order to offer resource tidying possibilities to its users. diff -r 6313e687d868 -r 563be18fc4e2 iixr/phrases.py --- a/iixr/phrases.py Tue Sep 22 01:08:13 2009 +0200 +++ b/iixr/phrases.py Tue Sep 22 20:32:24 2009 +0200 @@ -29,16 +29,16 @@ def __init__(self, sequences): itermerge.__init__(self, sequences) - def _add_iter(self, iterator, i): + def _add_seq(self, sequence, i): - "Store the details of the given 'iterator' at position 'i'." + "Store the details of the given 'sequence' at position 'i'." - insort_right(self.iters, (len(iterator), i, iterator)) + insort_right(self.iters, (len(sequence), i, iter(sequence))) def next(self): if self.iters: - freq, i, it = self.iters[0] while 1: + freq, i, it = self.iters[0] doc, positions = it.next() values = [(i, positions)] for freq, i, it in self.iters[1:]: @@ -46,11 +46,16 @@ if positions is None: break else: - values.append((i, positions)) + insort_right(values, (i, positions)) else: - values.sort() return doc, [positions for (i, positions) in values] else: raise StopIteration + def close(self): + for freq, i, it in self.iters: + if hasattr(it, "close"): + it.close() + self.iters = [] + # vim: tabstop=4 expandtab shiftwidth=4 diff -r 6313e687d868 -r 563be18fc4e2 iixr/terms.py --- a/iixr/terms.py Tue Sep 22 01:08:13 2009 +0200 +++ b/iixr/terms.py Tue Sep 22 20:32:24 2009 +0200 @@ -372,7 +372,7 @@ t = self._find_term(term) if t is None: - return None + return [] else: offset, frequency, doc_frequency = t return self._get_positions(offset, doc_frequency) diff -r 6313e687d868 -r 563be18fc4e2 itermerge.py --- a/itermerge.py Tue Sep 22 01:08:13 2009 +0200 +++ b/itermerge.py Tue Sep 22 20:32:24 2009 +0200 @@ -33,13 +33,13 @@ # Prepare the underlying iterators. for i, seq in enumerate(sequences): - it = iter(seq) - self._add_iter(it, i) + self._add_seq(seq, i) + + def _add_seq(self, sequence, i): - def _add_iter(self, iterator, i): + "Store the details of the given 'sequence' at position 'i'." - "Store the details of the given 'iterator' at position 'i'." - + iterator = iter(sequence) next = iterator.next self._add_next(next) diff -r 6313e687d868 -r 563be18fc4e2 test.py --- a/test.py Tue Sep 22 01:08:13 2009 +0200 +++ b/test.py Tue Sep 22 20:32:24 2009 +0200 @@ -371,7 +371,7 @@ print doc_positions == dp, doc_positions, dp for term in ("aaa", "dog", "dingo"): dp = rd.find_positions(term) - print dp is None, dp + print dp == [], dp # (Test iterators.)