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,
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(),

View file

@ -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