X-Git-Url: http://git.veekun.com/zzz-pokedex.git/blobdiff_plain/393cba156e6b38519ebe79b2631f55407259ffaa..471b16d0131795f87cbd8a534a3d321e0ecf18e2:/pokedex/db/tables.py diff --git a/pokedex/db/tables.py b/pokedex/db/tables.py index d2a0e77..c295ddd 100644 --- a/pokedex/db/tables.py +++ b/pokedex/db/tables.py @@ -2,15 +2,19 @@ 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.types import * from sqlalchemy.databases.mysql import * +from pokedex.db import rst + metadata = MetaData() TableBase = declarative_base(metadata=metadata) class Ability(TableBase): __tablename__ = 'abilities' + __singlename__ = 'ability' id = Column(Integer, primary_key=True, nullable=False) name = Column(Unicode(24), nullable=False) flavor_text = Column(Unicode(64), nullable=False) @@ -135,6 +139,7 @@ class GrowthRate(TableBase): class Item(TableBase): __tablename__ = 'items' + __singlename__ = 'item' id = Column(Integer, primary_key=True, nullable=False) name = Column(Unicode(16), nullable=False) @@ -145,6 +150,7 @@ class Language(TableBase): class Location(TableBase): __tablename__ = 'locations' + __singlename__ = 'location' id = Column(Integer, primary_key=True, nullable=False) generation_id = Column(Integer, ForeignKey('generations.id'), nullable=False) name = Column(Unicode(64), nullable=False) @@ -156,12 +162,30 @@ class LocationArea(TableBase): internal_id = Column(Integer, nullable=False) name = Column(Unicode(64), nullable=True) +class Machine(TableBase): + __tablename__ = 'machines' + machine_number = Column(Integer, primary_key=True, nullable=False, autoincrement=False) + generation_id = Column(Integer, ForeignKey('generations.id'), primary_key=True, nullable=False, autoincrement=False) + move_id = Column(Integer, ForeignKey('moves.id'), nullable=False) + +class MoveDamageClass(TableBase): + __tablename__ = 'move_damage_classes' + id = Column(Integer, primary_key=True, nullable=False) + name = Column(Unicode(8), nullable=False) + description = Column(Unicode(64), nullable=False) + class MoveEffect(TableBase): __tablename__ = 'move_effects' id = Column(Integer, primary_key=True, nullable=False) priority = Column(SmallInteger, nullable=False) - short_effect = Column(Unicode(128), nullable=False) - effect = Column(Unicode(255), nullable=False) + short_effect = Column(Unicode(256), nullable=False) + effect = Column(Unicode(5120), nullable=False) + +class MoveName(TableBase): + __tablename__ = 'move_names' + move_id = Column(Integer, ForeignKey('moves.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 MoveTarget(TableBase): __tablename__ = 'move_targets' @@ -171,14 +195,16 @@ class MoveTarget(TableBase): class Move(TableBase): __tablename__ = 'moves' + __singlename__ = 'move' id = Column(Integer, primary_key=True, nullable=False) name = Column(Unicode(12), nullable=False) + generation_id = Column(Integer, ForeignKey('generations.id'), nullable=False) type_id = Column(Integer, ForeignKey('types.id'), nullable=False) power = Column(SmallInteger) pp = Column(SmallInteger, nullable=False) accuracy = Column(SmallInteger) target_id = Column(Integer, ForeignKey('move_targets.id'), nullable=False) - category = Column(Unicode(8), 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 = Column(Unicode(8), nullable=False) @@ -195,6 +221,7 @@ class Pokemon(TableBase): purely cosmetic forms like Unown. """ __tablename__ = 'pokemon' + __singlename__ = 'pokemon' id = Column(Integer, primary_key=True, nullable=False) name = Column(Unicode(20), nullable=False) forme_name = Column(Unicode(16)) @@ -344,6 +371,7 @@ class TypeEfficacy(TableBase): class Type(TableBase): __tablename__ = 'types' + __singlename__ = 'type' id = Column(Integer, primary_key=True, nullable=False) name = Column(Unicode(8), nullable=False) abbreviation = Column(Unicode(3), nullable=False) @@ -374,10 +402,25 @@ EncounterTypeSlot.type = relation(EncounterType, backref='slots') EvolutionChain.growth_rate = relation(GrowthRate, backref='evolution_chains') +Generation.versions = relation(Version, secondary=VersionGroup.__table__) + LocationArea.location = relation(Location, backref='areas') +Machine.generation = relation(Generation) + +Move.damage_class = relation(MoveDamageClass, backref='moves') +Move.foreign_names = relation(MoveName, backref='pokemon') +Move.generation = relation(Generation, backref='moves') +Move.machines = relation(Machine, backref='move') +Move.move_effect = relation(MoveEffect, backref='moves') +Move.target = relation(MoveTarget, backref='moves') Move.type = relation(Type, backref='moves') -Move.effect = relation(MoveEffect, backref='moves') + +Move.effect = rst.MoveEffectProperty('effect') +Move.priority = association_proxy('move_effect', 'priority') +Move.short_effect = rst.MoveEffectProperty('short_effect') + +MoveName.language = relation(Language) Pokemon.abilities = relation(Ability, secondary=PokemonAbility.__table__, order_by=PokemonAbility.slot, @@ -431,8 +474,7 @@ Type.target_efficacies = relation(TypeEfficacy, ==TypeEfficacy.target_type_id, backref='target_type') -Version.generation = relation(Generation, secondary=VersionGroup.__table__, - backref='versions') Version.version_group = relation(VersionGroup, backref='versions') +Version.generation = association_proxy('version_group', 'generation') VersionGroup.generation = relation(Generation, backref='version_groups')