2009-05-17 10:01:17 +00:00
# encoding: utf8
2010-10-03 15:21:50 +00:00
u """ The Pokédex schema
Columns have a info dictionary with these keys :
- description : The description of the column
- official : True if the values appear in games or official material ; False if
they are fan - created or fan - written . This flag is currently only set for
official text columns .
- markup : The format of a text column . Can be one of :
- plaintext : Normal Unicode text ( widely used in names )
- markdown : Veekun ' s Markdown flavor (generally used in effect descriptions)
- gametext : Transcription of in - game text that strives to be both
human - readable and represent the original text exactly .
- identifier : A fan - made identifier in the [ - _a - z0 - 9 ] * format . Not intended
for translation .
- latex : A formula in LaTeX syntax .
- foreign : If set , the column contains foreign ( non - English ) text .
"""
# XXX: Check if "gametext" is set correctly everywhere
# XXX: Some columns paradoxically have official=True and markup='identifier'.
# This is when one column is used as both the English name (lowercased) and
# an identifier. This should be fixed.
2010-09-11 06:29:26 +00:00
from sqlalchemy import Column , ForeignKey , MetaData , PrimaryKeyConstraint , Table
2009-02-05 08:05:42 +00:00
from sqlalchemy . ext . declarative import declarative_base
2009-08-19 06:49:49 +00:00
from sqlalchemy . ext . associationproxy import association_proxy
2010-05-12 03:20:33 +00:00
from sqlalchemy . orm import backref , eagerload_all , relation
from sqlalchemy . orm . session import Session
2009-11-28 10:14:39 +00:00
from sqlalchemy . sql import and_
2009-02-05 08:05:42 +00:00
from sqlalchemy . types import *
2010-05-31 22:13:34 +00:00
from pokedex . db import markdown
2009-09-01 04:37:29 +00:00
2009-02-05 08:05:42 +00:00
metadata = MetaData ( )
TableBase = declarative_base ( metadata = metadata )
class Ability ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ An ability a pokémon can have, such as Static or Pressure.
2010-10-03 15:21:50 +00:00
"""
2009-02-05 08:05:42 +00:00
__tablename__ = ' abilities '
2009-09-10 17:17:59 +00:00
__singlename__ = ' ability '
2010-10-03 15:21:50 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = " A numeric ID " ) )
name = Column ( Unicode ( 24 ) , nullable = False ,
info = dict ( description = " The official English name of this ability " , official = True , format = ' plaintext ' ) )
generation_id = Column ( Integer , ForeignKey ( ' generations.id ' ) , nullable = False ,
info = dict ( description = " ID of the generation this ability was introduced in " , detail = True ) )
effect = Column ( markdown . MarkdownColumn ( 5120 ) , nullable = False ,
info = dict ( description = " Detailed description of this ability ' s effect " , format = ' markdown ' ) )
short_effect = Column ( markdown . MarkdownColumn ( 255 ) , nullable = False ,
info = dict ( description = " Short summary of this ability ' s effect " , format = ' markdown ' ) )
2010-05-04 06:03:01 +00:00
2010-12-06 22:45:43 +00:00
class AbilityChangelog ( TableBase ) :
""" History of changes to abilities across main game versions. """
__tablename__ = ' ability_changelog '
ability_id = Column ( Integer , ForeignKey ( ' abilities.id ' ) , primary_key = True , nullable = False ,
info = dict ( description = " The ID of the ability that changed " ) )
changed_in_version_group_id = Column ( Integer , ForeignKey ( ' version_groups.id ' ) , primary_key = True , nullable = False ,
info = dict ( description = " The ID of the version group in which the ability changed " ) )
effect = Column ( markdown . MarkdownColumn ( 255 ) , nullable = False ,
info = dict ( description = " A description of the old behavior " , format = ' markdown ' ) )
2010-05-04 06:03:01 +00:00
class AbilityFlavorText ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ In-game flavor text of an ability
2010-10-03 15:21:50 +00:00
"""
2010-05-04 06:03:01 +00:00
__tablename__ = ' ability_flavor_text '
2010-10-03 15:21:50 +00:00
ability_id = Column ( Integer , ForeignKey ( ' abilities.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = " A numeric ID " ) )
version_group_id = Column ( Integer , ForeignKey ( ' version_groups.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = " The versions this flavor text is shown in " ) )
flavor_text = Column ( Unicode ( 64 ) , nullable = False ,
info = dict ( description = " The actual flavor text " , official = True , format = ' gametext ' ) )
2009-02-05 08:05:42 +00:00
2010-05-25 21:07:05 +00:00
class AbilityName ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ Non-English official name of an ability
2010-10-03 15:21:50 +00:00
"""
2010-05-25 21:07:05 +00:00
__tablename__ = ' ability_names '
2010-10-03 15:21:50 +00:00
ability_id = Column ( Integer , ForeignKey ( ' abilities.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = " ID of the ability " ) )
language_id = Column ( Integer , ForeignKey ( ' languages.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = " ID of the language " ) )
name = Column ( Unicode ( 16 ) , nullable = False ,
info = dict ( description = " ID of the language " , official = True , foreign = True , format = ' plaintext ' ) )
2010-05-25 21:07:05 +00:00
2010-04-26 06:23:52 +00:00
class Berry ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ A Berry, consumable item that grows on trees
2010-10-03 15:21:50 +00:00
For data common to all Items , such as the name , see the corresponding Item entry .
"""
2010-04-26 06:23:52 +00:00
__tablename__ = ' berries '
2010-10-03 15:21:50 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = " A numeric ID " ) )
item_id = Column ( Integer , ForeignKey ( ' items.id ' ) , nullable = False ,
info = dict ( description = " ID of the Item this Berry corresponds to " ) )
firmness_id = Column ( Integer , ForeignKey ( ' berry_firmness.id ' ) , nullable = False ,
info = dict ( description = " ID of this berry ' s firmness " ) )
natural_gift_power = Column ( Integer , nullable = True ,
info = dict ( description = " Power of Natural Gift when that move is used with this Berry " ) )
natural_gift_type_id = Column ( Integer , ForeignKey ( ' types.id ' ) , nullable = True ,
info = dict ( description = " ID of the Type that Natural Gift will have when used with this Berry " ) )
size = Column ( Integer , nullable = False ,
info = dict ( description = u " Size of this Berry, in millimeters " ) )
max_harvest = Column ( Integer , nullable = False ,
info = dict ( description = " Maximum number of these berries that can grow on one tree " ) )
growth_time = Column ( Integer , nullable = False ,
info = dict ( description = " Time it takes the tree to grow one stage, in hours. Multiply by four to get overall time. " ) )
soil_dryness = Column ( Integer , nullable = False ,
info = dict ( description = " The speed of soil drying the tree causes " ) ) # XXX: What's this exactly? I'm not a good farmer
smoothness = Column ( Integer , nullable = False ,
info = dict ( description = " Smoothness of this Berry, a culinary attribute. Higher is better. " ) )
2010-04-26 06:23:52 +00:00
class BerryFirmness ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ A Berry firmness, such as " hard " or " very soft " .
2010-10-03 15:21:50 +00:00
"""
2010-04-26 06:23:52 +00:00
__tablename__ = ' berry_firmness '
2010-10-03 15:21:50 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = " A numeric ID " ) )
name = Column ( Unicode ( 10 ) , nullable = False ,
info = dict ( description = " English name of the firmness level " , official = True , format = ' plaintext ' ) )
2010-04-26 06:23:52 +00:00
class BerryFlavor ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ A Berry flavor level.
2010-10-03 15:21:50 +00:00
"""
2010-04-26 06:23:52 +00:00
__tablename__ = ' berry_flavors '
2010-10-03 15:21:50 +00:00
berry_id = Column ( Integer , ForeignKey ( ' berries.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = " ID of the berry " ) )
contest_type_id = Column ( Integer , ForeignKey ( ' contest_types.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = " ID of the flavor " ) )
flavor = Column ( Integer , nullable = False ,
info = dict ( description = " Level of the flavor in the berry " ) )
2010-04-26 06:23:52 +00:00
2009-09-16 03:04:22 +00:00
class ContestCombo ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ Combo of two moves in a Contest.
2010-10-03 15:21:50 +00:00
"""
2009-09-16 03:04:22 +00:00
__tablename__ = ' contest_combos '
2010-10-03 15:21:50 +00:00
first_move_id = Column ( Integer , ForeignKey ( ' moves.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = " ID of the first move in the combo " ) )
second_move_id = Column ( Integer , ForeignKey ( ' moves.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = " ID of the second and final move in the combo " ) )
2009-09-16 03:04:22 +00:00
2009-02-05 08:05:42 +00:00
class ContestEffect ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ Effect of a move when used in a Contest.
2010-10-03 15:21:50 +00:00
"""
2009-02-05 08:05:42 +00:00
__tablename__ = ' contest_effects '
2010-10-03 15:21:50 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = " A numeric ID " ) )
appeal = Column ( SmallInteger , nullable = False ,
info = dict ( description = " The base number of hearts the user of this move gets " ) )
jam = Column ( SmallInteger , nullable = False ,
info = dict ( description = " The base number of hearts the user ' s opponent loses " ) )
flavor_text = Column ( Unicode ( 64 ) , nullable = False ,
info = dict ( description = " English in-game description of this effect " , official = True , format = ' gametext ' ) )
effect = Column ( Unicode ( 255 ) , nullable = False ,
info = dict ( description = " Detailed description of the effect " , format = ' markdown ' ) )
2009-02-05 08:05:42 +00:00
2010-04-26 06:23:52 +00:00
class ContestType ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ A Contest type, such as " cool " or " smart " . Also functions as Berry flavor and Pokéblock color.
"""
2010-04-26 06:23:52 +00:00
__tablename__ = ' contest_types '
2010-10-03 15:21:50 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = " A numeric ID " ) )
name = Column ( Unicode ( 6 ) , nullable = False ,
info = dict ( description = " The English name of the Contest type " , official = True , format = ' identifier ' ) )
flavor = Column ( Unicode ( 6 ) , nullable = False ,
info = dict ( description = " The English name of the corresponding Berry flavor " , official = True , format = ' identifier ' ) )
color = Column ( Unicode ( 6 ) , nullable = False ,
2010-10-03 19:21:39 +00:00
info = dict ( description = u " The English name of the corresponding Pokéblock color " , official = True , format = ' identifier ' ) )
2010-04-26 06:23:52 +00:00
2009-02-05 08:05:42 +00:00
class EggGroup ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ An Egg group. Usually, two Pokémon can breed if they share an Egg Group.
2010-10-03 15:21:50 +00:00
( exceptions are the Ditto and No Eggs groups )
"""
2009-02-05 08:05:42 +00:00
__tablename__ = ' egg_groups '
2010-10-03 15:21:50 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = " A numeric ID " ) )
name = Column ( Unicode ( 16 ) , nullable = False ,
2010-10-03 19:21:39 +00:00
info = dict ( description = u ' The English " official " name. One NPC in Stadium uses these names; they are pretty bad. ' , official = True , format = ' identifier ' ) )
2009-02-05 08:05:42 +00:00
2009-05-01 13:20:18 +00:00
class Encounter ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ Encounters with wild Pokémon.
2010-10-03 15:21:50 +00:00
Bear with me , here .
2009-05-17 07:18:10 +00:00
Within a given area in a given game , encounters are differentiated by the
2009-12-09 22:35:29 +00:00
" slot " they are in and the state of the game world .
2009-05-17 07:18:10 +00:00
2009-12-09 22:35:29 +00:00
What the player is doing to get an encounter , such as surfing or walking
through tall grass , is called terrain . Each terrain has its own set of
encounter slots .
2009-05-17 07:18:10 +00:00
2009-12-09 22:35:29 +00:00
Within a terrain , slots are defined primarily by rarity . Each slot can
also be affected by world conditions ; for example , the 20 % slot for walking
in tall grass is affected by whether a swarm is in effect in that area .
" Is there a swarm? " is a condition ; " there is a swarm " and " there is not a
swarm " are the possible values of this condition.
2009-05-17 07:18:10 +00:00
2009-12-09 22:35:29 +00:00
A slot ( 20 % walking in grass ) and any appropriate world conditions ( no
2009-05-17 07:18:10 +00:00
swarm ) are thus enough to define a specific encounter .
2010-03-25 15:39:48 +00:00
2009-05-17 07:18:10 +00:00
Well , okay , almost : each slot actually appears twice .
"""
2009-05-01 13:20:18 +00:00
__tablename__ = ' encounters '
2010-10-03 15:21:50 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = " A numeric ID " ) )
version_id = Column ( Integer , ForeignKey ( ' versions.id ' ) , nullable = False , autoincrement = False ,
info = dict ( description = " The ID of the Version this applies to " ) )
location_area_id = Column ( Integer , ForeignKey ( ' location_areas.id ' ) , nullable = False , autoincrement = False ,
info = dict ( description = " The ID of the Location of this encounter " ) )
encounter_slot_id = Column ( Integer , ForeignKey ( ' encounter_slots.id ' ) , nullable = False , autoincrement = False ,
info = dict ( description = " The ID of the encounter slot, which determines terrain and rarity " ) )
pokemon_id = Column ( Integer , ForeignKey ( ' pokemon.id ' ) , nullable = False , autoincrement = False ,
info = dict ( description = u " The ID of the encountered Pokémon " ) )
min_level = Column ( Integer , nullable = False , autoincrement = False ,
info = dict ( description = u " The minimum level of the encountered Pokémon " ) )
max_level = Column ( Integer , nullable = False , autoincrement = False ,
info = dict ( description = u " The maxmum level of the encountered Pokémon " ) )
2009-05-01 13:20:18 +00:00
class EncounterCondition ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ A conditions in the game world that affects pokémon encounters, such as time of day.
2009-05-17 07:18:10 +00:00
"""
2009-05-01 13:20:18 +00:00
__tablename__ = ' encounter_conditions '
2010-10-03 15:21:50 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = " A numeric ID " ) )
name = Column ( Unicode ( 64 ) , nullable = False ,
info = dict ( description = " An English name of the condition " , format = ' plaintext ' ) )
2009-05-01 13:20:18 +00:00
2009-12-09 22:35:29 +00:00
class EncounterConditionValue ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ A possible state for a condition; for example, the state of ' swarm ' could be ' swarm ' or ' no swarm ' .
2009-05-17 07:18:10 +00:00
"""
2009-12-09 22:35:29 +00:00
__tablename__ = ' encounter_condition_values '
2010-10-03 15:21:50 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = " A numeric ID " ) )
encounter_condition_id = Column ( Integer , ForeignKey ( ' encounter_conditions.id ' ) , primary_key = False , nullable = False , autoincrement = False ,
info = dict ( description = " The ID of the encounter condition this is a value of " ) )
name = Column ( Unicode ( 64 ) , nullable = False ,
info = dict ( description = " An english name of this value " , format = ' plaintext ' ) )
is_default = Column ( Boolean , nullable = False ,
info = dict ( description = ' Set if this value is " default " or " normal " in some sense ' ) )
2009-05-01 13:20:18 +00:00
2009-12-09 22:35:29 +00:00
class EncounterConditionValueMap ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ Maps encounters to the specific conditions under which they occur.
"""
2009-12-09 22:35:29 +00:00
__tablename__ = ' encounter_condition_value_map '
2010-10-03 15:21:50 +00:00
encounter_id = Column ( Integer , ForeignKey ( ' encounters.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = " ID of the encounter " ) )
encounter_condition_value_id = Column ( Integer , ForeignKey ( ' encounter_condition_values.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = " ID of the encounter condition value " ) )
2009-12-09 22:35:29 +00:00
class EncounterTerrain ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ A way the player can enter a wild encounter, e.g., surfing, fishing, or walking through tall grass.
2009-05-17 07:18:10 +00:00
"""
2009-12-09 22:35:29 +00:00
__tablename__ = ' encounter_terrain '
2010-10-03 15:21:50 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = " A numeric ID " ) )
name = Column ( Unicode ( 64 ) , nullable = False ,
info = dict ( description = " An english name of this terrain " , format = ' plaintext ' ) )
2009-05-01 13:20:18 +00:00
2009-12-09 22:35:29 +00:00
class EncounterSlot ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ An abstract " slot " within a terrain, associated with both some set of conditions and a rarity.
2009-05-17 07:18:10 +00:00
Note that there are two encounters per slot , so the rarities will only add
up to 50.
"""
2009-12-09 22:35:29 +00:00
__tablename__ = ' encounter_slots '
2010-10-03 15:21:50 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = " A numeric ID " ) )
version_group_id = Column ( Integer , ForeignKey ( ' version_groups.id ' ) , nullable = False , autoincrement = False ,
info = dict ( description = " The ID of the Version group this slot is in " ) )
encounter_terrain_id = Column ( Integer , ForeignKey ( ' encounter_terrain.id ' ) , primary_key = False , nullable = False , autoincrement = False ,
info = dict ( description = " The ID of the terrain " ) )
2010-10-03 19:21:39 +00:00
slot = Column ( Integer , nullable = True ,
info = dict ( description = " The slot " ) ) # XXX: What is this, exactly?
2010-10-03 15:21:50 +00:00
rarity = Column ( Integer , nullable = False ,
info = dict ( description = " The chance of the encounter, in percent " ) ) # XXX: It is in percent, right? I'm confused.
2009-05-01 13:20:18 +00:00
2009-12-09 22:35:29 +00:00
class EncounterSlotCondition ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ A condition that affects an encounter slot.
"""
2009-12-09 22:35:29 +00:00
__tablename__ = ' encounter_slot_conditions '
2010-10-03 15:21:50 +00:00
encounter_slot_id = Column ( Integer , ForeignKey ( ' encounter_slots.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = " The ID of the encounter slot " ) )
encounter_condition_id = Column ( Integer , ForeignKey ( ' encounter_conditions.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = " The ID of the encounter condition " ) )
2009-12-09 22:35:29 +00:00
2009-02-05 08:05:42 +00:00
class EvolutionChain ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ A family of pokémon that are linked by evolution
"""
2009-02-05 08:05:42 +00:00
__tablename__ = ' evolution_chains '
2010-10-03 15:21:50 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = " A numeric ID " ) )
growth_rate_id = Column ( Integer , ForeignKey ( ' growth_rates.id ' ) , nullable = False ,
info = dict ( description = " ID of the growth rate for this family " ) )
baby_trigger_item_id = Column ( Integer , ForeignKey ( ' items.id ' ) , nullable = True ,
info = dict ( description = " Item that a parent must hold while breeding to produce a baby " ) )
2009-02-05 08:05:42 +00:00
2010-05-25 04:29:04 +00:00
class EvolutionTrigger ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ An evolution type, such as " level " or " trade " .
"""
2010-05-25 04:29:04 +00:00
__tablename__ = ' evolution_triggers '
2010-10-03 15:21:50 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = " A numeric ID " ) )
identifier = Column ( Unicode ( 16 ) , nullable = False ,
info = dict ( description = " An English identifier " , format = ' identifier ' ) )
2010-05-25 04:29:04 +00:00
2010-04-26 11:27:55 +00:00
class Experience ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ EXP needed for a certain level with a certain growth rate
"""
2010-04-26 11:27:55 +00:00
__tablename__ = ' experience '
2010-10-03 15:21:50 +00:00
growth_rate_id = Column ( Integer , ForeignKey ( ' growth_rates.id ' ) , primary_key = True , nullable = False ,
info = dict ( description = " ID of the growth rate " ) )
level = Column ( Integer , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = " The level " ) )
experience = Column ( Integer , nullable = False ,
info = dict ( description = " The number of EXP points needed to get to that level " ) )
2010-04-26 11:27:55 +00:00
2009-02-05 08:05:42 +00:00
class Generation ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ A Generation of the pokémon franchise
"""
2009-02-05 08:05:42 +00:00
__tablename__ = ' generations '
2010-10-03 15:21:50 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = " A numeric ID " ) )
main_region_id = Column ( Integer , ForeignKey ( ' regions.id ' ) ,
info = dict ( description = " ID of the region this generation ' s main games take place in " ) )
canonical_pokedex_id = Column ( Integer , ForeignKey ( ' pokedexes.id ' ) ,
info = dict ( description = u " ID of the pokédex this generation ' s main games use by default " ) )
name = Column ( Unicode ( 16 ) , nullable = False ,
info = dict ( description = u ' An English name of this generation, such as " Generation IV " ' , format = ' plaintext ' ) )
2009-02-05 08:05:42 +00:00
class GrowthRate ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ Growth rate of a pokémon, i.e. the EXP → level function.
"""
2009-02-05 08:05:42 +00:00
__tablename__ = ' growth_rates '
2010-10-03 15:21:50 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = " A numeric ID " ) )
name = Column ( Unicode ( 20 ) , nullable = False ,
info = dict ( description = " A name for the " , format = ' identifier ' ) )
formula = Column ( Unicode ( 500 ) , nullable = False ,
info = dict ( description = " The formula " , format = ' latex ' ) )
2009-02-05 08:05:42 +00:00
2009-07-18 06:33:36 +00:00
class Item ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ An Item from the games, like " Poké Ball " or " Bicycle " .
"""
2009-07-18 06:33:36 +00:00
__tablename__ = ' items '
2009-09-10 17:17:59 +00:00
__singlename__ = ' item '
2010-10-03 15:21:50 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = " A numeric ID " ) )
name = Column ( Unicode ( 20 ) , nullable = False ,
info = dict ( description = " The English name of the item " , official = True , format = ' plaintext ' ) )
category_id = Column ( Integer , ForeignKey ( ' item_categories.id ' ) , nullable = False ,
info = dict ( description = " ID of a category this item belongs to " ) )
cost = Column ( Integer , nullable = False ,
info = dict ( description = u " Cost of the item when bought. Items sell for half this price. " ) )
fling_power = Column ( Integer , nullable = True ,
info = dict ( description = u " Power of the move Fling when used with this item. " ) )
fling_effect_id = Column ( Integer , ForeignKey ( ' item_fling_effects.id ' ) , nullable = True ,
info = dict ( description = u " ID of the fling-effect of the move Fling when used with this item. Note that these are different from move effects. " ) )
2010-12-13 00:35:04 +00:00
short_effect = Column ( Unicode ( 256 ) , nullable = False ,
info = dict ( description = " A short summary of the effect " , format = ' plaintext ' ) )
2010-10-03 15:21:50 +00:00
effect = Column ( markdown . MarkdownColumn ( 5120 ) , nullable = False ,
info = dict ( description = u " Detailed English description of the item ' s effect. " , format = ' markdown ' ) )
2010-05-02 23:07:45 +00:00
@property
def appears_underground ( self ) :
2010-10-03 19:21:39 +00:00
u """ True if the item appears underground, as specified by the appropriate flag
"""
2010-05-02 23:07:45 +00:00
return any ( flag . identifier == u ' underground ' for flag in self . flags )
2010-04-26 06:23:52 +00:00
class ItemCategory ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ An item category
"""
2010-10-03 15:21:50 +00:00
# XXX: This is fanon, right?
2010-04-26 06:23:52 +00:00
__tablename__ = ' item_categories '
2010-10-03 15:21:50 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = " A numeric ID " ) )
pocket_id = Column ( Integer , ForeignKey ( ' item_pockets.id ' ) , nullable = False ,
info = dict ( description = " ID of the pocket these items go to " ) )
name = Column ( Unicode ( 16 ) , nullable = False ,
info = dict ( description = " English name of the category " , format = ' plaintext ' ) )
2010-04-26 06:23:52 +00:00
2010-05-02 22:40:54 +00:00
class ItemFlag ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ An item attribute such as " consumable " or " holdable " .
"""
2010-05-02 22:40:54 +00:00
__tablename__ = ' item_flags '
2010-10-03 15:21:50 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = " A numeric ID " ) )
identifier = Column ( Unicode ( 24 ) , nullable = False ,
info = dict ( description = " Identifier of the flag " , format = ' identifier ' ) )
name = Column ( Unicode ( 64 ) , nullable = False ,
info = dict ( description = " Short English description of the flag " , format = ' plaintext ' ) )
2010-05-02 22:40:54 +00:00
class ItemFlagMap ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ Maps an item flag to its item.
"""
2010-05-02 22:40:54 +00:00
__tablename__ = ' item_flag_map '
2010-10-03 15:21:50 +00:00
item_id = Column ( Integer , ForeignKey ( ' items.id ' ) , primary_key = True , autoincrement = False , nullable = False ,
info = dict ( description = " The ID of the item " ) )
item_flag_id = Column ( Integer , ForeignKey ( ' item_flags.id ' ) , primary_key = True , autoincrement = False , nullable = False ,
info = dict ( description = " The ID of the item flag " ) )
2010-05-02 22:40:54 +00:00
2010-05-02 08:33:44 +00:00
class ItemFlavorText ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ An in-game description of an item
"""
2010-05-02 08:33:44 +00:00
__tablename__ = ' item_flavor_text '
2010-10-03 15:21:50 +00:00
item_id = Column ( Integer , ForeignKey ( ' items.id ' ) , primary_key = True , autoincrement = False , nullable = False ,
info = dict ( description = " The ID of the item " ) )
version_group_id = Column ( Integer , ForeignKey ( ' version_groups.id ' ) , primary_key = True , autoincrement = False , nullable = False ,
info = dict ( description = " ID of the version group that sports this text " ) )
flavor_text = Column ( Unicode ( 255 ) , nullable = False ,
info = dict ( description = " The flavor text itself " , official = True , format = ' gametext ' ) )
2010-05-02 08:33:44 +00:00
2010-04-26 06:23:52 +00:00
class ItemFlingEffect ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ An effect of the move Fling when used with a specific item
"""
2010-04-26 06:23:52 +00:00
__tablename__ = ' item_fling_effects '
2010-10-03 15:21:50 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = " A numeric ID " ) )
effect = Column ( Unicode ( 255 ) , nullable = False ,
info = dict ( description = " English description of the effect " , format = ' plaintext ' ) )
2010-04-26 06:23:52 +00:00
2010-05-02 08:33:44 +00:00
class ItemInternalID ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ The internal ID number a game uses for an item
"""
2010-05-02 08:33:44 +00:00
__tablename__ = ' item_internal_ids '
2010-10-03 15:21:50 +00:00
item_id = Column ( Integer , ForeignKey ( ' items.id ' ) , primary_key = True , autoincrement = False , nullable = False ,
info = dict ( description = " The database ID of the item " ) )
generation_id = Column ( Integer , ForeignKey ( ' generations.id ' ) , primary_key = True , autoincrement = False , nullable = False ,
info = dict ( description = " ID of the generation of games " ) )
internal_id = Column ( Integer , nullable = False ,
info = dict ( description = " Internal ID of the item in the generation " ) )
2010-05-02 08:33:44 +00:00
2010-06-15 03:13:42 +00:00
class ItemName ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ A non-English name of an item
"""
2010-06-15 03:13:42 +00:00
__tablename__ = ' item_names '
2010-10-03 15:21:50 +00:00
item_id = Column ( Integer , ForeignKey ( ' items.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = " The ID of the item " ) )
language_id = Column ( Integer , ForeignKey ( ' languages.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = " The ID of the language " ) )
name = Column ( Unicode ( 16 ) , nullable = False ,
info = dict ( description = " The name of the item in this language " , foreign = True , format = ' plaintext ' ) )
2010-06-15 03:13:42 +00:00
2010-04-26 06:23:52 +00:00
class ItemPocket ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ A pocket that categorizes items
"""
2010-04-26 06:23:52 +00:00
__tablename__ = ' item_pockets '
2010-10-03 15:21:50 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = " A numeric ID " ) )
identifier = Column ( Unicode ( 16 ) , nullable = False ,
info = dict ( description = " An identifier of this pocket " , format = ' identifier ' ) )
name = Column ( Unicode ( 16 ) , nullable = False ,
info = dict ( description = " A numeric ID " , format = ' plaintext ' ) )
2009-07-18 06:33:36 +00:00
2009-02-05 08:05:42 +00:00
class Language ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ A language the Pokémon games have been transleted into; except English
"""
2009-02-05 08:05:42 +00:00
__tablename__ = ' languages '
2010-10-03 15:21:50 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = " A numeric ID " ) )
iso639 = Column ( Unicode ( 2 ) , nullable = False ,
info = dict ( description = " The two-letter code of the country where this language is spoken. Note that it is not unique. " ) )
iso3166 = Column ( Unicode ( 2 ) , nullable = False ,
info = dict ( description = " The two-letter code of the language. Note that it is not unique. " ) )
name = Column ( Unicode ( 16 ) , nullable = False ,
info = dict ( description = " The English name of the language " , format = ' plaintext ' ) )
2009-02-05 08:05:42 +00:00
2009-05-01 13:20:18 +00:00
class Location ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ A place in the Pokémon world
"""
2009-05-01 13:20:18 +00:00
__tablename__ = ' locations '
2009-09-10 17:17:59 +00:00
__singlename__ = ' location '
2010-10-03 19:21:39 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = " A numeric ID " ) )
region_id = Column ( Integer , ForeignKey ( ' regions.id ' ) ,
info = dict ( description = " ID of the region this location is in " ) )
name = Column ( Unicode ( 64 ) , nullable = False ,
info = dict ( description = " English name of the location " , official = True , format = ' plaintext ' ) )
2009-05-01 13:20:18 +00:00
class LocationArea ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ A sub-area of a location
"""
2009-05-01 13:20:18 +00:00
__tablename__ = ' location_areas '
2010-10-03 19:21:39 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = " A numeric ID " ) )
location_id = Column ( Integer , ForeignKey ( ' locations.id ' ) , nullable = False ,
info = dict ( description = " ID of the location this area is part of " ) )
internal_id = Column ( Integer , nullable = False ,
info = dict ( description = " ID the games ude for this area " ) )
name = Column ( Unicode ( 64 ) , nullable = True ,
info = dict ( description = " An English name of the area, if applicable " , format = ' plaintext ' ) )
2009-05-01 13:20:18 +00:00
2009-09-15 04:18:47 +00:00
class LocationAreaEncounterRate ( TableBase ) :
2010-10-03 19:21:39 +00:00
# XXX: What's this exactly? Someone add the docstring & revise the descriptions
2009-09-15 04:18:47 +00:00
__tablename__ = ' location_area_encounter_rates '
2010-10-03 19:21:39 +00:00
location_area_id = Column ( Integer , ForeignKey ( ' location_areas.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = " ID of the area " ) )
encounter_terrain_id = Column ( Integer , ForeignKey ( ' encounter_terrain.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = " ID of the terrain " ) )
version_id = Column ( Integer , ForeignKey ( ' versions.id ' ) , primary_key = True , autoincrement = False ,
info = dict ( description = " ID of the version " ) )
rate = Column ( Integer , nullable = True ,
info = dict ( description = " The encounter rate " ) ) # units?
2009-09-15 04:18:47 +00:00
2010-07-26 03:25:59 +00:00
class LocationInternalID ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ IDs the games use internally for locations
"""
2010-07-26 03:25:59 +00:00
__tablename__ = ' location_internal_ids '
2010-10-03 19:21:39 +00:00
location_id = Column ( Integer , ForeignKey ( ' locations.id ' ) , nullable = False , primary_key = True ,
info = dict ( description = " Database ID of the locaion " ) )
generation_id = Column ( Integer , ForeignKey ( ' generations.id ' ) , nullable = False , primary_key = True ,
info = dict ( description = " ID of the generation this entry to " ) )
internal_id = Column ( Integer , nullable = False ,
info = dict ( description = " Internal game ID of the location " ) )
2010-07-26 03:25:59 +00:00
2009-08-10 06:07:23 +00:00
class Machine ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ A TM or HM; numbered item that can teach a move to a pokémon
"""
2009-08-10 06:07:23 +00:00
__tablename__ = ' machines '
2010-10-03 19:21:39 +00:00
machine_number = Column ( Integer , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = " Number of the machine for TMs, or 100 + the munber for HMs " ) )
version_group_id = Column ( Integer , ForeignKey ( ' version_groups.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = " Versions this entry applies to " ) )
item_id = Column ( Integer , ForeignKey ( ' items.id ' ) , nullable = False ,
info = dict ( description = " ID of the corresponding Item " ) )
move_id = Column ( Integer , ForeignKey ( ' moves.id ' ) , nullable = False ,
info = dict ( description = " ID of the taught move " ) )
2009-08-10 06:07:23 +00:00
2010-05-12 03:20:33 +00:00
@property
def is_hm ( self ) :
2010-10-03 19:21:39 +00:00
u """ True if this machine is a HM, False if it ' s a TM
"""
2010-05-12 03:20:33 +00:00
return self . machine_number > = 100
2010-04-27 06:26:37 +00:00
class MoveBattleStyle ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ A battle style of a move """ # XXX: Explain better
2010-04-27 06:26:37 +00:00
__tablename__ = ' move_battle_styles '
2010-10-03 19:21:39 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = " A numeric ID " ) )
name = Column ( Unicode ( 8 ) , nullable = False ,
info = dict ( description = " An English name for this battle style " , format = ' plaintext ' ) )
2010-04-27 06:26:37 +00:00
2009-11-09 01:00:45 +00:00
class MoveEffectCategory ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ Category of a move effect
"""
2009-11-09 01:00:45 +00:00
__tablename__ = ' move_effect_categories '
2010-10-03 19:21:39 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = " A numeric ID " ) )
name = Column ( Unicode ( 64 ) , nullable = False ,
info = dict ( description = " English name of the category " , format = ' plaintext ' ) )
can_affect_user = Column ( Boolean , nullable = False ,
info = dict ( description = " Set if the user can be affected " ) )
2009-11-09 01:00:45 +00:00
class MoveEffectCategoryMap ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ Maps a move effect category to a move effect
"""
2009-11-09 01:00:45 +00:00
__tablename__ = ' move_effect_category_map '
2010-10-03 19:21:39 +00:00
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 " ) )
2009-11-09 01:00:45 +00:00
2009-08-27 05:30:07 +00:00
class MoveDamageClass ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ Damage class of a move, i.e. " Physical " , " Special, or " None " .
"""
2009-08-27 05:30:07 +00:00
__tablename__ = ' move_damage_classes '
2010-10-03 19:21:39 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = " A numeric ID " ) )
2010-12-07 17:43:58 +00:00
name = Column ( Unicode ( 16 ) , nullable = False ,
2010-10-03 19:21:39 +00:00
info = dict ( description = " An English name of the class " , format = ' plaintext ' ) )
description = Column ( Unicode ( 64 ) , nullable = False ,
info = dict ( description = " An English description of the class " , format = ' plaintext ' ) )
2009-08-27 05:30:07 +00:00
2009-02-05 08:05:42 +00:00
class MoveEffect ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ An effect of a move
"""
2009-02-05 08:05:42 +00:00
__tablename__ = ' move_effects '
2010-10-03 19:21:39 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = " A numeric ID " ) )
short_effect = Column ( Unicode ( 256 ) , nullable = False ,
info = dict ( description = " A short summary of the effect " , format = ' plaintext ' ) )
effect = Column ( Unicode ( 5120 ) , nullable = False ,
info = dict ( description = " A detailed description of the effect " , format = ' plaintext ' ) )
2009-02-05 08:05:42 +00:00
2010-12-08 01:23:14 +00:00
class MoveEffectChangelog ( TableBase ) :
""" History of changes to move effects across main game versions. """
__tablename__ = ' move_effect_changelog '
effect_id = Column ( Integer , ForeignKey ( ' move_effects.id ' ) , primary_key = True , nullable = False ,
info = dict ( description = " The ID of the effect that changed " ) )
changed_in_version_group_id = Column ( Integer , ForeignKey ( ' version_groups.id ' ) , primary_key = True , nullable = False ,
info = dict ( description = " The ID of the version group in which the effect changed " ) )
effect = Column ( markdown . MarkdownColumn ( 255 ) , nullable = False ,
info = dict ( description = " A description of the old behavior " , format = ' markdown ' ) )
2009-09-14 15:29:05 +00:00
class MoveFlag ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ Maps a move flag to a move
"""
# XXX: Other flags have a ___Flag class for the actual flag and ___FlagMap for the map,
# these, somewhat confusingly, have MoveFlagType and MoveFlag
2009-09-14 15:29:05 +00:00
__tablename__ = ' move_flags '
2010-10-03 19:21:39 +00:00
move_id = Column ( Integer , ForeignKey ( ' moves.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = " ID of the move " ) )
move_flag_type_id = Column ( Integer , ForeignKey ( ' move_flag_types.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = " ID of the flag " ) )
2009-09-14 15:29:05 +00:00
class MoveFlagType ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ A Move attribute such as " snatchable " or " contact " .
"""
2009-09-14 15:29:05 +00:00
__tablename__ = ' move_flag_types '
2010-10-03 19:21:39 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = " A numeric ID " ) )
identifier = Column ( Unicode ( 16 ) , nullable = False ,
info = dict ( description = " A short identifier for the flag " , format = ' identifier ' ) )
name = Column ( Unicode ( 32 ) , nullable = False ,
info = dict ( description = " An English name for the flag " , format = ' plaintext ' ) )
description = Column ( markdown . MarkdownColumn ( 128 ) , nullable = False ,
info = dict ( description = " A short English description of the flag " , format = ' markdown ' ) )
2009-09-14 15:29:05 +00:00
2009-09-15 05:18:01 +00:00
class MoveFlavorText ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ In-game description of a move
"""
2009-09-15 05:18:01 +00:00
__tablename__ = ' move_flavor_text '
2010-10-03 19:21:39 +00:00
move_id = Column ( Integer , ForeignKey ( ' moves.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = " ID of the move " ) )
version_group_id = Column ( Integer , ForeignKey ( ' version_groups.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = " ID of the version group this text appears in " ) )
flavor_text = Column ( Unicode ( 255 ) , nullable = False ,
info = dict ( description = " The English flavor text " , official = True , format = ' gametext ' ) )
2009-09-15 05:18:01 +00:00
2009-09-14 04:06:15 +00:00
class MoveName ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ Non-English name of a move
"""
2009-09-14 04:06:15 +00:00
__tablename__ = ' move_names '
2010-10-03 19:21:39 +00:00
move_id = Column ( Integer , ForeignKey ( ' moves.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = " ID of the move " ) )
language_id = Column ( Integer , ForeignKey ( ' languages.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = " ID of the language " ) )
name = Column ( Unicode ( 16 ) , nullable = False ,
info = dict ( description = " ID of the language " , foreign = True , format = ' plaintext ' ) )
2009-09-14 04:06:15 +00:00
2009-02-05 08:05:42 +00:00
class MoveTarget ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ Targetting or " range " of a move, e.g. " Affects all opponents " or " Affects user " .
"""
2009-02-05 08:05:42 +00:00
__tablename__ = ' move_targets '
2010-10-03 19:21:39 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = " A numeric ID " ) )
name = Column ( Unicode ( 32 ) , nullable = False ,
info = dict ( description = " An English name " , format = ' plaintext ' ) )
description = Column ( Unicode ( 128 ) , nullable = False ,
info = dict ( description = " An English description " , format = ' plaintext ' ) )
2009-02-05 08:05:42 +00:00
class Move ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ A Move: technique or attack a Pokémon can learn to use
"""
2009-02-05 08:05:42 +00:00
__tablename__ = ' moves '
2009-09-10 17:17:59 +00:00
__singlename__ = ' move '
2010-10-03 19:21:39 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = " A numeric ID " ) )
name = Column ( Unicode ( 24 ) , nullable = False ,
info = dict ( description = " The English name of the move " , official = True , format = ' plaintext ' ) )
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 = False ,
info = dict ( description = " Base PP (Power Points) of the move " ) )
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 " ) )
2010-12-08 01:38:16 +00:00
effect_chance = Column ( Integer , nullable = True ,
2010-10-03 19:21:39 +00:00
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 " ) )
2009-02-05 08:05:42 +00:00
2010-11-27 09:25:38 +00:00
class MoveChangelog ( TableBase ) :
""" History of changes to moves across main game versions. """
__tablename__ = ' 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 " ) )
2010-12-07 22:05:17 +00:00
type_id = Column ( Integer , ForeignKey ( ' types.id ' ) , nullable = True ,
info = dict ( description = " Prior type of the move, or NULL if unchanged " ) )
2010-11-27 09:25:38 +00:00
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 " ) )
2010-12-07 22:05:17 +00:00
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 " ) )
2010-11-27 09:25:38 +00:00
2010-03-23 05:29:28 +00:00
class Nature ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ A nature a pokémon can have, such as Calm or Brave
"""
2010-03-23 05:29:28 +00:00
__tablename__ = ' natures '
2010-04-19 05:43:33 +00:00
__singlename__ = ' nature '
2010-10-03 19:21:39 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = " A numeric ID " ) )
name = Column ( Unicode ( 8 ) , nullable = False ,
info = dict ( description = " An English name of the nature " , official = True , format = ' plaintext ' ) )
decreased_stat_id = Column ( Integer , ForeignKey ( ' stats.id ' ) , nullable = False ,
info = dict ( description = " ID of the stat that this nature decreases by 10 % (if decreased_stat_id is the same, the effects cancel out) " ) )
increased_stat_id = Column ( Integer , ForeignKey ( ' stats.id ' ) , nullable = False ,
info = dict ( description = " ID of the stat that this nature increases by 10 % (if decreased_stat_id is the same, the effects cancel out) " ) )
hates_flavor_id = Column ( Integer , ForeignKey ( ' contest_types.id ' ) , nullable = False ,
info = dict ( description = u " ID of the Berry flavor the Pokémon hates (if likes_flavor_id is the same, the effects cancel out) " ) )
likes_flavor_id = Column ( Integer , ForeignKey ( ' contest_types.id ' ) , nullable = False ,
info = dict ( description = u " ID of the Berry flavor the Pokémon likes (if hates_flavor_id is the same, the effects cancel out) " ) )
2010-04-27 06:26:37 +00:00
2010-09-02 04:52:44 +00:00
@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
2010-04-27 06:26:37 +00:00
class NatureBattleStylePreference ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ Battle Palace move preference
Specifies how likely a pokémon with a specific Nature is to use a move of
a particular battl style in Battle Palace or Battle Tent
"""
2010-04-27 06:26:37 +00:00
__tablename__ = ' nature_battle_style_preferences '
2010-10-03 19:21:39 +00:00
nature_id = Column ( Integer , ForeignKey ( ' natures.id ' ) , primary_key = True , nullable = False ,
info = dict ( description = u " ID of the pokémon ' s nature " ) )
move_battle_style_id = Column ( Integer , ForeignKey ( ' move_battle_styles.id ' ) , primary_key = True , nullable = False ,
info = dict ( description = " ID of the battle style " ) )
low_hp_preference = Column ( Integer , nullable = False ,
info = dict ( description = u " Chance of using the move, in percent, if HP is under ½ " ) )
high_hp_preference = Column ( Integer , nullable = False ,
info = dict ( description = u " Chance of using the move, in percent, if HP is over ½ " ) )
2010-04-27 06:26:37 +00:00
2010-06-08 00:14:37 +00:00
class NatureName ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ Non-english name of a Nature
"""
2010-06-08 00:14:37 +00:00
__tablename__ = ' nature_names '
2010-10-03 19:21:39 +00:00
nature_id = Column ( Integer , ForeignKey ( ' natures.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = " ID of the nature " ) )
language_id = Column ( Integer , ForeignKey ( ' languages.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = " ID of the language " ) )
name = Column ( Unicode ( 8 ) , nullable = False ,
info = dict ( description = " The nature ' s foreign name " , foreign = True , format = ' plaintext ' ) )
2010-06-08 00:14:37 +00:00
2010-04-27 06:26:37 +00:00
class NaturePokeathlonStat ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ Specifies how a Nature affects a Pokéathlon stat
"""
2010-04-27 06:26:37 +00:00
__tablename__ = ' nature_pokeathlon_stats '
2010-10-03 19:21:39 +00:00
nature_id = Column ( Integer , ForeignKey ( ' natures.id ' ) , primary_key = True , nullable = False ,
info = dict ( description = " ID of the nature " ) )
pokeathlon_stat_id = Column ( Integer , ForeignKey ( ' pokeathlon_stats.id ' ) , primary_key = True , nullable = False ,
info = dict ( description = " ID of the stat " ) )
max_change = Column ( Integer , nullable = False ,
info = dict ( description = " Maximum change " ) )
2010-04-27 06:26:37 +00:00
class PokeathlonStat ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ A Pokéathlon stat, such as " Stamina " or " Jump " .
"""
2010-04-27 06:26:37 +00:00
__tablename__ = ' pokeathlon_stats '
2010-10-03 19:21:39 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = " A numeric ID " ) )
name = Column ( Unicode ( 8 ) , nullable = False ,
info = dict ( description = " The English name of the stat " , official = True , format = ' plaintext ' ) )
2010-03-23 05:29:28 +00:00
2010-02-17 07:16:59 +00:00
class Pokedex ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ A collection of pokémon species ordered in a particular way
"""
2010-02-17 07:16:59 +00:00
__tablename__ = ' pokedexes '
2010-10-03 19:21:39 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = " A numeric ID " ) )
region_id = Column ( Integer , ForeignKey ( ' regions.id ' ) , nullable = True ,
info = dict ( description = u " ID of the region this pokédex is used in, or None if it ' s global " ) )
name = Column ( Unicode ( 16 ) , nullable = False ,
info = dict ( description = u " An English name of the pokédex " , format = ' plaintext ' ) )
description = Column ( Unicode ( 512 ) ,
info = dict ( description = u " A longer description of the pokédex " , format = ' plaintext ' ) )
2010-02-17 07:16:59 +00:00
2009-02-05 08:05:42 +00:00
class Pokemon ( TableBase ) :
2010-11-29 23:51:50 +00:00
u """ A species of Pokémon. The core to this whole mess.
2009-06-21 05:32:37 +00:00
"""
2009-02-05 08:05:42 +00:00
__tablename__ = ' pokemon '
2009-09-10 17:17:59 +00:00
__singlename__ = ' pokemon '
2010-10-03 19:21:39 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = u " A numeric ID " ) )
name = Column ( Unicode ( 20 ) , nullable = False ,
2010-11-29 23:51:50 +00:00
info = dict ( description = u " The English name of the Pokémon " , official = True , format = ' plaintext ' ) )
2010-10-03 19:21:39 +00:00
generation_id = Column ( Integer , ForeignKey ( ' generations.id ' ) ,
info = dict ( description = u " ID of the generation this species first appeared in " ) )
evolution_chain_id = Column ( Integer , ForeignKey ( ' evolution_chains.id ' ) ,
info = dict ( description = u " ID of the species ' evolution chain (a.k.a. family) " ) )
height = Column ( Integer , nullable = False ,
info = dict ( description = u " The height of the pokémon, in decimeters (tenths of a meter) " ) )
weight = Column ( Integer , nullable = False ,
info = dict ( description = u " The weight of the pokémon, in tenths of a kilogram (decigrams) " ) )
species = Column ( Unicode ( 16 ) , nullable = False ,
info = dict ( description = u ' The short English flavor text, such as " Seed " or " Lizard " ; usually affixed with the word " Pokémon " ' ,
official = True , format = ' plaintext ' ) )
color_id = Column ( Integer , ForeignKey ( ' pokemon_colors.id ' ) , nullable = False ,
info = dict ( description = u " ID of this pokémon ' s pokédex color, as used for a gimmick search function in the games. " ) )
pokemon_shape_id = Column ( Integer , ForeignKey ( ' pokemon_shapes.id ' ) , nullable = True ,
info = dict ( description = u " ID of this pokémon ' s body shape, as used for a gimmick search function in the games. " ) )
habitat_id = Column ( Integer , ForeignKey ( ' pokemon_habitats.id ' ) , nullable = True ,
info = dict ( description = u " ID of this pokémon ' s habitat, as used for a gimmick search function in the games. " ) )
gender_rate = Column ( Integer , nullable = False ,
info = dict ( description = u " The chance of this pokémon being female, in eighths; or -1 for genderless " ) )
capture_rate = Column ( Integer , nullable = False ,
info = dict ( description = u " The base capture rate; up to 255 " ) )
base_experience = Column ( Integer , nullable = False ,
info = dict ( description = u " The base EXP gained when defeating this pokémon " ) ) # XXX: Is this correct?
base_happiness = Column ( Integer , nullable = False ,
info = dict ( description = u " The tameness when caught by a normal ball " ) )
is_baby = Column ( Boolean , nullable = False ,
info = dict ( description = u " True iff the pokémon is a baby " ) ) # XXX: What exactly makes it a baby?
hatch_counter = Column ( Integer , nullable = False ,
info = dict ( description = u " Initial hatch counter: one must walk 255 × (hatch_counter + 1) steps before this pokémon ' s egg hatches, unless utilizing bonuses like Flame Body ' s " ) )
has_gen4_fem_sprite = Column ( Boolean , nullable = False ,
info = dict ( description = u " Set iff the species ' female front sprite is different from the male ' s in generation IV " ) )
has_gen4_fem_back_sprite = Column ( Boolean , nullable = False ,
info = dict ( description = u " Set iff the species ' female back sprite is different from the male ' s in generation IV " ) )
2010-12-09 02:20:21 +00:00
order = Column ( Integer , nullable = False , index = True ,
info = dict ( description = u " Order for sorting. Almost national order, except families and forms are grouped together. " ) )
2009-02-05 08:05:42 +00:00
2009-06-16 03:48:27 +00:00
### Stuff to handle alternate Pokémon forms
@property
2010-11-29 23:51:50 +00:00
def is_base_form ( self ) :
u """ Returns True iff the Pokémon is the base form for its species,
e . g . Land Shaymin .
2009-06-16 03:48:27 +00:00
"""
2010-11-29 23:51:50 +00:00
return self . unique_form is None or self . unique_form . is_default
2009-06-16 03:48:27 +00:00
@property
2010-11-29 23:51:50 +00:00
def form_name ( self ) :
u """ Returns the Pokémon ' s form name if it represents a particular form
and that form has a name , or None otherwise .
2010-10-03 19:21:39 +00:00
"""
2009-06-16 03:48:27 +00:00
2010-11-29 23:51:50 +00:00
# If self.unique_form is None, the short-circuit "and" will go ahead
# and return that. Otherwise, it'll return the form's name, which may
# also be None.
return self . unique_form and self . unique_form . name
@property
def full_name ( self ) :
u """ Returns the Pokémon ' s name, including its form if applicable. """
if self . form_name :
return ' {0} {1} ' . format ( self . form_name , self . name )
else :
return self . name
2009-06-16 03:48:27 +00:00
2009-06-21 05:32:37 +00:00
@property
def normal_form ( self ) :
2010-10-03 19:21:39 +00:00
u """ Returns the normal form for this Pokémon; i.e., this will return
2009-06-21 05:32:37 +00:00
regular Deoxys when called on any Deoxys form .
"""
2010-11-29 23:51:50 +00:00
if self . unique_form :
return self . unique_form . form_base_pokemon
2009-06-21 05:32:37 +00:00
return self
2010-04-16 03:05:03 +00:00
### Not forms!
def stat ( self , stat_name ) :
2010-10-03 19:21:39 +00:00
u """ Returns a PokemonStat record for the given stat name (or Stat row
2010-04-16 03:05:03 +00:00
object ) . Uses the normal has - many machinery , so all the stats are
effectively cached .
"""
if isinstance ( stat_name , Stat ) :
stat_name = stat_name . name
for pokemon_stat in self . stats :
if pokemon_stat . stat . name == stat_name :
return pokemon_stat
2010-05-27 04:58:18 +00:00
raise KeyError ( u ' No stat named %s ' % stat_name )
@property
def better_damage_class ( self ) :
u """ Returns the MoveDamageClass that this Pokémon is best suited for,
based on its attack stats .
If the attack stats are about equal ( within 5 ) , returns None . The
value None , not the damage class called ' None ' .
"""
phys = self . stat ( u ' Attack ' )
spec = self . stat ( u ' Special Attack ' )
diff = phys . base_stat - spec . base_stat
if diff > 5 :
return phys . stat . damage_class
elif diff < - 5 :
return spec . stat . damage_class
else :
return None
2010-04-16 03:05:03 +00:00
2009-02-05 08:05:42 +00:00
class PokemonAbility ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ Maps an ability to a pokémon that can have it
"""
2009-02-05 08:05:42 +00:00
__tablename__ = ' pokemon_abilities '
2010-10-03 19:21:39 +00:00
pokemon_id = Column ( Integer , ForeignKey ( ' pokemon.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = u " ID of the pokémon " ) )
ability_id = Column ( Integer , ForeignKey ( ' abilities.id ' ) , nullable = False ,
info = dict ( description = u " ID of the ability " ) )
2010-11-25 08:09:06 +00:00
# XXX having both a method and a slot is kind of gross. "slot" is a
# misnomer, anyway: duplicate abilities don't appear in slot 2.
# Probably should replace that with "order".
is_dream = Column ( Boolean , nullable = False , index = True ,
info = dict ( description = u " Whether this is a Dream World ability " ) )
2010-10-03 19:21:39 +00:00
slot = Column ( Integer , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = u " The ability slot, i.e. 1 or 2 for gen. IV " ) )
2009-02-05 08:05:42 +00:00
2010-03-03 04:27:40 +00:00
class PokemonColor ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ The " pokédex color " of a pokémon species. Usually based on the pokémon ' s color.
"""
2010-03-03 04:27:40 +00:00
__tablename__ = ' pokemon_colors '
2010-10-03 19:21:39 +00:00
id = Column ( Integer , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = u " ID of the pokémon " ) )
name = Column ( Unicode ( 6 ) , nullable = False ,
info = dict ( description = u " The English name of the color " , official = True , format = ' identifier ' ) )
2010-03-03 04:27:40 +00:00
2009-02-05 08:05:42 +00:00
class PokemonDexNumber ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ The number of a Pokémon in a particular Pokédex (e.g. Jigglypuff is #138 in Hoenn ' s ' dex)
"""
2009-02-05 08:05:42 +00:00
__tablename__ = ' pokemon_dex_numbers '
2010-10-03 19:21:39 +00:00
pokemon_id = Column ( Integer , ForeignKey ( ' pokemon.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = u " ID of the pokémon " ) )
pokedex_id = Column ( Integer , ForeignKey ( ' pokedexes.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = u " ID of the pokédex " ) )
pokedex_number = Column ( Integer , nullable = False ,
info = dict ( description = u " Number of the pokémon in that the pokédex " ) )
2009-02-05 08:05:42 +00:00
class PokemonEggGroup ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ Maps an Egg group to a pokémon; each pokémon belongs to one or two egg groups
"""
2009-02-05 08:05:42 +00:00
__tablename__ = ' pokemon_egg_groups '
2010-10-03 19:21:39 +00:00
pokemon_id = Column ( Integer , ForeignKey ( ' pokemon.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = u " ID of the pokémon " ) )
egg_group_id = Column ( Integer , ForeignKey ( ' egg_groups.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = u " ID of the egg group " ) )
2009-02-05 08:05:42 +00:00
2010-05-25 04:29:04 +00:00
class PokemonEvolution ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ Specifies what causes a particular pokémon to evolve into another species.
"""
2010-05-25 04:29:04 +00:00
__tablename__ = ' pokemon_evolution '
2010-10-03 19:21:39 +00:00
from_pokemon_id = Column ( Integer , ForeignKey ( ' pokemon.id ' ) , nullable = False ,
info = dict ( description = u " ID of the pre-evolution species " ) )
to_pokemon_id = Column ( Integer , ForeignKey ( ' pokemon.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = u " ID of the post-evolution species " ) )
evolution_trigger_id = Column ( Integer , ForeignKey ( ' evolution_triggers.id ' ) , nullable = False ,
info = dict ( description = u " ID of the trigger type " ) )
trigger_item_id = Column ( Integer , ForeignKey ( ' items.id ' ) , nullable = True ,
info = dict ( description = u " ID of the item that triggers the evolution in a way defined by evolution_trigger_id " ) )
minimum_level = Column ( Integer , nullable = True ,
info = dict ( description = u " Minimum level, or None if level doean ' t matter " ) )
gender = Column ( Enum ( ' male ' , ' female ' , name = ' pokemon_evolution_gender ' ) , nullable = True ,
info = dict ( description = u " Required gender, or None if gender doesn ' t matter " ) )
location_id = Column ( Integer , ForeignKey ( ' locations.id ' ) , nullable = True ,
info = dict ( description = u " Required location, or None if it doesn ' t matter " ) )
held_item_id = Column ( Integer , ForeignKey ( ' items.id ' ) , nullable = True ,
info = dict ( description = u " An item the pokémon must hold, or None if it doesn ' t matter " ) )
time_of_day = Column ( Enum ( ' morning ' , ' day ' , ' night ' , name = ' pokemon_evolution_time_of_day ' ) , nullable = True ,
info = dict ( description = u " Required time of day, or None if it doesn ' t matter " ) )
known_move_id = Column ( Integer , ForeignKey ( ' moves.id ' ) , nullable = True ,
info = dict ( description = u " ID of a move the pokémon must know, or None if it doesn ' t matter " ) )
minimum_happiness = Column ( Integer , nullable = True ,
info = dict ( description = u " Minimum tameness value the pokémon must have, or None if it doesn ' t matter " ) )
minimum_beauty = Column ( Integer , nullable = True ,
info = dict ( description = u " Minimum Beauty value the pokémon must have, or None if it doesn ' t matter " ) )
relative_physical_stats = Column ( Integer , nullable = True ,
info = dict ( description = u " Relation of Attack and Defense stats the pokémon must have, as sgn(atk-def), or None if that doesn ' t matter " ) )
party_pokemon_id = Column ( Integer , ForeignKey ( ' pokemon.id ' ) , nullable = True ,
info = dict ( description = u " ID of a pokémon that must be present in the party, or None if there ' s no such condition " ) )
2010-05-25 04:29:04 +00:00
2009-02-05 08:05:42 +00:00
class PokemonFlavorText ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ In-game pokédex descrption of a pokémon.
"""
2009-02-05 08:05:42 +00:00
__tablename__ = ' pokemon_flavor_text '
2010-10-03 19:21:39 +00:00
pokemon_id = Column ( Integer , ForeignKey ( ' pokemon.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = u " ID of the pokémon " ) )
version_id = Column ( Integer , ForeignKey ( ' versions.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = u " ID of the version that has this flavor text " ) )
flavor_text = Column ( Unicode ( 255 ) , nullable = False ,
info = dict ( description = u " ID of the version that has this flavor text " , official = True , format = ' gametext ' ) )
2009-02-05 08:05:42 +00:00
2010-11-29 23:51:50 +00:00
class PokemonForm ( TableBase ) :
u """ An individual form of a Pokémon.
Pokémon that do not have separate forms are still given a single row to
represent their single form .
"""
__tablename__ = ' pokemon_forms '
__singlename__ = ' pokemon_form '
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = u ' A unique ID for this form. ' ) )
name = Column ( Unicode ( 16 ) , nullable = True ,
info = dict ( description = u " This form ' s name, e.g. \" Plant \" for Plant Cloak Burmy. " , official = True , format = ' plaintext ' ) )
form_base_pokemon_id = Column ( Integer , ForeignKey ( ' pokemon.id ' ) , nullable = False , autoincrement = False ,
info = dict ( description = u ' The ID of the base Pokémon for this form. ' ) )
unique_pokemon_id = Column ( Integer , ForeignKey ( ' pokemon.id ' ) , autoincrement = False ,
info = dict ( description = u ' The ID of a Pokémon that represents specifically this form, for Pokémon with functionally-different forms like Wormadam. ' ) )
introduced_in_version_group_id = Column ( Integer , ForeignKey ( ' version_groups.id ' ) , autoincrement = False ,
info = dict ( description = u ' The ID of the version group in which this form first appeared. ' ) )
is_default = Column ( Boolean , nullable = False ,
info = dict ( description = u ' Set for exactly one form used as the default for each species. ' ) )
order = Column ( Integer , nullable = False , autoincrement = False ,
info = dict ( description = u ' The order in which forms should be sorted. Multiple forms may have equal order, in which case they should fall back on sorting by name. ' ) )
@property
def full_name ( self ) :
u """ Returns the full name of this form, e.g. " Plant Cloak " . """
if not self . name :
return None
elif self . form_group and self . form_group . term :
return ' {0} {1} ' . format ( self . name , self . form_group . term )
else :
return self . name
@property
def pokemon_name ( self ) :
u """ Returns the name of this Pokémon with this form, e.g. " Plant
Burmy " .
"""
if self . name :
return ' {0} {1} ' . format ( self . name , self . form_base_pokemon . name )
else :
return self . form_base_pokemon . name
2009-06-16 03:48:02 +00:00
class PokemonFormGroup ( TableBase ) :
2010-11-29 23:51:50 +00:00
u """ Information about a Pokémon ' s forms as a group. """
2009-06-16 03:48:02 +00:00
__tablename__ = ' pokemon_form_groups '
2010-10-03 19:21:39 +00:00
pokemon_id = Column ( Integer , ForeignKey ( ' pokemon.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
2010-11-29 23:51:50 +00:00
info = dict ( description = u " ID of the base form Pokémon " ) )
term = Column ( Unicode ( 16 ) , nullable = True ,
info = dict ( description = u " The term for this Pokémon ' s forms, e.g. \" Cloak \" for Burmy or \" Forme \" for Deoxys. " , official = True , format = ' plaintext ' ) )
2010-10-03 19:21:39 +00:00
is_battle_only = Column ( Boolean , nullable = False ,
info = dict ( description = u " Set iff the forms only change in battle " ) )
description = Column ( markdown . MarkdownColumn ( 1024 ) , nullable = False ,
info = dict ( description = u " English description of how the forms work " , format = ' markdown ' ) )
2009-06-16 03:48:02 +00:00
2010-11-30 07:29:14 +00:00
class PokemonFormPokeathlonStat ( TableBase ) :
u """ A Pokémon form ' s performance in one Pokéathlon stat. """
__tablename__ = ' pokemon_form_pokeathlon_stats '
pokemon_form_id = Column ( Integer , ForeignKey ( ' pokemon_forms.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = u ' The ID of the Pokémon form. ' ) )
pokeathlon_stat_id = Column ( Integer , ForeignKey ( ' pokeathlon_stats.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = u ' The ID of the Pokéathlon stat. ' ) )
minimum_stat = Column ( Integer , nullable = False , autoincrement = False ,
info = dict ( description = u ' The minimum value for this stat for this Pokémon form. ' ) )
base_stat = Column ( Integer , nullable = False , autoincrement = False ,
info = dict ( description = u ' The default value for this stat for this Pokémon form. ' ) )
maximum_stat = Column ( Integer , nullable = False , autoincrement = False ,
info = dict ( description = u ' The maximum value for this stat for this Pokémon form. ' ) )
2010-03-03 08:53:00 +00:00
class PokemonHabitat ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ The habitat of a pokémon, as given in the FireRed/LeafGreen version pokédex
"""
2010-03-03 08:53:00 +00:00
__tablename__ = ' pokemon_habitats '
2010-10-03 19:21:39 +00:00
id = Column ( Integer , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = u " A numeric ID " ) )
name = Column ( Unicode ( 16 ) , nullable = False ,
info = dict ( description = u " The English name of the habitat " , official = True , format = ' plaintext ' ) )
2010-03-03 08:53:00 +00:00
2010-06-07 19:35:22 +00:00
class PokemonInternalID ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ The number of a pokémon a game uses internally
"""
2010-06-07 19:35:22 +00:00
__tablename__ = ' pokemon_internal_ids '
2010-10-03 19:21:39 +00:00
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 " ) )
internal_id = Column ( Integer , nullable = False ,
info = dict ( description = u " Internal ID the generation ' s games use for the pokémon " ) )
2010-06-07 19:35:22 +00:00
2009-07-18 06:33:36 +00:00
class PokemonItem ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ Record of an item a pokémon can hold in the wild
"""
2009-07-18 06:33:36 +00:00
__tablename__ = ' pokemon_items '
2010-10-03 19:21:39 +00:00
pokemon_id = Column ( Integer , ForeignKey ( ' pokemon.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = u " ID of the pokémon " ) )
version_id = Column ( Integer , ForeignKey ( ' versions.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = u " ID of the version this applies to " ) )
item_id = Column ( Integer , ForeignKey ( ' items.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = u " ID of the item " ) )
rarity = Column ( Integer , nullable = False ,
info = dict ( description = u " Chance of the pokémon holding the item, in percent " ) )
2009-07-18 06:33:36 +00:00
2009-07-27 06:03:10 +00:00
class PokemonMove ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ Record of a move a pokémon can learn
"""
2009-07-27 06:03:10 +00:00
__tablename__ = ' pokemon_moves '
2010-10-03 19:21:39 +00:00
pokemon_id = Column ( Integer , ForeignKey ( ' pokemon.id ' ) , nullable = False , index = True ,
info = dict ( description = u " ID of the pokémon " ) )
version_group_id = Column ( Integer , ForeignKey ( ' version_groups.id ' ) , nullable = False , index = True ,
info = dict ( description = u " ID of the version group this applies to " ) )
move_id = Column ( Integer , ForeignKey ( ' moves.id ' ) , nullable = False , index = True ,
info = dict ( description = u " ID of the move " ) )
pokemon_move_method_id = Column ( Integer , ForeignKey ( ' pokemon_move_methods.id ' ) , nullable = False , index = True ,
info = dict ( description = u " ID of the method this move is learned by " ) )
level = Column ( Integer , nullable = True , index = True ,
info = dict ( description = u " Level the move is learned at, if applicable " ) )
order = Column ( Integer , nullable = True ,
info = dict ( description = u " A sort key to produce the correct ordering when all else is equal " ) ) # XXX: This needs a better description
2010-09-11 06:29:26 +00:00
__table_args__ = (
PrimaryKeyConstraint ( ' pokemon_id ' , ' version_group_id ' , ' move_id ' , ' pokemon_move_method_id ' , ' level ' ) ,
{ } ,
)
2009-07-27 06:03:10 +00:00
class PokemonMoveMethod ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ A method a move can be learned by, such as " Level up " or " Tutor " .
"""
2009-07-27 06:03:10 +00:00
__tablename__ = ' pokemon_move_methods '
2010-10-03 19:21:39 +00:00
id = Column ( Integer , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = u " A numeric ID " ) )
name = Column ( Unicode ( 64 ) , nullable = False ,
info = dict ( description = u " An English name of the method " , format = ' plaintext ' ) )
description = Column ( Unicode ( 255 ) , nullable = False ,
info = dict ( description = u " A detailed description of how the method works " , format = ' plaintext ' ) )
2009-07-27 06:03:10 +00:00
2009-02-05 08:05:42 +00:00
class PokemonName ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ A non-English name of a pokémon.
"""
2009-02-05 08:05:42 +00:00
__tablename__ = ' pokemon_names '
2010-10-03 19:21:39 +00:00
pokemon_id = Column ( Integer , ForeignKey ( ' pokemon.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = u " ID of the pokémon " ) )
language_id = Column ( Integer , ForeignKey ( ' languages.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = u " ID of the language " ) )
name = Column ( Unicode ( 16 ) , nullable = False ,
info = dict ( description = u " Name of the pokémon in the language " , foreign = True , format = ' plaintext ' ) )
2009-02-05 08:05:42 +00:00
2009-03-05 03:29:43 +00:00
class PokemonShape ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ The shape of a pokémon ' s body, as used in generation IV pokédexes.
"""
2009-03-05 03:29:43 +00:00
__tablename__ = ' pokemon_shapes '
2010-10-03 19:21:39 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = u " A numeric ID " ) )
name = Column ( Unicode ( 24 ) , nullable = False ,
info = dict ( description = u " A boring English name of the body shape " , format = ' plaintext ' ) )
awesome_name = Column ( Unicode ( 16 ) , nullable = False ,
info = dict ( description = u " A splendiferous, technically English, name of the body shape " , format = ' plaintext ' ) )
2009-03-05 03:29:43 +00:00
2009-02-05 08:05:42 +00:00
class PokemonStat ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ A stat value of a pokémon
"""
2009-02-05 08:05:42 +00:00
__tablename__ = ' pokemon_stats '
2010-10-03 19:21:39 +00:00
pokemon_id = Column ( Integer , ForeignKey ( ' pokemon.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = u " ID of the pokémon " ) )
stat_id = Column ( Integer , ForeignKey ( ' stats.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = u " ID of the stat " ) )
base_stat = Column ( Integer , nullable = False ,
info = dict ( description = u " The base stat " ) )
effort = Column ( Integer , nullable = False ,
info = dict ( description = u " The effort increase in this stat gained when this pokémon is defeated " ) )
2009-02-05 08:05:42 +00:00
class PokemonType ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ Maps a type to a pokémon. Each pokémon has 1 or 2 types.
"""
2009-02-05 08:05:42 +00:00
__tablename__ = ' pokemon_types '
2010-10-03 19:21:39 +00:00
pokemon_id = Column ( Integer , ForeignKey ( ' pokemon.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = u " ID of the pokémon " ) )
type_id = Column ( Integer , ForeignKey ( ' types.id ' ) , nullable = False ,
info = dict ( description = u " ID of the type " ) )
slot = Column ( Integer , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = u " The type ' s slot, 1 or 2, used to sort types if there are two of them " ) )
2009-02-05 08:05:42 +00:00
2010-01-25 04:39:33 +00:00
class Region ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ Major areas of the world: Kanto, Johto, etc.
"""
2010-01-25 04:39:33 +00:00
__tablename__ = ' regions '
2010-10-03 19:21:39 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = u " A numeric ID " ) )
name = Column ( Unicode ( 16 ) , nullable = False ,
info = dict ( description = u " The English name of the region " , official = True , format = ' plaintext ' ) )
2010-01-25 04:39:33 +00:00
2009-02-05 08:05:42 +00:00
class Stat ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ A Stat, such as Attack or Speed
"""
2009-02-05 08:05:42 +00:00
__tablename__ = ' stats '
2010-10-03 19:21:39 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = u " A numeric ID " ) )
damage_class_id = Column ( Integer , ForeignKey ( ' move_damage_classes.id ' ) , nullable = True ,
info = dict ( description = u " For offensive and defensive stats, the damage this stat relates to; otherwise None (the NULL value) " ) )
name = Column ( Unicode ( 16 ) , nullable = False ,
info = dict ( description = u " The English name of the stat " , official = True , format = ' plaintext ' ) )
2009-02-05 08:05:42 +00:00
2009-09-16 03:04:22 +00:00
class SuperContestCombo ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ Combo of two moves in a Super Contest.
"""
2009-09-16 03:04:22 +00:00
__tablename__ = ' super_contest_combos '
2010-10-03 19:21:39 +00:00
first_move_id = Column ( Integer , ForeignKey ( ' moves.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = u " ID of the first move " ) )
second_move_id = Column ( Integer , ForeignKey ( ' moves.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = u " ID of the second and last move " ) )
2009-09-16 03:04:22 +00:00
2009-09-15 05:07:08 +00:00
class SuperContestEffect ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ An effect a move can have when used in the Super Contest
"""
2009-09-15 05:07:08 +00:00
__tablename__ = ' super_contest_effects '
2010-10-03 19:21:39 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = u " A numeric ID " ) )
appeal = Column ( SmallInteger , nullable = False ,
info = dict ( description = u " Number of hearts the user will get when executing a move with this effect " ) )
flavor_text = Column ( Unicode ( 64 ) , nullable = False ,
info = dict ( description = u " An English description of the effect " , format = ' plaintext ' ) )
2009-09-15 05:07:08 +00:00
2009-02-05 08:05:42 +00:00
class TypeEfficacy ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ The effectiveness of damage of one type against pokémon of another type
"""
2009-02-05 08:05:42 +00:00
__tablename__ = ' type_efficacy '
2010-10-03 19:21:39 +00:00
damage_type_id = Column ( Integer , ForeignKey ( ' types.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = u " ID of the damage type; most commonly this is the same as the attack type " ) )
target_type_id = Column ( Integer , ForeignKey ( ' types.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = u " ID of the defending pokémon ' s type " ) )
damage_factor = Column ( Integer , nullable = False ,
info = dict ( description = u " The effectiveness, in percent " ) )
2009-02-05 08:05:42 +00:00
class Type ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ An elemental type, such as Grass or Steel
"""
2009-02-05 08:05:42 +00:00
__tablename__ = ' types '
2009-09-10 17:17:59 +00:00
__singlename__ = ' type '
2010-10-03 19:21:39 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = u " A numeric ID " ) )
name = Column ( Unicode ( 8 ) , nullable = False ,
info = dict ( description = u " The English name. " , format = ' plaintext ' ) ) # XXX: Is this official? The games don't spell "Electric" in full...
abbreviation = Column ( Unicode ( 3 ) , nullable = False ,
info = dict ( description = u " An arbitrary 3-letter abbreviation of the type " , format = ' plaintext ' ) ) # XXX: Or is it not arbitrary?
generation_id = Column ( Integer , ForeignKey ( ' generations.id ' ) , nullable = False ,
info = dict ( description = u " ID of the generation this type first appeared in " ) )
damage_class_id = Column ( Integer , ForeignKey ( ' move_damage_classes.id ' ) , nullable = False ,
info = dict ( description = u " ID of the damage class this type ' s moves had before generation IV, or None for the ??? type " ) )
2009-02-05 08:05:42 +00:00
2010-08-07 02:32:11 +00:00
class TypeName ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ Non-English name of an elemental type
"""
2010-08-07 02:32:11 +00:00
__tablename__ = ' type_names '
2010-10-03 19:21:39 +00:00
type_id = Column ( Integer , ForeignKey ( ' types.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = u " ID of the type " ) )
language_id = Column ( Integer , ForeignKey ( ' languages.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = u " ID of the language " ) )
name = Column ( Unicode ( 16 ) , nullable = False ,
info = dict ( description = u " Name of the type in that language " , foreign = True , format = ' plaintext ' ) )
2010-08-07 02:32:11 +00:00
2009-02-05 08:05:42 +00:00
class VersionGroup ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ A group of related game versions
"""
2009-02-05 08:05:42 +00:00
__tablename__ = ' version_groups '
2010-10-03 19:21:39 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = u " A numeric ID " ) )
generation_id = Column ( Integer , ForeignKey ( ' generations.id ' ) , nullable = False ,
info = dict ( description = u " ID of the generation the games of this group belong to " ) )
2010-12-05 01:46:06 +00:00
pokedex_id = Column ( Integer , ForeignKey ( ' pokedexes.id ' ) , nullable = False ,
info = dict ( description = u " ID of the regional Pokédex used in this version group. " ) )
2009-02-05 08:05:42 +00:00
2010-01-25 04:39:33 +00:00
class VersionGroupRegion ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ Maps a region to a game version group that features it
"""
2010-01-25 04:39:33 +00:00
__tablename__ = ' version_group_regions '
2010-10-03 19:21:39 +00:00
version_group_id = Column ( Integer , ForeignKey ( ' version_groups.id ' ) , primary_key = True , nullable = False ,
info = dict ( description = u " ID of the version " ) )
region_id = Column ( Integer , ForeignKey ( ' regions.id ' ) , primary_key = True , nullable = False ,
info = dict ( description = u " ID of the region " ) )
2010-01-25 04:39:33 +00:00
2009-02-05 08:05:42 +00:00
class Version ( TableBase ) :
2010-12-06 22:45:43 +00:00
u """ An individual main-series Pokémon game
2010-10-03 19:21:39 +00:00
"""
2009-02-05 08:05:42 +00:00
__tablename__ = ' versions '
2010-10-03 19:21:39 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
2010-12-06 22:45:43 +00:00
info = dict ( description = u " A unique ID for this version " ) )
2010-10-03 19:21:39 +00:00
version_group_id = Column ( Integer , ForeignKey ( ' version_groups.id ' ) , nullable = False ,
2010-12-06 22:45:43 +00:00
info = dict ( description = u " The ID of the version group this game belongs to " ) )
2010-10-03 19:21:39 +00:00
name = Column ( Unicode ( 32 ) , nullable = False ,
info = dict ( description = u ' The English name of the game, without the " Pokémon " prefix ' , official = True , format = ' plaintext ' ) )
2009-02-24 07:31:35 +00:00
### Relations down here, to avoid ordering problems
2010-12-06 22:45:43 +00:00
Ability . changelog = relation ( AbilityChangelog ,
order_by = AbilityChangelog . changed_in_version_group_id . desc ( ) ,
backref = ' ability ' ,
)
2010-05-25 21:07:05 +00:00
Ability . flavor_text = relation ( AbilityFlavorText , order_by = AbilityFlavorText . version_group_id , backref = ' ability ' )
Ability . foreign_names = relation ( AbilityName , backref = ' ability ' )
2010-05-01 21:33:11 +00:00
Ability . generation = relation ( Generation , backref = ' abilities ' )
2010-12-11 17:10:08 +00:00
Ability . all_pokemon = relation ( Pokemon ,
secondary = PokemonAbility . __table__ ,
back_populates = ' all_abilities ' ,
)
2010-11-25 08:09:06 +00:00
Ability . pokemon = relation ( Pokemon ,
secondary = PokemonAbility . __table__ ,
2010-12-11 17:10:08 +00:00
primaryjoin = and_ (
PokemonAbility . ability_id == Ability . id ,
PokemonAbility . is_dream == False
) ,
back_populates = ' abilities ' ,
)
Ability . dream_pokemon = relation ( Pokemon ,
secondary = PokemonAbility . __table__ ,
primaryjoin = and_ (
PokemonAbility . ability_id == Ability . id ,
PokemonAbility . is_dream == True
) ,
back_populates = ' dream_ability ' ,
2010-11-25 08:09:06 +00:00
)
2010-05-01 21:33:11 +00:00
2010-12-06 22:45:43 +00:00
AbilityChangelog . changed_in = relation ( VersionGroup , backref = ' ability_changelog ' )
2010-05-04 06:03:01 +00:00
AbilityFlavorText . version_group = relation ( VersionGroup )
2010-05-25 21:07:05 +00:00
AbilityName . language = relation ( Language )
2010-04-26 06:23:52 +00:00
Berry . berry_firmness = relation ( BerryFirmness , backref = ' berries ' )
Berry . firmness = association_proxy ( ' berry_firmness ' , ' name ' )
Berry . flavors = relation ( BerryFlavor , order_by = BerryFlavor . contest_type_id , backref = ' berry ' )
Berry . natural_gift_type = relation ( Type )
BerryFlavor . contest_type = relation ( ContestType )
2009-09-16 03:04:22 +00:00
ContestCombo . first = relation ( Move , primaryjoin = ContestCombo . first_move_id == Move . id ,
backref = ' contest_combo_first ' )
ContestCombo . second = relation ( Move , primaryjoin = ContestCombo . second_move_id == Move . id ,
backref = ' contest_combo_second ' )
2009-12-09 22:35:29 +00:00
Encounter . location_area = relation ( LocationArea , backref = ' encounters ' )
2009-05-01 13:20:18 +00:00
Encounter . pokemon = relation ( Pokemon , backref = ' encounters ' )
Encounter . version = relation ( Version , backref = ' encounters ' )
2009-12-09 22:35:29 +00:00
Encounter . slot = relation ( EncounterSlot , backref = ' encounters ' )
EncounterConditionValue . condition = relation ( EncounterCondition , backref = ' values ' )
Encounter . condition_value_map = relation ( EncounterConditionValueMap , backref = ' encounter ' )
Encounter . condition_values = association_proxy ( ' condition_value_map ' , ' condition_value ' )
EncounterConditionValueMap . condition_value = relation ( EncounterConditionValue ,
backref = ' encounter_map ' )
2009-05-01 13:20:18 +00:00
2009-12-09 22:35:29 +00:00
EncounterSlot . terrain = relation ( EncounterTerrain , backref = ' slots ' )
2009-05-01 13:20:18 +00:00
2009-12-09 22:35:29 +00:00
EncounterSlot . condition_map = relation ( EncounterSlotCondition , backref = ' slot ' )
EncounterSlot . conditions = association_proxy ( ' condition_map ' , ' condition ' )
EncounterSlotCondition . condition = relation ( EncounterCondition ,
backref = ' slot_map ' )
2009-05-01 13:20:18 +00:00
2009-03-04 01:58:27 +00:00
EvolutionChain . growth_rate = relation ( GrowthRate , backref = ' evolution_chains ' )
2010-09-02 06:24:21 +00:00
EvolutionChain . baby_trigger_item = relation ( Item , backref = ' evolution_chains ' )
2010-12-21 04:26:26 +00:00
EvolutionChain . pokemon = relation ( Pokemon , order_by = Pokemon . order , back_populates = ' evolution_chain ' )
2009-05-01 13:20:18 +00:00
2010-04-26 11:27:55 +00:00
Experience . growth_rate = relation ( GrowthRate , backref = ' experience_table ' )
2010-03-30 03:22:57 +00:00
Generation . canonical_pokedex = relation ( Pokedex , backref = ' canonical_for_generation ' )
2009-08-19 06:49:49 +00:00
Generation . versions = relation ( Version , secondary = VersionGroup . __table__ )
2010-01-25 04:39:33 +00:00
Generation . main_region = relation ( Region )
2010-05-03 08:00:05 +00:00
GrowthRate . max_experience_obj = relation ( Experience , primaryjoin = and_ ( Experience . growth_rate_id == GrowthRate . id , Experience . level == 100 ) , uselist = False )
GrowthRate . max_experience = association_proxy ( ' max_experience_obj ' , ' experience ' )
2010-04-26 06:23:52 +00:00
Item . berry = relation ( Berry , uselist = False , backref = ' item ' )
2010-05-02 22:40:54 +00:00
Item . flags = relation ( ItemFlag , secondary = ItemFlagMap . __table__ )
2010-05-02 08:33:44 +00:00
Item . flavor_text = relation ( ItemFlavorText , order_by = ItemFlavorText . version_group_id . asc ( ) , backref = ' item ' )
2010-04-26 06:23:52 +00:00
Item . fling_effect = relation ( ItemFlingEffect , backref = ' items ' )
2010-06-15 03:13:42 +00:00
Item . foreign_names = relation ( ItemName , backref = ' item ' )
2010-05-12 03:20:33 +00:00
Item . machines = relation ( Machine , order_by = Machine . version_group_id . asc ( ) )
2010-04-27 04:13:28 +00:00
Item . category = relation ( ItemCategory )
Item . pocket = association_proxy ( ' category ' , ' pocket ' )
2010-04-26 06:23:52 +00:00
2010-04-27 04:13:28 +00:00
ItemCategory . items = relation ( Item , order_by = Item . name )
ItemCategory . pocket = relation ( ItemPocket )
2010-05-02 08:33:44 +00:00
ItemFlavorText . version_group = relation ( VersionGroup )
2010-07-26 03:25:59 +00:00
ItemInternalID . item = relation ( Item , backref = ' internal_ids ' )
ItemInternalID . generation = relation ( Generation )
2010-06-15 03:13:42 +00:00
ItemName . language = relation ( Language )
2010-04-27 04:13:28 +00:00
ItemPocket . categories = relation ( ItemCategory , order_by = ItemCategory . name )
2010-04-26 06:23:52 +00:00
2010-01-25 04:39:33 +00:00
Location . region = relation ( Region , backref = ' locations ' )
2009-08-19 06:49:49 +00:00
2009-05-01 13:20:18 +00:00
LocationArea . location = relation ( Location , backref = ' areas ' )
2010-07-26 03:25:59 +00:00
LocationInternalID . location = relation ( Location , backref = ' internal_ids ' )
LocationInternalID . generation = relation ( Generation )
2010-05-12 03:20:33 +00:00
Machine . item = relation ( Item )
2009-09-19 04:45:37 +00:00
Machine . version_group = relation ( VersionGroup )
2009-08-10 06:07:23 +00:00
2010-11-27 09:25:38 +00:00
Move . changelog = relation ( MoveChangelog ,
2010-12-06 23:10:52 +00:00
order_by = MoveChangelog . changed_in_version_group_id . desc ( ) ,
2010-11-27 09:25:38 +00:00
backref = ' move ' ,
)
2009-09-15 05:07:08 +00:00
Move . contest_effect = relation ( ContestEffect , backref = ' moves ' )
2009-09-16 03:04:22 +00:00
Move . contest_combo_next = association_proxy ( ' contest_combo_first ' , ' second ' )
Move . contest_combo_prev = association_proxy ( ' contest_combo_second ' , ' first ' )
2010-04-27 04:48:44 +00:00
Move . contest_type = relation ( ContestType , backref = ' moves ' )
2009-08-27 05:30:07 +00:00
Move . damage_class = relation ( MoveDamageClass , backref = ' moves ' )
2009-09-14 15:29:05 +00:00
Move . flags = association_proxy ( ' move_flags ' , ' flag ' )
2010-05-20 00:49:48 +00:00
Move . flavor_text = relation ( MoveFlavorText , order_by = MoveFlavorText . version_group_id , backref = ' move ' )
2010-05-25 21:07:05 +00:00
Move . foreign_names = relation ( MoveName , backref = ' move ' )
2009-08-27 05:30:07 +00:00
Move . generation = relation ( Generation , backref = ' moves ' )
2009-08-10 06:07:23 +00:00
Move . machines = relation ( Machine , backref = ' move ' )
2009-09-14 04:06:15 +00:00
Move . move_effect = relation ( MoveEffect , backref = ' moves ' )
2009-09-14 15:29:05 +00:00
Move . move_flags = relation ( MoveFlag , backref = ' move ' )
2009-09-15 05:07:08 +00:00
Move . super_contest_effect = relation ( SuperContestEffect , backref = ' moves ' )
2009-09-16 03:04:22 +00:00
Move . super_contest_combo_next = association_proxy ( ' super_contest_combo_first ' , ' second ' )
Move . super_contest_combo_prev = association_proxy ( ' super_contest_combo_second ' , ' first ' )
2009-08-27 05:30:07 +00:00
Move . target = relation ( MoveTarget , backref = ' moves ' )
Move . type = relation ( Type , backref = ' moves ' )
2009-07-28 02:09:11 +00:00
2010-05-31 22:13:34 +00:00
Move . effect = markdown . MoveEffectProperty ( ' effect ' )
Move . short_effect = markdown . MoveEffectProperty ( ' short_effect ' )
2009-09-01 04:37:29 +00:00
2010-11-27 09:25:38 +00:00
MoveChangelog . changed_in = relation ( VersionGroup , backref = ' move_changelog ' )
2010-12-14 01:24:14 +00:00
MoveChangelog . move_effect = relation ( MoveEffect , backref = ' move_changelog ' )
MoveChangelog . type = relation ( Type , backref = ' move_changelog ' )
MoveChangelog . effect = markdown . MoveEffectProperty ( ' effect ' )
MoveChangelog . short_effect = markdown . MoveEffectProperty ( ' short_effect ' )
2010-11-27 09:25:38 +00:00
2009-11-09 01:00:45 +00:00
MoveEffect . category_map = relation ( MoveEffectCategoryMap )
MoveEffect . categories = association_proxy ( ' category_map ' , ' category ' )
MoveEffectCategoryMap . category = relation ( MoveEffectCategory )
2009-09-14 15:29:05 +00:00
MoveFlag . flag = relation ( MoveFlagType )
2010-05-20 00:49:48 +00:00
MoveFlavorText . version_group = relation ( VersionGroup )
2009-09-15 05:18:01 +00:00
2009-09-14 04:06:15 +00:00
MoveName . language = relation ( Language )
2010-06-08 00:14:37 +00:00
Nature . foreign_names = relation ( NatureName , backref = ' nature ' )
2010-03-23 05:29:28 +00:00
Nature . decreased_stat = relation ( Stat , primaryjoin = Nature . decreased_stat_id == Stat . id ,
backref = ' decreasing_natures ' )
Nature . increased_stat = relation ( Stat , primaryjoin = Nature . increased_stat_id == Stat . id ,
backref = ' increasing_natures ' )
2010-04-27 06:26:37 +00:00
Nature . hates_flavor = relation ( ContestType , primaryjoin = Nature . hates_flavor_id == ContestType . id ,
backref = ' hating_natures ' )
Nature . likes_flavor = relation ( ContestType , primaryjoin = Nature . likes_flavor_id == ContestType . id ,
backref = ' liking_natures ' )
Nature . battle_style_preferences = relation ( NatureBattleStylePreference ,
order_by = NatureBattleStylePreference . move_battle_style_id ,
backref = ' nature ' )
Nature . pokeathlon_effects = relation ( NaturePokeathlonStat , order_by = NaturePokeathlonStat . pokeathlon_stat_id )
NatureBattleStylePreference . battle_style = relation ( MoveBattleStyle , backref = ' nature_preferences ' )
2010-06-08 00:14:37 +00:00
NatureName . language = relation ( Language )
2010-04-27 06:26:37 +00:00
NaturePokeathlonStat . pokeathlon_stat = relation ( PokeathlonStat , backref = ' nature_effects ' )
2010-03-23 05:29:28 +00:00
2010-03-30 03:22:57 +00:00
Pokedex . region = relation ( Region , backref = ' pokedexes ' )
2010-12-05 01:46:06 +00:00
Pokedex . version_groups = relation ( VersionGroup , order_by = VersionGroup . id , back_populates = ' pokedex ' )
2010-02-17 07:16:59 +00:00
2010-11-25 08:09:06 +00:00
Pokemon . all_abilities = relation ( Ability ,
secondary = PokemonAbility . __table__ ,
order_by = PokemonAbility . slot ,
)
Pokemon . abilities = relation ( Ability ,
secondary = PokemonAbility . __table__ ,
primaryjoin = and_ (
Pokemon . id == PokemonAbility . pokemon_id ,
PokemonAbility . is_dream == False ,
) ,
order_by = PokemonAbility . slot ,
)
Pokemon . dream_ability = relation ( Ability ,
secondary = PokemonAbility . __table__ ,
primaryjoin = and_ (
Pokemon . id == PokemonAbility . pokemon_id ,
PokemonAbility . is_dream == True ,
) ,
uselist = False ,
)
2010-03-03 04:27:40 +00:00
Pokemon . pokemon_color = relation ( PokemonColor , backref = ' pokemon ' )
Pokemon . color = association_proxy ( ' pokemon_color ' , ' name ' )
2010-06-07 20:10:44 +00:00
Pokemon . dex_numbers = relation ( PokemonDexNumber , order_by = PokemonDexNumber . pokedex_id . asc ( ) , backref = ' pokemon ' )
2009-03-04 01:58:27 +00:00
Pokemon . egg_groups = relation ( EggGroup , secondary = PokemonEggGroup . __table__ ,
order_by = PokemonEggGroup . egg_group_id ,
2010-12-21 04:26:26 +00:00
backref = backref ( ' pokemon ' , order_by = Pokemon . order ) )
Pokemon . evolution_chain = relation ( EvolutionChain , back_populates = ' pokemon ' )
2010-05-25 07:09:29 +00:00
Pokemon . child_pokemon = relation ( Pokemon ,
2010-05-25 04:29:04 +00:00
primaryjoin = Pokemon . id == PokemonEvolution . from_pokemon_id ,
2010-05-25 07:00:56 +00:00
secondary = PokemonEvolution . __table__ ,
2010-05-25 04:29:04 +00:00
secondaryjoin = PokemonEvolution . to_pokemon_id == Pokemon . id ,
2010-05-25 07:09:29 +00:00
backref = backref ( ' parent_pokemon ' , uselist = False ) ,
2010-05-25 04:29:04 +00:00
)
2010-05-02 08:33:44 +00:00
Pokemon . flavor_text = relation ( PokemonFlavorText , order_by = PokemonFlavorText . version_id . asc ( ) , backref = ' pokemon ' )
2009-03-02 03:40:02 +00:00
Pokemon . foreign_names = relation ( PokemonName , backref = ' pokemon ' )
2010-11-29 23:51:50 +00:00
Pokemon . forms = relation ( PokemonForm , primaryjoin = Pokemon . id == PokemonForm . form_base_pokemon_id ,
order_by = ( PokemonForm . order . asc ( ) , PokemonForm . name . asc ( ) ) )
Pokemon . default_form = relation ( PokemonForm ,
primaryjoin = and_ ( Pokemon . id == PokemonForm . form_base_pokemon_id , PokemonForm . is_default == True ) ,
uselist = False ,
)
2010-03-03 08:53:00 +00:00
Pokemon . pokemon_habitat = relation ( PokemonHabitat , backref = ' pokemon ' )
Pokemon . habitat = association_proxy ( ' pokemon_habitat ' , ' name ' )
2010-04-26 06:23:52 +00:00
Pokemon . items = relation ( PokemonItem , backref = ' pokemon ' )
2009-03-02 09:06:31 +00:00
Pokemon . generation = relation ( Generation , backref = ' pokemon ' )
2009-03-05 03:29:43 +00:00
Pokemon . shape = relation ( PokemonShape , backref = ' pokemon ' )
2010-09-27 06:59:48 +00:00
Pokemon . stats = relation ( PokemonStat , backref = ' pokemon ' , order_by = PokemonStat . stat_id . asc ( ) )
2010-12-21 04:26:26 +00:00
Pokemon . types = relation ( Type , secondary = PokemonType . __table__ ,
order_by = PokemonType . slot . asc ( ) ,
back_populates = ' pokemon ' )
2009-03-02 03:40:02 +00:00
2010-02-17 07:16:59 +00:00
PokemonDexNumber . pokedex = relation ( Pokedex )
2009-03-02 03:40:02 +00:00
2010-05-25 04:29:04 +00:00
PokemonEvolution . from_pokemon = relation ( Pokemon ,
primaryjoin = PokemonEvolution . from_pokemon_id == Pokemon . id ,
backref = ' child_evolutions ' ,
)
PokemonEvolution . to_pokemon = relation ( Pokemon ,
primaryjoin = PokemonEvolution . to_pokemon_id == Pokemon . id ,
backref = backref ( ' parent_evolution ' , uselist = False ) ,
)
PokemonEvolution . child_evolutions = relation ( PokemonEvolution ,
primaryjoin = PokemonEvolution . from_pokemon_id == PokemonEvolution . to_pokemon_id ,
foreign_keys = [ PokemonEvolution . to_pokemon_id ] ,
backref = backref ( ' parent_evolution ' ,
remote_side = [ PokemonEvolution . from_pokemon_id ] ,
uselist = False ,
) ,
)
PokemonEvolution . trigger = relation ( EvolutionTrigger , backref = ' evolutions ' )
PokemonEvolution . trigger_item = relation ( Item ,
primaryjoin = PokemonEvolution . trigger_item_id == Item . id ,
backref = ' triggered_evolutions ' ,
)
PokemonEvolution . held_item = relation ( Item ,
primaryjoin = PokemonEvolution . held_item_id == Item . id ,
backref = ' required_for_evolutions ' ,
)
PokemonEvolution . location = relation ( Location , backref = ' triggered_evolutions ' )
PokemonEvolution . known_move = relation ( Move , backref = ' triggered_evolutions ' )
PokemonEvolution . party_pokemon = relation ( Pokemon ,
primaryjoin = PokemonEvolution . party_pokemon_id == Pokemon . id ,
backref = ' triggered_evolutions ' ,
)
2009-03-07 03:14:42 +00:00
PokemonFlavorText . version = relation ( Version )
2010-11-29 23:51:50 +00:00
PokemonForm . form_base_pokemon = relation ( Pokemon , primaryjoin = PokemonForm . form_base_pokemon_id == Pokemon . id )
PokemonForm . unique_pokemon = relation ( Pokemon , backref = backref ( ' unique_form ' , uselist = False ) ,
primaryjoin = PokemonForm . unique_pokemon_id == Pokemon . id )
PokemonForm . version_group = relation ( VersionGroup )
PokemonForm . form_group = association_proxy ( ' form_base_pokemon ' , ' form_group ' )
2010-11-30 07:29:14 +00:00
PokemonForm . pokeathlon_stats = relation ( PokemonFormPokeathlonStat ,
order_by = PokemonFormPokeathlonStat . pokeathlon_stat_id ,
backref = ' pokemon_form ' )
2009-07-18 06:33:36 +00:00
2009-06-16 03:48:02 +00:00
PokemonFormGroup . pokemon = relation ( Pokemon , backref = backref ( ' form_group ' ,
uselist = False ) )
2010-11-29 23:51:50 +00:00
2010-11-30 07:29:14 +00:00
PokemonFormPokeathlonStat . pokeathlon_stat = relation ( PokeathlonStat )
2010-11-29 23:51:50 +00:00
PokemonItem . item = relation ( Item , backref = ' pokemon ' )
PokemonItem . version = relation ( Version )
2009-06-16 03:48:02 +00:00
2009-07-27 06:03:10 +00:00
PokemonMove . pokemon = relation ( Pokemon , backref = ' pokemon_moves ' )
PokemonMove . version_group = relation ( VersionGroup )
2009-11-28 10:14:39 +00:00
PokemonMove . machine = relation ( Machine , backref = ' pokemon_moves ' ,
primaryjoin = and_ ( Machine . version_group_id == PokemonMove . version_group_id ,
Machine . move_id == PokemonMove . move_id ) ,
foreign_keys = [ Machine . version_group_id , Machine . move_id ] ,
uselist = False )
2009-07-27 06:03:10 +00:00
PokemonMove . move = relation ( Move , backref = ' pokemon_moves ' )
PokemonMove . method = relation ( PokemonMoveMethod )
2010-12-07 06:58:25 +00:00
PokemonName . language = relation ( Language , lazy = ' joined ' )
2009-03-02 03:40:02 +00:00
PokemonStat . stat = relation ( Stat )
2010-01-25 04:39:33 +00:00
# This is technically a has-many; Generation.main_region_id -> Region.id
Region . generation = relation ( Generation , uselist = False )
Region . version_group_regions = relation ( VersionGroupRegion , backref = ' region ' ,
order_by = ' VersionGroupRegion.version_group_id ' )
Region . version_groups = association_proxy ( ' version_group_regions ' , ' version_group ' )
2010-05-27 04:58:18 +00:00
Stat . damage_class = relation ( MoveDamageClass , backref = ' stats ' )
2009-09-16 03:04:22 +00:00
SuperContestCombo . first = relation ( Move , primaryjoin = SuperContestCombo . first_move_id == Move . id ,
backref = ' super_contest_combo_first ' )
SuperContestCombo . second = relation ( Move , primaryjoin = SuperContestCombo . second_move_id == Move . id ,
backref = ' super_contest_combo_second ' )
2009-03-02 03:40:02 +00:00
Type . damage_efficacies = relation ( TypeEfficacy ,
primaryjoin = Type . id
== TypeEfficacy . damage_type_id ,
backref = ' damage_type ' )
Type . target_efficacies = relation ( TypeEfficacy ,
primaryjoin = Type . id
== TypeEfficacy . target_type_id ,
backref = ' target_type ' )
2009-05-01 13:20:18 +00:00
2009-12-20 06:41:40 +00:00
Type . generation = relation ( Generation , backref = ' types ' )
Type . damage_class = relation ( MoveDamageClass , backref = ' types ' )
2010-08-07 02:32:11 +00:00
Type . foreign_names = relation ( TypeName , backref = ' type ' )
2010-12-21 04:26:26 +00:00
Type . pokemon = relation ( Pokemon , secondary = PokemonType . __table__ ,
order_by = Pokemon . order ,
back_populates = ' types ' )
2010-08-07 02:32:11 +00:00
TypeName . language = relation ( Language )
2009-12-20 06:41:40 +00:00
2010-12-06 22:56:43 +00:00
Version . version_group = relation ( VersionGroup , back_populates = ' versions ' )
2009-08-27 05:30:07 +00:00
Version . generation = association_proxy ( ' version_group ' , ' generation ' )
2009-08-04 02:59:39 +00:00
2010-12-06 22:56:43 +00:00
VersionGroup . versions = relation ( Version , order_by = Version . id , back_populates = ' version_group ' )
2009-08-04 02:59:39 +00:00
VersionGroup . generation = relation ( Generation , backref = ' version_groups ' )
2010-01-25 04:39:33 +00:00
VersionGroup . version_group_regions = relation ( VersionGroupRegion , backref = ' version_group ' )
VersionGroup . regions = association_proxy ( ' version_group_regions ' , ' region ' )
2010-12-05 01:46:06 +00:00
VersionGroup . pokedex = relation ( Pokedex , back_populates = ' version_groups ' )