X-Git-Url: http://git.veekun.com/zzz-pokedex.git/blobdiff_plain/a2769eb7c1aad6a009126e3be22ddab3c680eccb..42d4a78163efaa604ff0bed56f3b8a2fdc6c4c60:/pokedex/db/tables.py?ds=sidebyside diff --git a/pokedex/db/tables.py b/pokedex/db/tables.py index 2af42de..43b4226 100644 --- a/pokedex/db/tables.py +++ b/pokedex/db/tables.py @@ -1,6 +1,6 @@ # encoding: utf8 -from sqlalchemy import Column, ForeignKey, MetaData, Table +from sqlalchemy import Column, ForeignKey, MetaData, PrimaryKeyConstraint, Table from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.ext.associationproxy import association_proxy from sqlalchemy.orm import backref, eagerload_all, relation @@ -177,8 +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) - steps_to_hatch = Column(Integer, 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' @@ -209,7 +208,7 @@ class Item(TableBase): __tablename__ = 'items' __singlename__ = 'item' id = Column(Integer, primary_key=True, nullable=False) - name = Column(Unicode(16), nullable=False) + name = Column(Unicode(20), nullable=False) category_id = Column(Integer, ForeignKey('item_categories.id'), nullable=False) cost = Column(Integer, nullable=False) fling_power = Column(Integer, nullable=True) @@ -254,6 +253,12 @@ class ItemInternalID(TableBase): generation_id = Column(Integer, ForeignKey('generations.id'), primary_key=True, autoincrement=False, nullable=False) internal_id = Column(Integer, nullable=False) +class ItemName(TableBase): + __tablename__ = 'item_names' + item_id = Column(Integer, ForeignKey('items.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 ItemPocket(TableBase): __tablename__ = 'item_pockets' id = Column(Integer, primary_key=True, nullable=False) @@ -288,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) @@ -325,7 +336,6 @@ class MoveDamageClass(TableBase): class MoveEffect(TableBase): __tablename__ = 'move_effects' id = Column(Integer, primary_key=True, nullable=False) - priority = Column(SmallInteger, nullable=False) short_effect = Column(Unicode(256), nullable=False) effect = Column(Unicode(5120), nullable=False) @@ -337,6 +347,7 @@ class MoveFlag(TableBase): class MoveFlagType(TableBase): __tablename__ = 'move_flag_types' id = Column(Integer, primary_key=True, nullable=False) + identifier = Column(Unicode(16), nullable=False) name = Column(Unicode(32), nullable=False) description = Column(markdown.MarkdownColumn(128), nullable=False) @@ -362,19 +373,20 @@ class Move(TableBase): __tablename__ = 'moves' __singlename__ = 'move' id = Column(Integer, primary_key=True, nullable=False) - name = Column(Unicode(12), nullable=False) + name = Column(Unicode(24), nullable=False) generation_id = Column(Integer, ForeignKey('generations.id'), nullable=False) type_id = Column(Integer, ForeignKey('types.id'), nullable=False) - power = Column(SmallInteger) + power = Column(SmallInteger, nullable=False) pp = Column(SmallInteger, nullable=False) - accuracy = Column(SmallInteger) + accuracy = Column(SmallInteger, nullable=True) + priority = Column(SmallInteger, nullable=False) target_id = Column(Integer, ForeignKey('move_targets.id'), nullable=False) damage_class_id = Column(Integer, ForeignKey('move_damage_classes.id'), nullable=False) effect_id = Column(Integer, ForeignKey('move_effects.id'), nullable=False) effect_chance = Column(Integer) contest_type_id = Column(Integer, ForeignKey('contest_types.id'), nullable=True) contest_effect_id = Column(Integer, ForeignKey('contest_effects.id'), nullable=True) - super_contest_effect_id = Column(Integer, ForeignKey('super_contest_effects.id'), nullable=False) + super_contest_effect_id = Column(Integer, ForeignKey('super_contest_effects.id'), nullable=True) class Nature(TableBase): __tablename__ = 'natures' @@ -386,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) @@ -443,13 +462,14 @@ class Pokemon(TableBase): weight = Column(Integer, nullable=False) 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) + pokemon_shape_id = Column(Integer, ForeignKey('pokemon_shapes.id'), nullable=True) 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) is_baby = Column(Boolean, nullable=False) + hatch_counter = Column(Integer, nullable=False) has_gen4_fem_sprite = Column(Boolean, nullable=False) has_gen4_fem_back_sprite = Column(Boolean, nullable=False) @@ -599,12 +619,17 @@ class PokemonItem(TableBase): class PokemonMove(TableBase): __tablename__ = 'pokemon_moves' - pokemon_id = Column(Integer, ForeignKey('pokemon.id'), primary_key=True, nullable=False, autoincrement=False) - version_group_id = Column(Integer, ForeignKey('version_groups.id'), primary_key=True, nullable=False, autoincrement=False) - move_id = Column(Integer, ForeignKey('moves.id'), primary_key=True, nullable=False, autoincrement=False, index=True) - pokemon_move_method_id = Column(Integer, ForeignKey('pokemon_move_methods.id'), primary_key=True, nullable=False, autoincrement=False) - level = Column(Integer, primary_key=True, nullable=True, autoincrement=False, index=True) - order = Column(Integer, nullable=True, index=True) + pokemon_id = Column(Integer, ForeignKey('pokemon.id'), nullable=False, index=True) + version_group_id = Column(Integer, ForeignKey('version_groups.id'), nullable=False, index=True) + move_id = Column(Integer, ForeignKey('moves.id'), nullable=False, index=True) + pokemon_move_method_id = Column(Integer, ForeignKey('pokemon_move_methods.id'), nullable=False, index=True) + level = Column(Integer, nullable=True, index=True) + order = Column(Integer, nullable=True) + + __table_args__ = ( + PrimaryKeyConstraint('pokemon_id', 'version_group_id', 'move_id', 'pokemon_move_method_id', 'level'), + {}, + ) class PokemonMoveMethod(TableBase): __tablename__ = 'pokemon_move_methods' @@ -675,6 +700,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) @@ -733,6 +764,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') @@ -747,6 +779,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.foreign_names = relation(ItemName, backref='item') Item.machines = relation(Machine, order_by=Machine.version_group_id.asc()) Item.category = relation(ItemCategory) Item.pocket = association_proxy('category', 'pocket') @@ -756,12 +789,20 @@ 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) 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) @@ -784,7 +825,6 @@ Move.target = relation(MoveTarget, backref='moves') Move.type = relation(Type, backref='moves') Move.effect = markdown.MoveEffectProperty('effect') -Move.priority = association_proxy('move_effect', 'priority') Move.short_effect = markdown.MoveEffectProperty('short_effect') MoveEffect.category_map = relation(MoveEffectCategoryMap) @@ -852,7 +892,7 @@ Pokemon.habitat = association_proxy('pokemon_habitat', 'name') Pokemon.items = relation(PokemonItem, backref='pokemon') Pokemon.generation = relation(Generation, backref='pokemon') Pokemon.shape = relation(PokemonShape, backref='pokemon') -Pokemon.stats = relation(PokemonStat, backref='pokemon') +Pokemon.stats = relation(PokemonStat, backref='pokemon', order_by=PokemonStat.stat_id.asc()) Pokemon.types = relation(Type, secondary=PokemonType.__table__, order_by=PokemonType.slot.asc()) PokemonDexNumber.pokedex = relation(Pokedex) @@ -937,6 +977,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')