# Apply extra weight
weight = weight * self.extra_weights.get(text, 1.0)
- if doc['language'] == None:
+ language = doc.get('language')
+ if language is None:
# English (well, "default"); leave it at 1
return weight
- elif doc['language'] == u'Roomaji':
+ elif language == u'Roomaji':
# Give Roomaji a little boost; it's most likely to be searched
return weight * 0.9
else:
tables.Move,
tables.Nature,
tables.Pokemon,
+ tables.PokemonForm,
tables.Type,
)
)
display_name=whoosh.fields.STORED, # non-lowercased name
)
- if not os.path.exists(self.directory):
+ if os.path.exists(self.directory):
+ # create_in() isn't totally reliable, so just nuke whatever's there
+ # manually. Try to be careful about this...
+ for f in os.listdir(self.directory):
+ if re.match('^_?(MAIN|SPELL)_', f):
+ os.remove(os.path.join(self.directory, f))
+ else:
os.mkdir(self.directory)
self.index = whoosh.index.create_in(self.directory, schema=schema,
# Add the basic English name to the index
if cls == tables.Pokemon:
- # Pokémon need their form name added
- # XXX kinda kludgy
- add(row.full_name, None, u'en', u'us')
-
- # If this is a default form, ALSO add the unadorned name,
- # so 'Deoxys' alone will still do the right thing
- if row.forme_name and not row.forme_base_pokemon_id:
- add(row.name, None, u'en', u'us')
- else:
- add(row.name, None, u'en', u'us')
+ # Don't re-add alternate forms of the same Pokémon; they'll
+ # be added as Pokémon forms instead
+ if not row.is_base_form:
+ continue
+ elif cls == tables.PokemonForm:
+ if row.name:
+ add(row.pokemon_name, None, u'en', u'us')
+ continue
# Some things also have other languages' names
# XXX other language form names..?
- for foreign_name in getattr(row, 'foreign_names', []):
- moonspeak = foreign_name.name
- if row.name == moonspeak:
- # Don't add the English name again as a different
+ seen = set()
+ for language, name in getattr(row, 'names', []).items():
+ if name in seen:
+ # Don't add the name again as a different
# language; no point and it makes spell results
# confusing
continue
+ seen.add(name)
- add(moonspeak, foreign_name.language.name,
- foreign_name.language.iso639,
- foreign_name.language.iso3166)
+ add(name, language.name,
+ language.iso639,
+ language.iso3166)
# Add Roomaji too
- if foreign_name.language.name == 'Japanese':
- roomaji = romanize(foreign_name.name)
+ if language.identifier == 'ja':
+ roomaji = romanize(name)
add(roomaji, u'Roomaji', u'ja', u'jp')
writer.commit()
name = name.strip()
prefixes = prefix_chunk.split(',')
- user_valid_types = [_.strip() for _ in prefixes]
+ user_valid_types = []
+ for prefix in prefixes:
+ prefix = prefix.strip()
+ if prefix:
+ user_valid_types.append(prefix)
# Merge the valid types together. Only types that appear in BOTH lists
# may be used.
results.append(LookupResult(object=obj,
indexed_name=record['name'],
name=record['display_name'],
- language=record['language'],
+ language=record.get('language'),
iso639=record['iso639'],
iso3166=record['iso3166'],
exact=exact))
table_names = []
for valid_type in valid_types:
table_name = self._parse_table_name(valid_type)
- # Skip anything not recognized. Could be, say, a language code
- if table_name:
+ # Skip anything not recognized. Could be, say, a language code.
+ # XXX The vast majority of Pokémon forms are unnamed and unindexed,
+ # which can produce blank results. So skip them too for now.
+ if table_name and table_name != 'pokemon_forms':
table_names.append(table_name)
if not table_names:
# were valid, but this function is guaranteed to return
# *something*, so it politely selects from the entire index instead
table_names = self.indexed_tables.keys()
+ table_names.remove('pokemon_forms')
# 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