Added natures table.
[zzz-pokedex.git] / pokedex / db / tables.py
index bf3959c..01a070d 100644 (file)
@@ -163,6 +163,7 @@ class Item(TableBase):
 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)
 
@@ -264,6 +265,13 @@ class Move(TableBase):
     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)
@@ -300,7 +308,7 @@ class Pokemon(TableBase):
     species = Column(Unicode(16), 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)
@@ -326,7 +334,7 @@ class Pokemon(TableBase):
         """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
@@ -371,6 +379,7 @@ class PokemonFlavorText(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):
@@ -379,6 +388,12 @@ 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'
@@ -548,6 +563,11 @@ MoveFlavorText.generation = relation(Generation)
 
 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__,
@@ -559,6 +579,12 @@ Pokemon.formes = relation(Pokemon, primaryjoin=Pokemon.id==Pokemon.forme_base_po
 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')
@@ -569,6 +595,8 @@ Pokemon.evolution_children = relation(Pokemon, primaryjoin=Pokemon.id==Pokemon.e
                                                                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')