def lookup(input, valid_types=[], session=None, indices=None, exact_only=False):
"""Attempts to find some sort of object, given a database session and name.
- Returns a list of named (object, name, language, exact) tuples. `object`
- is a database object, `name` is the name under which the object was found,
- `language` is the name of the language in which the name was found, and
- `exact` is True iff this was an exact match.
+ Returns a list of named (object, name, language, iso3166, exact) tuples.
+ `object` is a database object, `name` is the name under which the object
+ was found, `language` and `iso3166` are the name and country code of the
+ language in which the name was found, and `exact` is True iff this was an
+ exact match.
This function currently ONLY does fuzzy matching if there are no exact
matches.
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)
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: