Link move flavour text to version groups. #169
[zzz-pokedex.git] / pokedex / db / tables.py
index b9a5fea..e0b03fd 100644 (file)
@@ -3,7 +3,8 @@
 from sqlalchemy import Column, ForeignKey, MetaData, Table
 from sqlalchemy.ext.declarative import declarative_base
 from sqlalchemy.ext.associationproxy import association_proxy
-from sqlalchemy.orm import backref, relation
+from sqlalchemy.orm import backref, eagerload_all, relation
+from sqlalchemy.orm.session import Session
 from sqlalchemy.sql import and_
 from sqlalchemy.types import *
 
@@ -286,8 +287,13 @@ class Machine(TableBase):
     __tablename__ = 'machines'
     machine_number = Column(Integer, primary_key=True, nullable=False, autoincrement=False)
     version_group_id = Column(Integer, ForeignKey('version_groups.id'), primary_key=True, nullable=False, autoincrement=False)
+    item_id = Column(Integer, ForeignKey('items.id'), nullable=False)
     move_id = Column(Integer, ForeignKey('moves.id'), nullable=False)
 
+    @property
+    def is_hm(self):
+        return self.machine_number >= 100
+
 class MoveBattleStyle(TableBase):
     __tablename__ = 'move_battle_styles'
     id = Column(Integer, primary_key=True, nullable=False)
@@ -332,7 +338,7 @@ class MoveFlagType(TableBase):
 class MoveFlavorText(TableBase):
     __tablename__ = 'move_flavor_text'
     move_id = Column(Integer, ForeignKey('moves.id'), primary_key=True, nullable=False, autoincrement=False)
-    generation_id = Column(Integer, ForeignKey('generations.id'), primary_key=True, nullable=False, autoincrement=False)
+    version_group_id = Column(Integer, ForeignKey('version_groups.id'), primary_key=True, nullable=False, autoincrement=False)
     flavor_text = Column(Unicode(255), nullable=False)
 
 class MoveName(TableBase):
@@ -686,6 +692,7 @@ Item.berry = relation(Berry, uselist=False, backref='item')
 Item.flags = relation(ItemFlag, secondary=ItemFlagMap.__table__)
 Item.flavor_text = relation(ItemFlavorText, order_by=ItemFlavorText.version_group_id.asc(), backref='item')
 Item.fling_effect = relation(ItemFlingEffect, backref='items')
+Item.machines = relation(Machine, order_by=Machine.version_group_id.asc())
 Item.category = relation(ItemCategory)
 Item.pocket = association_proxy('category', 'pocket')
 
@@ -700,6 +707,7 @@ Location.region = relation(Region, backref='locations')
 
 LocationArea.location = relation(Location, backref='areas')
 
+Machine.item = relation(Item)
 Machine.version_group = relation(VersionGroup)
 
 Move.contest_effect = relation(ContestEffect, backref='moves')
@@ -708,7 +716,7 @@ Move.contest_combo_prev = association_proxy('contest_combo_second', 'first')
 Move.contest_type = relation(ContestType, backref='moves')
 Move.damage_class = relation(MoveDamageClass, backref='moves')
 Move.flags = association_proxy('move_flags', 'flag')
-Move.flavor_text = relation(MoveFlavorText, order_by=MoveFlavorText.generation_id, backref='move')
+Move.flavor_text = relation(MoveFlavorText, order_by=MoveFlavorText.version_group_id, backref='move')
 Move.foreign_names = relation(MoveName, backref='pokemon')
 Move.generation = relation(Generation, backref='moves')
 Move.machines = relation(Machine, backref='move')
@@ -730,7 +738,7 @@ MoveEffectCategoryMap.category = relation(MoveEffectCategory)
 
 MoveFlag.flag = relation(MoveFlagType)
 
-MoveFlavorText.generation = relation(Generation)
+MoveFlavorText.version_group = relation(VersionGroup)
 
 MoveName.language = relation(Language)