From 9d6aa28bca0bae50c58993a55f5b586dbadff55e Mon Sep 17 00:00:00 2001 From: Eevee Date: Sun, 14 Mar 2010 16:45:10 -0700 Subject: [PATCH 1/1] Lookup no longer crashes if all type prefixes are bogus. --- pokedex/lookup.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/pokedex/lookup.py b/pokedex/lookup.py index 69eedc4..60a6a56 100644 --- a/pokedex/lookup.py +++ b/pokedex/lookup.py @@ -332,7 +332,9 @@ def lookup(input, valid_types=[], session=None, indices=None, exact_only=False): type_terms = [] for valid_type in valid_types: table_name = _parse_table_name(valid_type) - type_terms.append(whoosh.query.Term(u'table', table_name)) + if table_name: + # Quietly ignore bogus valid_types; more likely to DTRT + type_terms.append(whoosh.query.Term(u'table', table_name)) if type_terms: query = query & whoosh.query.Or(type_terms) @@ -377,11 +379,17 @@ def random_lookup(valid_types=[], session=None, indices=None): tables.append(indexed_tables[table_name]) if not tables: + # n.b.: It's possible we got a list of valid_types and none of them + # were valid, but this function is guaranteed to return *something*, so + # it politely selects from the entire index isntead tables = indexed_tables.values() # Rather than create an array of many hundred items and pick randomly from # it, just pick a number up to the total number of potential items, then - # pick randomly from that, and partition the whole range into chunks + # pick randomly from that, and partition the whole range into chunks. + # This also avoids the slight problem that the index contains more rows + # (for languages) for some items than others. + # XXX ought to cache this (in the index?) if possible total = 0 partitions = [] for table in tables: -- 2.7.4