mirror of
https://github.com/veekun/pokedex.git
synced 2024-08-20 18:16:34 +00:00
144 lines
5.1 KiB
Python
144 lines
5.1 KiB
Python
|
# Encoding: UTF-8
|
||
|
"""Fill the pokemon_form_generations table
|
||
|
|
||
|
This is an unmaintained one-shot script, only included in the repo for reference.
|
||
|
|
||
|
|
||
|
"""
|
||
|
|
||
|
|
||
|
from sqlalchemy.sql import exists, func
|
||
|
from sqlalchemy.orm import lazyload, eagerload, eagerload_all
|
||
|
from sqlalchemy import and_, or_, not_
|
||
|
|
||
|
from pokedex.db import connect, tables, load
|
||
|
|
||
|
session = connect()
|
||
|
|
||
|
session.query(tables.PokemonFormGeneration).delete()
|
||
|
|
||
|
generations = list(session.query(tables.Generation).order_by(
|
||
|
tables.Generation.id))
|
||
|
|
||
|
q = session.query(tables.PokemonForm)
|
||
|
q = q.options(eagerload_all('pokemon', 'species'))
|
||
|
q = q.order_by(tables.PokemonForm.order)
|
||
|
|
||
|
form_orders = dict(
|
||
|
unown=list('abcdefghijklmnopqrstuvwxyz') + ['exclamation', 'question'],
|
||
|
|
||
|
deoxys=['normal', 'attack', 'defense', 'speed'],
|
||
|
|
||
|
burmy=['plant', 'sandy', 'trash'],
|
||
|
wormadam=['plant', 'sandy', 'trash'],
|
||
|
|
||
|
shellos=['west', 'east'],
|
||
|
gastrodon=['west', 'east'],
|
||
|
|
||
|
rotom=[None, 'heat', 'wash', 'frost', 'fan', 'mow'],
|
||
|
|
||
|
giratina=['altered', 'origin'],
|
||
|
|
||
|
shaymin=['land', 'sky'],
|
||
|
|
||
|
castform=[None, 'sunny', 'rainy', 'snowy'],
|
||
|
basculin=['red-striped', 'blue-striped'],
|
||
|
darmanitan=['standard', 'zen'],
|
||
|
deerling=['spring', 'summer', 'autumn', 'winter'],
|
||
|
sawsbuck=['spring', 'summer', 'autumn', 'winter'],
|
||
|
meloetta=['aria', 'pirouette'],
|
||
|
genesect=[None, 'douse', 'shock', 'burn', 'chill'],
|
||
|
cherrim=['overcast', 'sunshine'],
|
||
|
)
|
||
|
|
||
|
arceus = {4: '''normal fighting flying poison ground rock bug ghost steel
|
||
|
unknown fire water grass electric psychic ice dragon dark'''.split()}
|
||
|
arceus[5] = list(arceus[4])
|
||
|
arceus[5].remove('unknown')
|
||
|
|
||
|
for form in q:
|
||
|
species_ident = form.species.identifier
|
||
|
form_ident = form.form_identifier
|
||
|
is_default = form.is_default and form.pokemon.is_default
|
||
|
print form_ident, species_ident
|
||
|
for gen in generations:
|
||
|
game_index = None
|
||
|
if gen.id >= form.version_group.generation_id:
|
||
|
if gen.id < 4:
|
||
|
# forms not really implemented yet
|
||
|
if species_ident == 'pichu':
|
||
|
if is_default:
|
||
|
game_index = 0
|
||
|
else:
|
||
|
continue
|
||
|
elif species_ident in ('unown', 'castform'):
|
||
|
lst = form_orders[species_ident]
|
||
|
game_index = lst.index(form_ident)
|
||
|
elif species_ident == 'deoxys':
|
||
|
game_index = 0
|
||
|
elif is_default:
|
||
|
game_index = 0
|
||
|
else:
|
||
|
try:
|
||
|
lst = form_orders[species_ident]
|
||
|
except KeyError:
|
||
|
if species_ident == 'pichu' and form_ident == 'spiky-eared':
|
||
|
if gen.id == 4:
|
||
|
game_index = 1
|
||
|
else:
|
||
|
continue
|
||
|
elif species_ident == 'cherrim':
|
||
|
if gen.id < 5:
|
||
|
if is_default:
|
||
|
game_index = 0
|
||
|
else:
|
||
|
continue
|
||
|
else:
|
||
|
lst = ['overcast', 'sunshine']
|
||
|
game_index = lst.index(form_ident)
|
||
|
elif species_ident == 'castform':
|
||
|
if gen.id < 5:
|
||
|
if is_default:
|
||
|
game_index = 0
|
||
|
else:
|
||
|
continue
|
||
|
else:
|
||
|
lst = [None, 'sunny', 'rainy', 'snowy']
|
||
|
game_index = lst.index(form_ident)
|
||
|
elif species_ident == 'arceus':
|
||
|
if gen.id >= 5 and form_ident == 'unknown':
|
||
|
continue
|
||
|
else:
|
||
|
lst = arceus[gen.id]
|
||
|
game_index = lst.index(form_ident)
|
||
|
elif form.is_default and form.pokemon.is_default:
|
||
|
game_index = 0
|
||
|
else:
|
||
|
raise AssertionError()
|
||
|
else:
|
||
|
game_index = lst.index(form_ident)
|
||
|
obj = tables.PokemonFormGeneration(form=form, generation=gen,
|
||
|
game_index=game_index)
|
||
|
session.add(obj)
|
||
|
|
||
|
q = session.query(tables.PokemonFormGeneration)
|
||
|
for species in session.query(tables.PokemonSpecies).options(
|
||
|
eagerload_all('forms', 'pokemon_form_generations')):
|
||
|
if len(species.forms) > 1:
|
||
|
print species.name
|
||
|
for gen in generations:
|
||
|
if len(species.forms) == 1:
|
||
|
pfg = q.get((species.forms[0].id, gen.id))
|
||
|
assert pfg is None or pfg.game_index == 0
|
||
|
continue
|
||
|
forms = [(q.get((f.id, gen.id)), f) for f in species.forms if q.get((f.id, gen.id))]
|
||
|
forms = [(pfg.game_index, f) for pfg, f in forms if pfg]
|
||
|
if forms:
|
||
|
forms.sort()
|
||
|
pl = ["%s=%s" % (gi, f.form_identifier) for gi, f in forms]
|
||
|
print ' ', gen.id, ' '.join(pl)
|
||
|
|
||
|
load.dump(session, tables=['pokemon_form_generations'])
|
||
|
print "Dumped to CSV, rolling back transaction"
|
||
|
session.rollback()
|