from sqlalchemy.orm import backref, relation
from sqlalchemy.sql import and_
from sqlalchemy.types import *
-from sqlalchemy.databases.mysql import *
from pokedex.db import rst
A slot (20% walking in grass) and any appropriate world conditions (no
swarm) are thus enough to define a specific encounter.
-
+
Well, okay, almost: each slot actually appears twice.
"""
id = Column(Integer, primary_key=True, nullable=False)
version_group_id = Column(Integer, ForeignKey('version_groups.id'), nullable=False, autoincrement=False)
encounter_terrain_id = Column(Integer, ForeignKey('encounter_terrain.id'), primary_key=False, nullable=False, autoincrement=False)
- rarity = Column(Integer, nullable=False, autoincrement=False)
+ slot = Column(Integer, nullable=True)
+ rarity = Column(Integer, nullable=False)
class EncounterSlotCondition(TableBase):
"""Lists all conditions that affect each slot."""
class Language(TableBase):
__tablename__ = 'languages'
id = Column(Integer, primary_key=True, nullable=False)
+ iso639 = Column(Unicode(2), nullable=False)
iso3166 = Column(Unicode(2), nullable=False)
name = Column(Unicode(16), nullable=False)
contest_effect_id = Column(Integer, ForeignKey('contest_effects.id'), nullable=True)
super_contest_effect_id = Column(Integer, ForeignKey('super_contest_effects.id'), nullable=False)
+class Nature(TableBase):
+ __tablename__ = 'natures'
+ id = Column(Integer, primary_key=True, nullable=False)
+ name = Column(Unicode(8), nullable=False)
+ decreased_stat_id = Column(Integer, ForeignKey('stats.id'), nullable=False)
+ increased_stat_id = Column(Integer, ForeignKey('stats.id'), nullable=False)
+
+class Pokedex(TableBase):
+ __tablename__ = 'pokedexes'
+ id = Column(Integer, primary_key=True, nullable=False)
+ name = Column(Unicode(16), nullable=False)
+ description = Column(Unicode(512))
+
+class PokedexVersionGroup(TableBase):
+ __tablename__ = 'pokedex_version_groups'
+ pokedex_id = Column(Integer, ForeignKey('pokedexes.id'), primary_key=True, nullable=False, autoincrement=False)
+ version_group_id = Column(Integer, ForeignKey('version_groups.id'), primary_key=True, nullable=False, autoincrement=False)
+
class Pokemon(TableBase):
"""The core to this whole mess.
height = Column(Integer, nullable=False)
weight = Column(Integer, nullable=False)
species = Column(Unicode(16), nullable=False)
- color = Column(Unicode(6), nullable=False)
+ color_id = Column(Integer, ForeignKey('pokemon_colors.id'), nullable=False)
pokemon_shape_id = Column(Integer, ForeignKey('pokemon_shapes.id'), nullable=False)
- habitat = Column(Unicode(16), nullable=False)
+ habitat_id = Column(Integer, ForeignKey('pokemon_habitats.id'), nullable=True)
gender_rate = Column(Integer, nullable=False)
capture_rate = Column(Integer, nullable=False)
base_experience = Column(Integer, nullable=False)
base_happiness = Column(Integer, nullable=False)
- gen1_internal_id = Column(Integer)
is_baby = Column(Boolean, nullable=False)
has_gen4_fem_sprite = Column(Boolean, nullable=False)
has_gen4_fem_back_sprite = Column(Boolean, nullable=False)
"""Returns the name of this Pokémon, including its Forme, if any."""
if self.forme_name:
- return "%s %s" % (self.forme_name.capitalize(), self.name)
+ return "%s %s" % (self.forme_name.title(), self.name)
return self.name
@property
ability_id = Column(Integer, ForeignKey('abilities.id'), nullable=False)
slot = Column(Integer, primary_key=True, nullable=False, autoincrement=False)
+class PokemonColor(TableBase):
+ __tablename__ = 'pokemon_colors'
+ id = Column(Integer, primary_key=True, nullable=False, autoincrement=False)
+ name = Column(Unicode(6), nullable=False)
+
class PokemonDexNumber(TableBase):
__tablename__ = 'pokemon_dex_numbers'
pokemon_id = Column(Integer, ForeignKey('pokemon.id'), primary_key=True, nullable=False, autoincrement=False)
- generation_id = Column(Integer, ForeignKey('generations.id'), primary_key=True, nullable=False, autoincrement=False)
+ pokedex_id = Column(Integer, ForeignKey('pokedexes.id'), primary_key=True, nullable=False, autoincrement=False)
pokedex_number = Column(Integer, nullable=False)
class PokemonEggGroup(TableBase):
class PokemonFormGroup(TableBase):
__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)
class PokemonFormSprite(TableBase):
pokemon_id = Column(Integer, ForeignKey('pokemon.id'), primary_key=True, nullable=False, autoincrement=False)
introduced_in_version_group_id = Column(Integer, ForeignKey('version_groups.id'), primary_key=True, nullable=False, autoincrement=False)
name = Column(Unicode(16), nullable=True)
+ is_default = Column(Boolean, nullable=True)
+
+class PokemonHabitat(TableBase):
+ __tablename__ = 'pokemon_habitats'
+ id = Column(Integer, primary_key=True, nullable=False, autoincrement=False)
+ name = Column(Unicode(16), nullable=False)
class PokemonItem(TableBase):
__tablename__ = 'pokemon_items'
MoveName.language = relation(Language)
+Nature.decreased_stat = relation(Stat, primaryjoin=Nature.decreased_stat_id==Stat.id,
+ backref='decreasing_natures')
+Nature.increased_stat = relation(Stat, primaryjoin=Nature.increased_stat_id==Stat.id,
+ backref='increasing_natures')
+
+Pokedex.version_groups = relation(VersionGroup, secondary=PokedexVersionGroup.__table__)
+
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.pokemon_color = relation(PokemonColor, backref='pokemon')
+Pokemon.color = association_proxy('pokemon_color', 'name')
Pokemon.dex_numbers = relation(PokemonDexNumber, backref='pokemon')
+Pokemon.default_form_sprite = relation(PokemonFormSprite,
+ primaryjoin=and_(
+ Pokemon.id==PokemonFormSprite.pokemon_id,
+ PokemonFormSprite.is_default==True,
+ ),
+ uselist=False)
Pokemon.egg_groups = relation(EggGroup, secondary=PokemonEggGroup.__table__,
order_by=PokemonEggGroup.egg_group_id,
backref='pokemon')
remote_side=[Pokemon.id]))
Pokemon.flavor_text = relation(PokemonFlavorText, order_by=PokemonFlavorText.pokemon_id, backref='pokemon')
Pokemon.foreign_names = relation(PokemonName, backref='pokemon')
+Pokemon.pokemon_habitat = relation(PokemonHabitat, backref='pokemon')
+Pokemon.habitat = association_proxy('pokemon_habitat', 'name')
Pokemon.items = relation(PokemonItem)
Pokemon.generation = relation(Generation, backref='pokemon')
Pokemon.shape = relation(PokemonShape, backref='pokemon')
Pokemon.stats = relation(PokemonStat, backref='pokemon')
Pokemon.types = relation(Type, secondary=PokemonType.__table__)
-PokemonDexNumber.generation = relation(Generation)
+PokemonDexNumber.pokedex = relation(Pokedex)
PokemonFlavorText.version = relation(Version)