X-Git-Url: http://git.veekun.com/zzz-pokedex.git/blobdiff_plain/fce3e52afba0e48be30c7e3b77439f81efe4c75f..c0f4718a6d1ef731d857090a57555e38dd1151a3:/pokedex/db/tables.py diff --git a/pokedex/db/tables.py b/pokedex/db/tables.py index 49d9c17..bae2211 100644 --- a/pokedex/db/tables.py +++ b/pokedex/db/tables.py @@ -180,6 +180,14 @@ class Move(TableBase): super_contest_effect_id = Column(Integer, nullable=False) class Pokemon(TableBase): + """The core to this whole mess. + + Note that I use both 'forme' and 'form' in both code and the database. I + only use 'forme' when specifically referring to Pokémon that have multiple + distinct species as forms—i.e., different stats or movesets. 'Form' is a + more general term referring to any variation within a species, including + purely cosmetic forms like Unown. + """ __tablename__ = 'pokemon' id = Column(Integer, primary_key=True, nullable=False) name = Column(Unicode(20), nullable=False) @@ -225,6 +233,17 @@ class Pokemon(TableBase): return "%s %s" % (self.forme_name.capitalize(), self.name) return self.name + @property + def normal_form(self): + """Returns the normal form for this Pokémon; i.e., this will return + regular Deoxys when called on any Deoxys form. + """ + + if self.forme_base_pokemon: + return self.forme_base_pokemon + + return self + class PokemonAbility(TableBase): __tablename__ = 'pokemon_abilities' pokemon_id = Column(Integer, ForeignKey('pokemon.id'), primary_key=True, nullable=False, autoincrement=False) @@ -332,6 +351,9 @@ LocationArea.location = relation(Location, backref='areas') Pokemon.abilities = relation(Ability, secondary=PokemonAbility.__table__, order_by=PokemonAbility.slot, backref='pokemon') +Pokemon.formes = relation(Pokemon, primaryjoin=Pokemon.id==Pokemon.forme_base_pokemon_id, + backref=backref('forme_base_pokemon', + remote_side=[Pokemon.id])) Pokemon.dex_numbers = relation(PokemonDexNumber, backref='pokemon') Pokemon.egg_groups = relation(EggGroup, secondary=PokemonEggGroup.__table__, order_by=PokemonEggGroup.egg_group_id,