Make baby-trigger items (i.e., incense) a foreign key. #337
[zzz-pokedex.git] / pokedex / db / tables.py
index 85cdc22..8360079 100644 (file)
@@ -177,7 +177,7 @@ class EvolutionChain(TableBase):
     __tablename__ = 'evolution_chains'
     id = Column(Integer, primary_key=True, nullable=False)
     growth_rate_id = Column(Integer, ForeignKey('growth_rates.id'), nullable=False)
-    baby_trigger_item = Column(Unicode(12))
+    baby_trigger_item_id = Column(Integer, ForeignKey('items.id'), nullable=True)
 
 class EvolutionTrigger(TableBase):
     __tablename__ = 'evolution_triggers'
@@ -293,6 +293,12 @@ class LocationAreaEncounterRate(TableBase):
     version_id = Column(Integer, ForeignKey('versions.id'), primary_key=True, autoincrement=False)
     rate = Column(Integer, nullable=True)
 
+class LocationInternalID(TableBase):
+    __tablename__ = 'location_internal_ids'
+    location_id = Column(Integer, ForeignKey('locations.id'), nullable=False, primary_key=True)
+    generation_id = Column(Integer, ForeignKey('generations.id'), nullable=False, primary_key=True)
+    internal_id = Column(Integer, nullable=False)
+
 class Machine(TableBase):
     __tablename__ = 'machines'
     machine_number = Column(Integer, primary_key=True, nullable=False, autoincrement=False)
@@ -392,6 +398,13 @@ class Nature(TableBase):
     hates_flavor_id = Column(Integer, ForeignKey('contest_types.id'), nullable=False)
     likes_flavor_id = Column(Integer, ForeignKey('contest_types.id'), nullable=False)
 
+    @property
+    def is_neutral(self):
+        u"""Returns True iff this nature doesn't alter a Pokémon's stats,
+        bestow taste preferences, etc.
+        """
+        return self.increased_stat_id == self.decreased_stat_id
+
 class NatureBattleStylePreference(TableBase):
     __tablename__ = 'nature_battle_style_preferences'
     nature_id = Column(Integer, ForeignKey('natures.id'), primary_key=True, nullable=False)
@@ -682,6 +695,12 @@ class Type(TableBase):
     generation_id = Column(Integer, ForeignKey('generations.id'), nullable=False)
     damage_class_id = Column(Integer, ForeignKey('move_damage_classes.id'), nullable=False) ## ??? is none; everything else is physical or special
 
+class TypeName(TableBase):
+    __tablename__ = 'type_names'
+    type_id = Column(Integer, ForeignKey('types.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 VersionGroup(TableBase):
     __tablename__ = 'version_groups'
     id = Column(Integer, primary_key=True, nullable=False)
@@ -740,6 +759,7 @@ EncounterSlotCondition.condition = relation(EncounterCondition,
                                             backref='slot_map')
 
 EvolutionChain.growth_rate = relation(GrowthRate, backref='evolution_chains')
+EvolutionChain.baby_trigger_item = relation(Item, backref='evolution_chains')
 
 Experience.growth_rate = relation(GrowthRate, backref='experience_table')
 
@@ -764,6 +784,9 @@ ItemCategory.pocket = relation(ItemPocket)
 
 ItemFlavorText.version_group = relation(VersionGroup)
 
+ItemInternalID.item = relation(Item, backref='internal_ids')
+ItemInternalID.generation = relation(Generation)
+
 ItemName.language = relation(Language)
 
 ItemPocket.categories = relation(ItemCategory, order_by=ItemCategory.name)
@@ -772,6 +795,9 @@ Location.region = relation(Region, backref='locations')
 
 LocationArea.location = relation(Location, backref='areas')
 
+LocationInternalID.location = relation(Location, backref='internal_ids')
+LocationInternalID.generation = relation(Generation)
+
 Machine.item = relation(Item)
 Machine.version_group = relation(VersionGroup)
 
@@ -947,6 +973,9 @@ Type.target_efficacies = relation(TypeEfficacy,
 
 Type.generation = relation(Generation, backref='types')
 Type.damage_class = relation(MoveDamageClass, backref='types')
+Type.foreign_names = relation(TypeName, backref='type')
+
+TypeName.language = relation(Language)
 
 Version.version_group = relation(VersionGroup, backref='versions')
 Version.generation = association_proxy('version_group', 'generation')