version_group_id = Column(Integer, ForeignKey('version_groups.id'), primary_key=True, nullable=False, autoincrement=False)
flavor_text = Column(Unicode(64), nullable=False)
+class AbilityName(TableBase):
+ __tablename__ = 'ability_names'
+ ability_id = Column(Integer, ForeignKey('abilities.id'), primary_key=True, nullable=False, autoincrement=False)
+ language_id = Column(Integer, ForeignKey('languages.id'), primary_key=True, nullable=False, autoincrement=False)
+ name = Column(Unicode(16), nullable=False)
+
class Berry(TableBase):
__tablename__ = 'berries'
id = Column(Integer, primary_key=True, nullable=False)
if pokemon_stat.stat.name == stat_name:
return pokemon_stat
- return None
+ raise KeyError(u'No stat named %s' % stat_name)
+
+ @property
+ def better_damage_class(self):
+ u"""Returns the MoveDamageClass that this Pokémon is best suited for,
+ based on its attack stats.
+
+ If the attack stats are about equal (within 5), returns None. The
+ value None, not the damage class called 'None'.
+ """
+ phys = self.stat(u'Attack')
+ spec = self.stat(u'Special Attack')
+
+ diff = phys.base_stat - spec.base_stat
+
+ if diff > 5:
+ return phys.stat.damage_class
+ elif diff < -5:
+ return spec.stat.damage_class
+ else:
+ return None
class PokemonAbility(TableBase):
__tablename__ = 'pokemon_abilities'
__tablename__ = 'pokemon_form_groups'
pokemon_id = Column(Integer, ForeignKey('pokemon.id'), primary_key=True, nullable=False, autoincrement=False)
is_battle_only = Column(Boolean, nullable=False)
- description = Column(Unicode(512), nullable=False)
+ description = Column(rst.RstTextColumn(1024), nullable=False)
class PokemonFormSprite(TableBase):
__tablename__ = 'pokemon_form_sprites'
version_group_id = Column(Integer, ForeignKey('version_groups.id'), primary_key=True, nullable=False, autoincrement=False)
move_id = Column(Integer, ForeignKey('moves.id'), primary_key=True, nullable=False, autoincrement=False, index=True)
pokemon_move_method_id = Column(Integer, ForeignKey('pokemon_move_methods.id'), primary_key=True, nullable=False, autoincrement=False)
- level = Column(Integer, primary_key=True, nullable=True, autoincrement=False)
- order = Column(Integer, nullable=True)
+ level = Column(Integer, primary_key=True, nullable=True, autoincrement=False, index=True)
+ order = Column(Integer, nullable=True, index=True)
class PokemonMoveMethod(TableBase):
__tablename__ = 'pokemon_move_methods'
class Stat(TableBase):
__tablename__ = 'stats'
id = Column(Integer, primary_key=True, nullable=False)
+ damage_class_id = Column(Integer, ForeignKey('move_damage_classes.id'), nullable=True)
name = Column(Unicode(16), nullable=False)
class SuperContestCombo(TableBase):
### Relations down here, to avoid ordering problems
-Ability.flavor_text = relation(AbilityFlavorText, order_by=AbilityFlavorText.version_group_id, backref='abilities')
+Ability.flavor_text = relation(AbilityFlavorText, order_by=AbilityFlavorText.version_group_id, backref='ability')
+Ability.foreign_names = relation(AbilityName, backref='ability')
Ability.generation = relation(Generation, backref='abilities')
AbilityFlavorText.version_group = relation(VersionGroup)
+AbilityName.language = relation(Language)
+
Berry.berry_firmness = relation(BerryFirmness, backref='berries')
Berry.firmness = association_proxy('berry_firmness', 'name')
Berry.flavors = relation(BerryFlavor, order_by=BerryFlavor.contest_type_id, backref='berry')
Move.damage_class = relation(MoveDamageClass, backref='moves')
Move.flags = association_proxy('move_flags', 'flag')
Move.flavor_text = relation(MoveFlavorText, order_by=MoveFlavorText.version_group_id, backref='move')
-Move.foreign_names = relation(MoveName, backref='pokemon')
+Move.foreign_names = relation(MoveName, backref='move')
Move.generation = relation(Generation, backref='moves')
Move.machines = relation(Machine, backref='move')
Move.move_effect = relation(MoveEffect, backref='moves')
order_by=PokemonEggGroup.egg_group_id,
backref='pokemon')
Pokemon.evolution_chain = relation(EvolutionChain, backref='pokemon')
-Pokemon.evolution_children = relation(Pokemon,
+Pokemon.child_pokemon = relation(Pokemon,
primaryjoin=Pokemon.id==PokemonEvolution.from_pokemon_id,
secondary=PokemonEvolution.__table__,
secondaryjoin=PokemonEvolution.to_pokemon_id==Pokemon.id,
- backref=backref('evolution_parent',
- uselist=False,
- ),
+ backref=backref('parent_pokemon', uselist=False),
)
Pokemon.flavor_text = relation(PokemonFlavorText, order_by=PokemonFlavorText.version_id.asc(), backref='pokemon')
Pokemon.foreign_names = relation(PokemonName, backref='pokemon')
order_by='VersionGroupRegion.version_group_id')
Region.version_groups = association_proxy('version_group_regions', 'version_group')
+Stat.damage_class = relation(MoveDamageClass, backref='stats')
+
SuperContestCombo.first = relation(Move, primaryjoin=SuperContestCombo.first_move_id==Move.id,
backref='super_contest_combo_first')
SuperContestCombo.second = relation(Move, primaryjoin=SuperContestCombo.second_move_id==Move.id,