Reorder the classes in tables.py alphabetically. Also, test the order.

This commit is contained in:
Petr Viktorin 2011-03-30 00:15:28 +03:00 committed by Eevee
parent 3bfb7f0bb9
commit 7b93c11f7e
2 changed files with 156 additions and 150 deletions

View file

@ -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, 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")) 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): class EncounterSlot(TableBase):
u"""An abstract "slot" within a terrain, associated with both some set of conditions and a rarity. 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, rarity = Column(Integer, nullable=False,
info=dict(description="The chance of the encounter as a percentage")) 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): class EvolutionChain(TableBase):
u"""A family of Pokémon that are linked by evolution u"""A family of Pokémon that are linked by evolution
""" """
@ -683,6 +683,48 @@ class Machine(TableBase):
""" """
return self.machine_number >= 100 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): class MoveBattleStyle(TableBase):
u"""A battle style of a move""" # XXX: Explain better u"""A battle style of a move""" # XXX: Explain better
__tablename__ = 'move_battle_styles' __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)), info=dict(description="The name", format='plaintext', official=False)),
) )
class MoveEffectCategory(TableBase): class MoveChangelog(TableBase):
u"""Category of a move effect """History of changes to moves across main game versions."""
""" __tablename__ = 'move_changelog'
__tablename__ = 'move_effect_categories' __singlename__ = 'move_changelog'
__singlename__ = 'move_effect_category' move_id = Column(Integer, ForeignKey('moves.id'), primary_key=True, nullable=False,
id = Column(Integer, primary_key=True, nullable=False, info=dict(description="ID of the move that changed"))
info=dict(description="A numeric ID")) changed_in_version_group_id = Column(Integer, ForeignKey('version_groups.id'), primary_key=True, nullable=False,
identifier = Column(Unicode(64), nullable=False, info=dict(description="ID of the version group in which the move changed"))
info=dict(description="An identifier", format='identifier')) type_id = Column(Integer, ForeignKey('types.id'), nullable=True,
can_affect_user = Column(Boolean, nullable=False, info=dict(description="Prior type of the move, or NULL if unchanged"))
info=dict(description="Set if the user can be affected")) power = Column(SmallInteger, nullable=True,
info=dict(description="Prior base power of the move, or NULL if unchanged"))
create_translation_table('move_effect_category_prose', MoveEffectCategory, 'prose', pp = Column(SmallInteger, nullable=True,
name = Column(Unicode(64), nullable=False, index=True, info=dict(description="Prior base PP of the move, or NULL if unchanged"))
info=dict(description="The name", format='plaintext', official=False)), 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,
class MoveEffectCategoryMap(TableBase): info=dict(description="Prior ID of the effect, or NULL if unchanged"))
u"""Maps a move effect category to a move effect effect_chance = Column(Integer, nullable=True,
""" info=dict(description="Prior effect chance, or NULL if unchanged"))
__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 MoveDamageClass(TableBase): class MoveDamageClass(TableBase):
u"""Any of the damage classes moves can have, i.e. physical, special, or non-damaging. 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')), 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): class MoveEffectChangelog(TableBase):
"""History of changes to move effects across main game versions.""" """History of changes to move effects across main game versions."""
__tablename__ = 'move_effect_changelog' __tablename__ = 'move_effect_changelog'
@ -910,70 +973,6 @@ create_translation_table('move_target_prose', MoveTarget, 'prose',
info=dict(description="A description", format='plaintext')), 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): class Nature(TableBase):
u"""A nature a Pokémon can have, such as Calm or Brave 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, maximum_stat = Column(Integer, nullable=False, autoincrement=False,
info=dict(description=u'The maximum value for this stat for this Pokémon form.')) 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): class PokemonHabitat(TableBase):
u"""The habitat of a Pokémon, as given in the FireRed/LeafGreen version Pokédex 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)), 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): class PokemonItem(TableBase):
u"""Record of an item a Pokémon can hold in the wild 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')), info=dict(description=u"A detailed description of how the method works", format='plaintext')),
) )
class PokemonShape(TableBase): class PokemonShape(TableBase):
u"""The shape of a Pokémon's body, as used in generation IV Pokédexes. 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)), 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): class Type(TableBase):
u"""Any of the elemental types Pokémon and moves can have.""" u"""Any of the elemental types Pokémon and moves can have."""
__tablename__ = 'types' __tablename__ = 'types'
@ -1625,6 +1610,35 @@ create_translation_table('type_names', Type, 'names',
info=dict(description="The name", format='plaintext', official=True)), 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): class VersionGroup(TableBase):
u"""A group of versions, containing either two paired versions (such as Red u"""A group of versions, containing either two paired versions (such as Red
and Blue) or a single game (such as Yellow.) 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, region_id = Column(Integer, ForeignKey('regions.id'), primary_key=True, nullable=False,
info=dict(description=u"The ID of the region.")) 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 ### Relations down here, to avoid ordering problems
Ability.changelog = relation(AbilityChangelog, Ability.changelog = relation(AbilityChangelog,
order_by=AbilityChangelog.changed_in_version_group_id.desc(), order_by=AbilityChangelog.changed_in_version_group_id.desc(),

View file

@ -26,6 +26,16 @@ def test_variable_names():
for table in tables.mapped_classes: for table in tables.mapped_classes:
assert getattr(tables, table.__name__) is table 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(): def test_i18n_table_creation():
"""Creates and manipulates a magical i18n table, completely independent of """Creates and manipulates a magical i18n table, completely independent of
the existing schema and data. Makes sure that the expected behavior of the the existing schema and data. Makes sure that the expected behavior of the