mirror of
https://github.com/veekun/pokedex.git
synced 2024-08-20 18:16:34 +00:00
Reorder the classes in tables.py alphabetically. Also, test the order.
This commit is contained in:
parent
3bfb7f0bb9
commit
7b93c11f7e
2 changed files with 156 additions and 150 deletions
|
@ -359,22 +359,6 @@ class EncounterConditionValueMap(TableBase):
|
|||
encounter_condition_value_id = Column(Integer, ForeignKey('encounter_condition_values.id'), primary_key=True, nullable=False, autoincrement=False,
|
||||
info=dict(description="The ID of the encounter condition value"))
|
||||
|
||||
class EncounterTerrain(TableBase):
|
||||
u"""A way the player can enter a wild encounter, e.g., surfing, fishing, or walking through tall grass.
|
||||
"""
|
||||
|
||||
__tablename__ = 'encounter_terrain'
|
||||
__singlename__ = __tablename__
|
||||
id = Column(Integer, primary_key=True, nullable=False,
|
||||
info=dict(description="A unique ID for the terrain"))
|
||||
identifier = Column(Unicode(64), nullable=False,
|
||||
info=dict(description="An identifier", format='identifier'))
|
||||
|
||||
create_translation_table('encounter_terrain_prose', EncounterTerrain, 'prose',
|
||||
name = Column(Unicode(64), nullable=False, index=True,
|
||||
info=dict(description="The name", format='plaintext', official=False)),
|
||||
)
|
||||
|
||||
class EncounterSlot(TableBase):
|
||||
u"""An abstract "slot" within a terrain, associated with both some set of conditions and a rarity.
|
||||
|
||||
|
@ -394,6 +378,22 @@ class EncounterSlot(TableBase):
|
|||
rarity = Column(Integer, nullable=False,
|
||||
info=dict(description="The chance of the encounter as a percentage"))
|
||||
|
||||
class EncounterTerrain(TableBase):
|
||||
u"""A way the player can enter a wild encounter, e.g., surfing, fishing, or walking through tall grass.
|
||||
"""
|
||||
|
||||
__tablename__ = 'encounter_terrain'
|
||||
__singlename__ = __tablename__
|
||||
id = Column(Integer, primary_key=True, nullable=False,
|
||||
info=dict(description="A unique ID for the terrain"))
|
||||
identifier = Column(Unicode(64), nullable=False,
|
||||
info=dict(description="An identifier", format='identifier'))
|
||||
|
||||
create_translation_table('encounter_terrain_prose', EncounterTerrain, 'prose',
|
||||
name = Column(Unicode(64), nullable=False, index=True,
|
||||
info=dict(description="The name", format='plaintext', official=False)),
|
||||
)
|
||||
|
||||
class EvolutionChain(TableBase):
|
||||
u"""A family of Pokémon that are linked by evolution
|
||||
"""
|
||||
|
@ -683,6 +683,48 @@ class Machine(TableBase):
|
|||
"""
|
||||
return self.machine_number >= 100
|
||||
|
||||
class Move(TableBase):
|
||||
u"""A Move: technique or attack a Pokémon can learn to use
|
||||
"""
|
||||
__tablename__ = 'moves'
|
||||
__singlename__ = 'move'
|
||||
id = Column(Integer, primary_key=True, nullable=False,
|
||||
info=dict(description="A numeric ID"))
|
||||
identifier = Column(Unicode(24), nullable=False,
|
||||
info=dict(description="An identifier", format='identifier'))
|
||||
generation_id = Column(Integer, ForeignKey('generations.id'), nullable=False,
|
||||
info=dict(description="ID of the generation this move first appeared in"))
|
||||
type_id = Column(Integer, ForeignKey('types.id'), nullable=False,
|
||||
info=dict(description="ID of the move's elemental type"))
|
||||
power = Column(SmallInteger, nullable=False,
|
||||
info=dict(description="Base power of the move"))
|
||||
pp = Column(SmallInteger, nullable=True,
|
||||
info=dict(description="Base PP (Power Points) of the move, nullable if not applicable (e.g. Struggle and Shadow moves)."))
|
||||
accuracy = Column(SmallInteger, nullable=True,
|
||||
info=dict(description="Accuracy of the move; NULL means it never misses"))
|
||||
priority = Column(SmallInteger, nullable=False,
|
||||
info=dict(description="The move's priority bracket"))
|
||||
target_id = Column(Integer, ForeignKey('move_targets.id'), nullable=False,
|
||||
info=dict(description="ID of the target (range) of the move"))
|
||||
damage_class_id = Column(Integer, ForeignKey('move_damage_classes.id'), nullable=False,
|
||||
info=dict(description="ID of the damage class (physical/special) of the move"))
|
||||
effect_id = Column(Integer, ForeignKey('move_effects.id'), nullable=False,
|
||||
info=dict(description="ID of the move's effect"))
|
||||
effect_chance = Column(Integer, nullable=True,
|
||||
info=dict(description="The chance for a secondary effect. What this is a chance of is specified by the move's effect."))
|
||||
contest_type_id = Column(Integer, ForeignKey('contest_types.id'), nullable=True,
|
||||
info=dict(description="ID of the move's Contest type (e.g. cool or smart)"))
|
||||
contest_effect_id = Column(Integer, ForeignKey('contest_effects.id'), nullable=True,
|
||||
info=dict(description="ID of the move's Contest effect"))
|
||||
super_contest_effect_id = Column(Integer, ForeignKey('super_contest_effects.id'), nullable=True,
|
||||
info=dict(description="ID of the move's Super Contest effect"))
|
||||
|
||||
create_translation_table('move_names', Move, 'names',
|
||||
relation_lazy='joined',
|
||||
name = Column(Unicode(24), nullable=False, index=True,
|
||||
info=dict(description="The name", format='plaintext', official=True))
|
||||
)
|
||||
|
||||
class MoveBattleStyle(TableBase):
|
||||
u"""A battle style of a move""" # XXX: Explain better
|
||||
__tablename__ = 'move_battle_styles'
|
||||
|
@ -698,33 +740,26 @@ create_translation_table('move_battle_style_prose', MoveBattleStyle, 'prose',
|
|||
info=dict(description="The name", format='plaintext', official=False)),
|
||||
)
|
||||
|
||||
class MoveEffectCategory(TableBase):
|
||||
u"""Category of a move effect
|
||||
"""
|
||||
__tablename__ = 'move_effect_categories'
|
||||
__singlename__ = 'move_effect_category'
|
||||
id = Column(Integer, primary_key=True, nullable=False,
|
||||
info=dict(description="A numeric ID"))
|
||||
identifier = Column(Unicode(64), nullable=False,
|
||||
info=dict(description="An identifier", format='identifier'))
|
||||
can_affect_user = Column(Boolean, nullable=False,
|
||||
info=dict(description="Set if the user can be affected"))
|
||||
|
||||
create_translation_table('move_effect_category_prose', MoveEffectCategory, 'prose',
|
||||
name = Column(Unicode(64), nullable=False, index=True,
|
||||
info=dict(description="The name", format='plaintext', official=False)),
|
||||
)
|
||||
|
||||
class MoveEffectCategoryMap(TableBase):
|
||||
u"""Maps a move effect category to a move effect
|
||||
"""
|
||||
__tablename__ = 'move_effect_category_map'
|
||||
move_effect_id = Column(Integer, ForeignKey('move_effects.id'), primary_key=True, nullable=False,
|
||||
info=dict(description="ID of the move effect"))
|
||||
move_effect_category_id = Column(Integer, ForeignKey('move_effect_categories.id'), primary_key=True, nullable=False,
|
||||
info=dict(description="ID of the category"))
|
||||
affects_user = Column(Boolean, primary_key=True, nullable=False,
|
||||
info=dict(description="Set if the user is affected"))
|
||||
class MoveChangelog(TableBase):
|
||||
"""History of changes to moves across main game versions."""
|
||||
__tablename__ = 'move_changelog'
|
||||
__singlename__ = 'move_changelog'
|
||||
move_id = Column(Integer, ForeignKey('moves.id'), primary_key=True, nullable=False,
|
||||
info=dict(description="ID of the move that changed"))
|
||||
changed_in_version_group_id = Column(Integer, ForeignKey('version_groups.id'), primary_key=True, nullable=False,
|
||||
info=dict(description="ID of the version group in which the move changed"))
|
||||
type_id = Column(Integer, ForeignKey('types.id'), nullable=True,
|
||||
info=dict(description="Prior type of the move, or NULL if unchanged"))
|
||||
power = Column(SmallInteger, nullable=True,
|
||||
info=dict(description="Prior base power of the move, or NULL if unchanged"))
|
||||
pp = Column(SmallInteger, nullable=True,
|
||||
info=dict(description="Prior base PP of the move, or NULL if unchanged"))
|
||||
accuracy = Column(SmallInteger, nullable=True,
|
||||
info=dict(description="Prior accuracy of the move, or NULL if unchanged"))
|
||||
effect_id = Column(Integer, ForeignKey('move_effects.id'), nullable=True,
|
||||
info=dict(description="Prior ID of the effect, or NULL if unchanged"))
|
||||
effect_chance = Column(Integer, nullable=True,
|
||||
info=dict(description="Prior effect chance, or NULL if unchanged"))
|
||||
|
||||
class MoveDamageClass(TableBase):
|
||||
u"""Any of the damage classes moves can have, i.e. physical, special, or non-damaging.
|
||||
|
@ -759,6 +794,34 @@ create_translation_table('move_effect_prose', MoveEffect, 'prose',
|
|||
info=dict(description="A detailed description of the effect", format='plaintext')),
|
||||
)
|
||||
|
||||
class MoveEffectCategory(TableBase):
|
||||
u"""Category of a move effect
|
||||
"""
|
||||
__tablename__ = 'move_effect_categories'
|
||||
__singlename__ = 'move_effect_category'
|
||||
id = Column(Integer, primary_key=True, nullable=False,
|
||||
info=dict(description="A numeric ID"))
|
||||
identifier = Column(Unicode(64), nullable=False,
|
||||
info=dict(description="An identifier", format='identifier'))
|
||||
can_affect_user = Column(Boolean, nullable=False,
|
||||
info=dict(description="Set if the user can be affected"))
|
||||
|
||||
create_translation_table('move_effect_category_prose', MoveEffectCategory, 'prose',
|
||||
name = Column(Unicode(64), nullable=False, index=True,
|
||||
info=dict(description="The name", format='plaintext', official=False)),
|
||||
)
|
||||
|
||||
class MoveEffectCategoryMap(TableBase):
|
||||
u"""Maps a move effect category to a move effect
|
||||
"""
|
||||
__tablename__ = 'move_effect_category_map'
|
||||
move_effect_id = Column(Integer, ForeignKey('move_effects.id'), primary_key=True, nullable=False,
|
||||
info=dict(description="ID of the move effect"))
|
||||
move_effect_category_id = Column(Integer, ForeignKey('move_effect_categories.id'), primary_key=True, nullable=False,
|
||||
info=dict(description="ID of the category"))
|
||||
affects_user = Column(Boolean, primary_key=True, nullable=False,
|
||||
info=dict(description="Set if the user is affected"))
|
||||
|
||||
class MoveEffectChangelog(TableBase):
|
||||
"""History of changes to move effects across main game versions."""
|
||||
__tablename__ = 'move_effect_changelog'
|
||||
|
@ -910,70 +973,6 @@ create_translation_table('move_target_prose', MoveTarget, 'prose',
|
|||
info=dict(description="A description", format='plaintext')),
|
||||
)
|
||||
|
||||
class Move(TableBase):
|
||||
u"""A Move: technique or attack a Pokémon can learn to use
|
||||
"""
|
||||
__tablename__ = 'moves'
|
||||
__singlename__ = 'move'
|
||||
id = Column(Integer, primary_key=True, nullable=False,
|
||||
info=dict(description="A numeric ID"))
|
||||
identifier = Column(Unicode(24), nullable=False,
|
||||
info=dict(description="An identifier", format='identifier'))
|
||||
generation_id = Column(Integer, ForeignKey('generations.id'), nullable=False,
|
||||
info=dict(description="ID of the generation this move first appeared in"))
|
||||
type_id = Column(Integer, ForeignKey('types.id'), nullable=False,
|
||||
info=dict(description="ID of the move's elemental type"))
|
||||
power = Column(SmallInteger, nullable=False,
|
||||
info=dict(description="Base power of the move"))
|
||||
pp = Column(SmallInteger, nullable=True,
|
||||
info=dict(description="Base PP (Power Points) of the move, nullable if not applicable (e.g. Struggle and Shadow moves)."))
|
||||
accuracy = Column(SmallInteger, nullable=True,
|
||||
info=dict(description="Accuracy of the move; NULL means it never misses"))
|
||||
priority = Column(SmallInteger, nullable=False,
|
||||
info=dict(description="The move's priority bracket"))
|
||||
target_id = Column(Integer, ForeignKey('move_targets.id'), nullable=False,
|
||||
info=dict(description="ID of the target (range) of the move"))
|
||||
damage_class_id = Column(Integer, ForeignKey('move_damage_classes.id'), nullable=False,
|
||||
info=dict(description="ID of the damage class (physical/special) of the move"))
|
||||
effect_id = Column(Integer, ForeignKey('move_effects.id'), nullable=False,
|
||||
info=dict(description="ID of the move's effect"))
|
||||
effect_chance = Column(Integer, nullable=True,
|
||||
info=dict(description="The chance for a secondary effect. What this is a chance of is specified by the move's effect."))
|
||||
contest_type_id = Column(Integer, ForeignKey('contest_types.id'), nullable=True,
|
||||
info=dict(description="ID of the move's Contest type (e.g. cool or smart)"))
|
||||
contest_effect_id = Column(Integer, ForeignKey('contest_effects.id'), nullable=True,
|
||||
info=dict(description="ID of the move's Contest effect"))
|
||||
super_contest_effect_id = Column(Integer, ForeignKey('super_contest_effects.id'), nullable=True,
|
||||
info=dict(description="ID of the move's Super Contest effect"))
|
||||
|
||||
create_translation_table('move_names', Move, 'names',
|
||||
relation_lazy='joined',
|
||||
name = Column(Unicode(24), nullable=False, index=True,
|
||||
info=dict(description="The name", format='plaintext', official=True))
|
||||
)
|
||||
|
||||
|
||||
class MoveChangelog(TableBase):
|
||||
"""History of changes to moves across main game versions."""
|
||||
__tablename__ = 'move_changelog'
|
||||
__singlename__ = 'move_changelog'
|
||||
move_id = Column(Integer, ForeignKey('moves.id'), primary_key=True, nullable=False,
|
||||
info=dict(description="ID of the move that changed"))
|
||||
changed_in_version_group_id = Column(Integer, ForeignKey('version_groups.id'), primary_key=True, nullable=False,
|
||||
info=dict(description="ID of the version group in which the move changed"))
|
||||
type_id = Column(Integer, ForeignKey('types.id'), nullable=True,
|
||||
info=dict(description="Prior type of the move, or NULL if unchanged"))
|
||||
power = Column(SmallInteger, nullable=True,
|
||||
info=dict(description="Prior base power of the move, or NULL if unchanged"))
|
||||
pp = Column(SmallInteger, nullable=True,
|
||||
info=dict(description="Prior base PP of the move, or NULL if unchanged"))
|
||||
accuracy = Column(SmallInteger, nullable=True,
|
||||
info=dict(description="Prior accuracy of the move, or NULL if unchanged"))
|
||||
effect_id = Column(Integer, ForeignKey('move_effects.id'), nullable=True,
|
||||
info=dict(description="Prior ID of the effect, or NULL if unchanged"))
|
||||
effect_chance = Column(Integer, nullable=True,
|
||||
info=dict(description="Prior effect chance, or NULL if unchanged"))
|
||||
|
||||
class Nature(TableBase):
|
||||
u"""A nature a Pokémon can have, such as Calm or Brave
|
||||
"""
|
||||
|
@ -1391,6 +1390,17 @@ class PokemonFormPokeathlonStat(TableBase):
|
|||
maximum_stat = Column(Integer, nullable=False, autoincrement=False,
|
||||
info=dict(description=u'The maximum value for this stat for this Pokémon form.'))
|
||||
|
||||
class PokemonGameIndex(TableBase):
|
||||
u"""The number of a Pokémon a game uses internally
|
||||
"""
|
||||
__tablename__ = 'pokemon_game_indices'
|
||||
pokemon_id = Column(Integer, ForeignKey('pokemon.id'), primary_key=True, autoincrement=False, nullable=False,
|
||||
info=dict(description=u"Database ID of the Pokémon"))
|
||||
generation_id = Column(Integer, ForeignKey('generations.id'), primary_key=True, autoincrement=False, nullable=False,
|
||||
info=dict(description=u"Database ID of the generation"))
|
||||
game_index = Column(Integer, nullable=False,
|
||||
info=dict(description=u"Internal ID the generation's games use for the Pokémon"))
|
||||
|
||||
class PokemonHabitat(TableBase):
|
||||
u"""The habitat of a Pokémon, as given in the FireRed/LeafGreen version Pokédex
|
||||
"""
|
||||
|
@ -1407,17 +1417,6 @@ create_translation_table('pokemon_habitat_names', PokemonHabitat, 'names',
|
|||
info=dict(description="The name", format='plaintext', official=True)),
|
||||
)
|
||||
|
||||
class PokemonGameIndex(TableBase):
|
||||
u"""The number of a Pokémon a game uses internally
|
||||
"""
|
||||
__tablename__ = 'pokemon_game_indices'
|
||||
pokemon_id = Column(Integer, ForeignKey('pokemon.id'), primary_key=True, autoincrement=False, nullable=False,
|
||||
info=dict(description=u"Database ID of the Pokémon"))
|
||||
generation_id = Column(Integer, ForeignKey('generations.id'), primary_key=True, autoincrement=False, nullable=False,
|
||||
info=dict(description=u"Database ID of the generation"))
|
||||
game_index = Column(Integer, nullable=False,
|
||||
info=dict(description=u"Internal ID the generation's games use for the Pokémon"))
|
||||
|
||||
class PokemonItem(TableBase):
|
||||
u"""Record of an item a Pokémon can hold in the wild
|
||||
"""
|
||||
|
@ -1471,7 +1470,6 @@ create_translation_table('pokemon_move_method_prose', PokemonMoveMethod, 'prose'
|
|||
info=dict(description=u"A detailed description of how the method works", format='plaintext')),
|
||||
)
|
||||
|
||||
|
||||
class PokemonShape(TableBase):
|
||||
u"""The shape of a Pokémon's body, as used in generation IV Pokédexes.
|
||||
"""
|
||||
|
@ -1593,19 +1591,6 @@ create_translation_table('super_contest_effect_prose', SuperContestEffect, 'pros
|
|||
info=dict(description=u"A description of the effect.", format='plaintext', official=True)),
|
||||
)
|
||||
|
||||
|
||||
class TypeEfficacy(TableBase):
|
||||
u"""The damage multiplier used when a move of a particular type damages a
|
||||
Pokémon of a particular other type.
|
||||
"""
|
||||
__tablename__ = 'type_efficacy'
|
||||
damage_type_id = Column(Integer, ForeignKey('types.id'), primary_key=True, nullable=False, autoincrement=False,
|
||||
info=dict(description=u"The ID of the damaging type."))
|
||||
target_type_id = Column(Integer, ForeignKey('types.id'), primary_key=True, nullable=False, autoincrement=False,
|
||||
info=dict(description=u"The ID of the defending Pokémon's type."))
|
||||
damage_factor = Column(Integer, nullable=False,
|
||||
info=dict(description=u"The multiplier, as a percentage of damage inflicted."))
|
||||
|
||||
class Type(TableBase):
|
||||
u"""Any of the elemental types Pokémon and moves can have."""
|
||||
__tablename__ = 'types'
|
||||
|
@ -1625,6 +1610,35 @@ create_translation_table('type_names', Type, 'names',
|
|||
info=dict(description="The name", format='plaintext', official=True)),
|
||||
)
|
||||
|
||||
class TypeEfficacy(TableBase):
|
||||
u"""The damage multiplier used when a move of a particular type damages a
|
||||
Pokémon of a particular other type.
|
||||
"""
|
||||
__tablename__ = 'type_efficacy'
|
||||
damage_type_id = Column(Integer, ForeignKey('types.id'), primary_key=True, nullable=False, autoincrement=False,
|
||||
info=dict(description=u"The ID of the damaging type."))
|
||||
target_type_id = Column(Integer, ForeignKey('types.id'), primary_key=True, nullable=False, autoincrement=False,
|
||||
info=dict(description=u"The ID of the defending Pokémon's type."))
|
||||
damage_factor = Column(Integer, nullable=False,
|
||||
info=dict(description=u"The multiplier, as a percentage of damage inflicted."))
|
||||
|
||||
class Version(TableBase):
|
||||
u"""An individual main-series Pokémon game."""
|
||||
__tablename__ = 'versions'
|
||||
__singlename__ = 'version'
|
||||
id = Column(Integer, primary_key=True, nullable=False,
|
||||
info=dict(description=u"A unique ID for this version."))
|
||||
version_group_id = Column(Integer, ForeignKey('version_groups.id'), nullable=False,
|
||||
info=dict(description=u"The ID of the version group this game belongs to."))
|
||||
identifier = Column(Unicode(32), nullable=False,
|
||||
info=dict(description=u'And identifier', format='identifier'))
|
||||
|
||||
create_translation_table('version_names', Version, 'names',
|
||||
relation_lazy='joined',
|
||||
name = Column(Unicode(32), nullable=False, index=True,
|
||||
info=dict(description="The name", format='plaintext', official=True)),
|
||||
)
|
||||
|
||||
class VersionGroup(TableBase):
|
||||
u"""A group of versions, containing either two paired versions (such as Red
|
||||
and Blue) or a single game (such as Yellow.)
|
||||
|
@ -1645,24 +1659,6 @@ class VersionGroupRegion(TableBase):
|
|||
region_id = Column(Integer, ForeignKey('regions.id'), primary_key=True, nullable=False,
|
||||
info=dict(description=u"The ID of the region."))
|
||||
|
||||
class Version(TableBase):
|
||||
u"""An individual main-series Pokémon game."""
|
||||
__tablename__ = 'versions'
|
||||
__singlename__ = 'version'
|
||||
id = Column(Integer, primary_key=True, nullable=False,
|
||||
info=dict(description=u"A unique ID for this version."))
|
||||
version_group_id = Column(Integer, ForeignKey('version_groups.id'), nullable=False,
|
||||
info=dict(description=u"The ID of the version group this game belongs to."))
|
||||
identifier = Column(Unicode(32), nullable=False,
|
||||
info=dict(description=u'And identifier', format='identifier'))
|
||||
|
||||
create_translation_table('version_names', Version, 'names',
|
||||
relation_lazy='joined',
|
||||
name = Column(Unicode(32), nullable=False, index=True,
|
||||
info=dict(description="The name", format='plaintext', official=True)),
|
||||
)
|
||||
|
||||
|
||||
### Relations down here, to avoid ordering problems
|
||||
Ability.changelog = relation(AbilityChangelog,
|
||||
order_by=AbilityChangelog.changed_in_version_group_id.desc(),
|
||||
|
|
|
@ -26,6 +26,16 @@ def test_variable_names():
|
|||
for table in tables.mapped_classes:
|
||||
assert getattr(tables, table.__name__) is table
|
||||
|
||||
def test_class_order():
|
||||
"""The declarative classes should be defined in alphabetical order.
|
||||
Except for Language which should be first.
|
||||
"""
|
||||
class_names = [table.__name__ for table in tables.mapped_classes]
|
||||
def key(name):
|
||||
return name != 'Language', name
|
||||
print [(a,b) for (a,b) in zip(class_names, sorted(class_names, key=key)) if a!=b]
|
||||
assert class_names == sorted(class_names, key=key)
|
||||
|
||||
def test_i18n_table_creation():
|
||||
"""Creates and manipulates a magical i18n table, completely independent of
|
||||
the existing schema and data. Makes sure that the expected behavior of the
|
||||
|
|
Loading…
Reference in a new issue