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 .
2011-03-12 12:36:08 +00:00
2011-03-30 03:20:08 +00:00
See ` pokedex . db . multilang ` for how localizable text columns work . The session
classes in that module can be used to change the default language .
2010-10-03 15:21:50 +00:00
"""
# XXX: Check if "gametext" is set correctly everywhere
2011-03-13 15:47:31 +00:00
import collections
2011-03-20 08:06:45 +00:00
from functools import partial
2011-03-13 22:25:10 +00:00
2011-03-13 02:06:16 +00:00
from sqlalchemy import Column , ForeignKey , MetaData , PrimaryKeyConstraint , Table , UniqueConstraint
2011-03-29 16:53:16 +00:00
from sqlalchemy . ext . declarative import declarative_base , DeclarativeMeta
2009-08-19 06:49:49 +00:00
from sqlalchemy . ext . associationproxy import association_proxy
2011-03-25 03:02:00 +00:00
from sqlalchemy . orm import backref , relation
from sqlalchemy . orm . session import Session
2011-03-20 08:06:45 +00:00
from sqlalchemy . orm . interfaces import AttributeExtension
2009-11-28 10:14:39 +00:00
from sqlalchemy . sql import and_
2011-03-13 15:47:31 +00:00
from sqlalchemy . schema import ColumnDefault
2009-02-05 08:05:42 +00:00
from sqlalchemy . types import *
2011-03-22 05:32:52 +00:00
from pokedex . db import markdown , multilang
2009-09-01 04:37:29 +00:00
2011-03-15 03:51:31 +00:00
class TableSuperclass ( object ) :
""" Superclass for declarative tables, to give them some generic niceties
like stringification .
"""
2011-03-12 15:59:01 +00:00
def __unicode__ ( self ) :
2011-03-15 03:51:31 +00:00
""" Be as useful as possible. Show the primary key, and an identifier
if we ' ve got one.
"""
typename = u ' . ' . join ( ( __name__ , type ( self ) . __name__ ) )
pk_constraint = self . __table__ . primary_key
if not pk_constraint :
return u " < %s object at %x > " % ( typename , id ( self ) )
pk = u ' , ' . join ( unicode ( getattr ( self , column . name ) )
for column in pk_constraint . columns )
2011-03-12 15:59:01 +00:00
try :
2011-03-15 03:51:31 +00:00
return u " < %s object ( %s ): %s > " % ( typename , pk , self . identifier )
2011-03-12 15:59:01 +00:00
except AttributeError :
2011-03-15 03:51:31 +00:00
return u " < %s object ( %s )> " % ( typename , pk )
2011-03-12 15:59:01 +00:00
def __str__ ( self ) :
2011-03-15 03:51:31 +00:00
return unicode ( self ) . encode ( ' utf8 ' )
2011-03-12 15:59:01 +00:00
2011-03-29 16:53:16 +00:00
mapped_classes = [ ]
class TableMetaclass ( DeclarativeMeta ) :
def __init__ ( cls , name , bases , attrs ) :
super ( TableMetaclass , cls ) . __init__ ( name , bases , attrs )
if hasattr ( cls , ' __tablename__ ' ) :
mapped_classes . append ( cls )
cls . translation_classes = [ ]
2011-03-15 03:51:31 +00:00
metadata = MetaData ( )
2011-03-29 16:53:16 +00:00
TableBase = declarative_base ( metadata = metadata , cls = TableSuperclass , metaclass = TableMetaclass )
2011-03-12 15:59:01 +00:00
2011-03-22 05:32:52 +00:00
### Need Language first, to create the partial() below
class Language ( TableBase ) :
2011-03-30 03:20:08 +00:00
u """ A language the Pokémon games have been translated into
2011-03-22 05:32:52 +00:00
"""
__tablename__ = ' languages '
__singlename__ = ' language '
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. " , format = ' identifier ' ) )
iso3166 = Column ( Unicode ( 2 ) , nullable = False ,
info = dict ( description = " The two-letter code of the language. Note that it is not unique. " , format = ' identifier ' ) )
identifier = Column ( Unicode ( 16 ) , nullable = False ,
info = dict ( description = " An identifier " , format = ' identifier ' ) )
official = Column ( Boolean , nullable = False , index = True ,
info = dict ( description = u " True iff games are produced in the language. " ) )
order = Column ( Integer , nullable = True ,
info = dict ( description = u " Order for sorting in foreign name lists. " ) )
create_translation_table = partial ( multilang . create_translation_table , language_class = Language )
2011-03-25 01:46:46 +00:00
create_translation_table ( ' language_names ' , Language , ' names ' ,
2011-03-24 05:17:02 +00:00
name = Column ( Unicode ( 16 ) , nullable = False , index = True ,
info = dict ( description = " The name " , format = ' plaintext ' , official = True ) ) ,
)
2011-03-12 15:59:01 +00:00
### The actual tables
2011-03-14 06:12:17 +00:00
class Ability ( TableBase ) :
2010-12-25 01:56:58 +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 ,
2010-12-25 01:56:58 +00:00
info = dict ( description = " This ability ' s unique ID; matches the games ' internal ID " ) )
2011-03-12 15:59:01 +00:00
identifier = Column ( Unicode ( 24 ) , nullable = False ,
info = dict ( description = " An identifier " , format = ' identifier ' ) )
2010-10-03 15:21:50 +00:00
generation_id = Column ( Integer , ForeignKey ( ' generations.id ' ) , nullable = False ,
2010-12-25 01:56:58 +00:00
info = dict ( description = " The ID of the generation this ability was introduced in " , detail = True ) )
2011-03-22 05:32:52 +00:00
2011-03-25 01:46:46 +00:00
create_translation_table ( ' ability_names ' , Ability , ' names ' ,
2011-03-30 01:39:37 +00:00
relation_lazy = ' joined ' ,
2011-03-22 05:32:52 +00:00
name = Column ( Unicode ( 24 ) , nullable = False , index = True ,
info = dict ( description = " The name " , format = ' plaintext ' , official = True ) ) ,
)
create_translation_table ( ' ability_prose ' , Ability , ' prose ' ,
effect = Column ( markdown . MarkdownColumn ( 5120 ) , nullable = False ,
info = dict ( description = " A detailed description of this ability ' s effect " , format = ' markdown ' ) ) ,
short_effect = Column ( markdown . MarkdownColumn ( 255 ) , nullable = False ,
info = dict ( description = " A 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 '
2011-03-12 15:59:01 +00:00
__singlename__ = ' ability_changelog '
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = " This change ' s unique ID " ) )
ability_id = Column ( Integer , ForeignKey ( ' abilities.id ' ) , nullable = False ,
2010-12-06 22:45:43 +00:00
info = dict ( description = " The ID of the ability that changed " ) )
2011-03-12 15:59:01 +00:00
changed_in_version_group_id = Column ( Integer , ForeignKey ( ' version_groups.id ' ) , nullable = False ,
2010-12-06 22:45:43 +00:00
info = dict ( description = " The ID of the version group in which the ability changed " ) )
2011-03-24 05:17:02 +00:00
create_translation_table ( ' ability_changelog_prose ' , AbilityChangelog , ' prose ' ,
effect = Column ( markdown . MarkdownColumn ( 255 ) , nullable = False ,
2010-12-06 22:45:43 +00:00
info = dict ( description = " A description of the old behavior " , format = ' markdown ' ) )
2011-03-24 05:17:02 +00:00
)
2010-12-06 22:45:43 +00:00
2011-03-24 05:39:21 +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 ,
2010-12-25 01:56:58 +00:00
info = dict ( description = " The ID of the ability " ) )
2010-10-03 15:21:50 +00:00
version_group_id = Column ( Integer , ForeignKey ( ' version_groups.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
2010-12-25 01:56:58 +00:00
info = dict ( description = " The ID of the version group this flavor text is taken from " ) )
2011-03-24 05:39:21 +00:00
language_id = Column ( Integer , ForeignKey ( ' languages.id ' ) , primary_key = True , nullable = False ,
info = dict ( description = " The language " ) )
2010-10-03 15:21:50 +00:00
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-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
2010-12-25 01:56:58 +00:00
For data common to all items , such as the name , see the corresponding item entry .
2010-10-03 15:21:50 +00:00
"""
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 ,
2010-12-25 01:56:58 +00:00
info = dict ( description = " This Berry ' s in-game number " ) )
2010-10-03 15:21:50 +00:00
item_id = Column ( Integer , ForeignKey ( ' items.id ' ) , nullable = False ,
2010-12-25 01:56:58 +00:00
info = dict ( description = " The ID of the item that represents this Berry " ) )
2010-10-03 15:21:50 +00:00
firmness_id = Column ( Integer , ForeignKey ( ' berry_firmness.id ' ) , nullable = False ,
2010-12-25 01:56:58 +00:00
info = dict ( description = " The ID of this Berry ' s firmness category " ) )
2010-10-03 15:21:50 +00:00
natural_gift_power = Column ( Integer , nullable = True ,
2010-12-25 01:56:58 +00:00
info = dict ( description = " Natural Gift ' s power when used with this Berry " ) )
2010-10-03 15:21:50 +00:00
natural_gift_type_id = Column ( Integer , ForeignKey ( ' types.id ' ) , nullable = True ,
2010-12-25 01:56:58 +00:00
info = dict ( description = " The ID of the Type that Natural Gift has when used with this Berry " ) )
2010-10-03 15:21:50 +00:00
size = Column ( Integer , nullable = False ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " The size of this Berry, in millimeters " ) )
2010-10-03 15:21:50 +00:00
max_harvest = Column ( Integer , nullable = False ,
2010-12-25 01:56:58 +00:00
info = dict ( description = " The maximum number of these berries that can grow on one tree in Generation IV " ) )
2010-10-03 15:21:50 +00:00
growth_time = Column ( Integer , nullable = False ,
2010-12-25 01:56:58 +00:00
info = dict ( description = " Time it takes the tree to grow one stage, in hours. Berry trees go through four of these growth stages before they can be picked. " ) )
2010-10-03 15:21:50 +00:00
soil_dryness = Column ( Integer , nullable = False ,
2010-12-25 01:56:58 +00:00
info = dict ( description = " The speed at which this Berry dries out the soil as it grows. A higher rate means the soil dries more quickly. " ) )
2010-10-03 15:21:50 +00:00
smoothness = Column ( Integer , nullable = False ,
2010-12-25 01:56:58 +00:00
info = dict ( description = " The smoothness of this Berry, used in making Pokéblocks or Poffins " ) )
2010-04-26 06:23:52 +00:00
2011-03-14 06:12:17 +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 '
2011-03-12 15:59:01 +00:00
__singlename__ = ' berry_firmness '
2010-10-03 15:21:50 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
2010-12-25 01:56:58 +00:00
info = dict ( description = " A unique ID for this firmness " ) )
2011-03-12 15:59:01 +00:00
identifier = Column ( Unicode ( 10 ) , nullable = False ,
info = dict ( description = " An identifier " , format = ' identifier ' ) )
2011-03-24 05:17:02 +00:00
2011-03-25 01:46:46 +00:00
create_translation_table ( ' berry_firmness_names ' , BerryFirmness , ' names ' ,
2011-03-30 01:39:37 +00:00
relation_lazy = ' joined ' ,
2011-03-24 05:17:02 +00:00
name = Column ( Unicode ( 10 ) , nullable = False , index = True ,
info = dict ( description = " The name " , format = ' plaintext ' , official = True ) ) ,
)
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 ,
2010-12-25 01:56:58 +00:00
info = dict ( description = " The ID of the berry " ) )
2010-10-03 15:21:50 +00:00
contest_type_id = Column ( Integer , ForeignKey ( ' contest_types.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
2010-12-25 01:56:58 +00:00
info = dict ( description = " The ID of the flavor " ) )
2010-10-03 15:21:50 +00:00
flavor = Column ( Integer , nullable = False ,
2010-12-25 01:56:58 +00:00
info = dict ( description = " The 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 ,
2010-12-25 01:56:58 +00:00
info = dict ( description = " The ID of the first move in the combo " ) )
2010-10-03 15:21:50 +00:00
second_move_id = Column ( Integer , ForeignKey ( ' moves.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
2010-12-25 01:56:58 +00:00
info = dict ( description = " The 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 '
2011-03-12 15:59:01 +00:00
__singlename__ = ' contest_effect '
2010-10-03 15:21:50 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
2010-12-25 01:56:58 +00:00
info = dict ( description = " A unique ID for this effect " ) )
2010-10-03 15:21:50 +00:00
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 " ) )
2011-03-24 05:17:02 +00:00
create_translation_table ( ' contest_effect_prose ' , ContestEffect , ' prose ' ,
flavor_text = Column ( Unicode ( 64 ) , nullable = False ,
info = dict ( description = " The in-game description of this effect " , official = True , format = ' gametext ' ) ) ,
2011-03-25 00:17:24 +00:00
effect = Column ( Unicode ( 255 ) , nullable = False ,
info = dict ( description = " A detailed description of the effect " , format = ' plaintext ' ) ) ,
2011-03-24 05:17:02 +00:00
)
2009-02-05 08:05:42 +00:00
2011-03-14 06:12:17 +00:00
class ContestType ( TableBase ) :
2010-12-25 01:56:58 +00:00
u """ A Contest type, such as " cool " or " smart " , and their associated Berry flavors and Pokéblock colors.
2010-10-03 19:21:39 +00:00
"""
2010-04-26 06:23:52 +00:00
__tablename__ = ' contest_types '
2011-03-12 15:59:01 +00:00
__singlename__ = ' contest_type '
2010-10-03 15:21:50 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
2010-12-25 01:56:58 +00:00
info = dict ( description = " A unique ID for this Contest type " ) )
2011-03-12 15:59:01 +00:00
identifier = Column ( Unicode ( 6 ) , nullable = False ,
info = dict ( description = " An identifier " , format = ' identifier ' ) )
2011-03-24 05:17:02 +00:00
2011-03-25 01:46:46 +00:00
create_translation_table ( ' contest_type_names ' , ContestType , ' names ' ,
2011-03-30 01:39:37 +00:00
relation_lazy = ' joined ' ,
2011-03-25 00:17:24 +00:00
name = Column ( Unicode ( 6 ) , nullable = False , index = True ,
info = dict ( description = " The name " , format = ' plaintext ' , official = True ) ) ,
2011-03-24 05:17:02 +00:00
flavor = Column ( Unicode ( 6 ) , nullable = False ,
info = dict ( description = " The name of the corresponding Berry flavor " , official = True , format = ' plaintext ' ) ) ,
color = Column ( Unicode ( 6 ) , nullable = False ,
info = dict ( description = u " The name of the corresponding Pokéblock color " , official = True , format = ' plaintext ' ) ) ,
)
2011-03-12 15:59:01 +00:00
2011-03-14 06:12:17 +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 '
2011-03-12 15:59:01 +00:00
__singlename__ = ' egg_group '
2010-10-03 15:21:50 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
2010-12-25 01:56:58 +00:00
info = dict ( description = " A unique ID for this group " ) )
2011-03-12 15:59:01 +00:00
identifier = Column ( Unicode ( 16 ) , nullable = False ,
info = dict ( description = u " An identifier. " , format = ' identifier ' ) )
2011-03-24 05:17:02 +00:00
create_translation_table ( ' egg_group_prose ' , EggGroup , ' names ' ,
2011-03-30 01:39:37 +00:00
relation_lazy = ' joined ' ,
2011-03-24 05:17:02 +00:00
name = Column ( Unicode ( 16 ) , nullable = False , index = True ,
2011-03-29 02:12:30 +00:00
info = dict ( description = " The name " , format = ' plaintext ' , official = True ) ) ,
2011-03-24 05:17:02 +00:00
)
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 ,
2010-12-25 01:56:58 +00:00
info = dict ( description = " A unique ID for this encounter " ) )
2010-10-03 15:21:50 +00:00
version_id = Column ( Integer , ForeignKey ( ' versions.id ' ) , nullable = False , autoincrement = False ,
2010-12-25 01:56:58 +00:00
info = dict ( description = " The ID of the version this applies to " ) )
2010-10-03 15:21:50 +00:00
location_area_id = Column ( Integer , ForeignKey ( ' location_areas.id ' ) , nullable = False , autoincrement = False ,
2010-12-25 01:56:58 +00:00
info = dict ( description = " The ID of the location of this encounter " ) )
2010-10-03 15:21:50 +00:00
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
2011-03-14 06:12:17 +00:00
class EncounterCondition ( TableBase ) :
2010-12-25 01:56:58 +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 '
2011-03-12 15:59:01 +00:00
__singlename__ = ' encounter_condition '
2010-10-03 15:21:50 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
2010-12-25 01:56:58 +00:00
info = dict ( description = " A unique ID for this condition " ) )
2011-03-12 15:59:01 +00:00
identifier = Column ( Unicode ( 64 ) , nullable = False ,
info = dict ( description = " An identifier " , format = ' identifier ' ) )
2011-03-24 05:17:02 +00:00
create_translation_table ( ' encounter_condition_prose ' , EncounterCondition , ' prose ' ,
name = Column ( Unicode ( 64 ) , nullable = False , index = True ,
info = dict ( description = " The name " , format = ' plaintext ' , official = False ) ) ,
)
2009-05-01 13:20:18 +00:00
2011-03-14 06:12:17 +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 '
2011-03-12 15:59:01 +00:00
__singlename__ = ' encounter_condition_value '
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 " ) )
2011-03-12 15:59:01 +00:00
identifier = Column ( Unicode ( 64 ) , nullable = False ,
info = dict ( description = " An identifier " , format = ' identifier ' ) )
2010-10-03 15:21:50 +00:00
is_default = Column ( Boolean , nullable = False ,
2010-12-25 01:56:58 +00:00
info = dict ( description = ' Set if this value is the default state for the condition ' ) )
2011-03-24 05:17:02 +00:00
create_translation_table ( ' encounter_condition_value_prose ' , EncounterConditionValue , ' prose ' ,
name = Column ( Unicode ( 64 ) , nullable = False , index = True ,
info = dict ( description = " The name " , format = ' plaintext ' , official = False ) ) ,
)
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 ,
2010-12-25 01:56:58 +00:00
info = dict ( description = " The ID of the encounter " ) )
2010-10-03 15:21:50 +00:00
encounter_condition_value_id = Column ( Integer , ForeignKey ( ' encounter_condition_values.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
2010-12-25 01:56:58 +00:00
info = dict ( description = " The ID of the encounter condition value " ) )
2009-12-09 22:35:29 +00:00
2011-03-14 06:12:17 +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 '
2011-03-12 15:59:01 +00:00
__singlename__ = __tablename__
2010-10-03 15:21:50 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
2010-12-25 01:56:58 +00:00
info = dict ( description = " A unique ID for the terrain " ) )
2011-03-12 15:59:01 +00:00
identifier = Column ( Unicode ( 64 ) , nullable = False ,
info = dict ( description = " An identifier " , format = ' identifier ' ) )
2011-03-24 05:17:02 +00:00
create_translation_table ( ' encounter_terrain_prose ' , EncounterTerrain , ' prose ' ,
name = Column ( Unicode ( 64 ) , nullable = False , index = True ,
info = dict ( description = " The name " , format = ' plaintext ' , official = False ) ) ,
)
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 ,
2010-12-25 01:56:58 +00:00
info = dict ( description = " A unique ID for this slot " ) )
2010-10-03 15:21:50 +00:00
version_group_id = Column ( Integer , ForeignKey ( ' version_groups.id ' ) , nullable = False , autoincrement = False ,
2010-12-25 01:56:58 +00:00
info = dict ( description = " The ID of the version group this slot is in " ) )
2010-10-03 15:21:50 +00:00
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 ,
2010-12-25 01:56:58 +00:00
info = dict ( description = " This slot ' s order for the location and terrain " ) )
2010-10-03 15:21:50 +00:00
rarity = Column ( Integer , nullable = False ,
2010-12-25 01:56:58 +00:00
info = dict ( description = " The chance of the encounter as a percentage " ) )
2009-05-01 13:20:18 +00:00
2009-02-05 08:05:42 +00:00
class EvolutionChain ( TableBase ) :
2010-12-25 01:56:58 +00:00
u """ A family of Pokémon that are linked by evolution
2010-10-03 19:21:39 +00:00
"""
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
2011-03-14 06:12:17 +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 '
2011-03-12 15:59:01 +00:00
__singlename__ = ' evolution_trigger '
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 ,
2011-03-12 15:59:01 +00:00
info = dict ( description = " An identifier " , format = ' identifier ' ) )
2011-03-24 05:17:02 +00:00
create_translation_table ( ' evolution_trigger_prose ' , EvolutionTrigger , ' prose ' ,
name = Column ( Unicode ( 16 ) , nullable = False , index = True ,
info = dict ( description = " The name " , format = ' plaintext ' , official = False ) ) ,
)
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
2011-03-14 06:12:17 +00:00
class Generation ( TableBase ) :
2010-12-25 01:56:58 +00:00
u """ A Generation of the Pokémon franchise
2010-10-03 19:21:39 +00:00
"""
2009-02-05 08:05:42 +00:00
__tablename__ = ' generations '
2011-03-12 15:59:01 +00:00
__singlename__ = ' generation '
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 ' ) ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " ID of the Pokédex this generation ' s main games use by default " ) )
2011-03-12 15:59:01 +00:00
identifier = Column ( Unicode ( 16 ) , nullable = False ,
info = dict ( description = u ' An identifier ' , format = ' identifier ' ) )
2011-03-24 05:17:02 +00:00
2011-03-25 01:46:46 +00:00
create_translation_table ( ' generation_names ' , Generation , ' names ' ,
2011-03-30 01:39:37 +00:00
relation_lazy = ' joined ' ,
2011-03-24 05:17:02 +00:00
name = Column ( Unicode ( 16 ) , nullable = False , index = True ,
info = dict ( description = " The name " , format = ' plaintext ' , official = True ) ) ,
)
2009-02-05 08:05:42 +00:00
2011-03-14 06:12:17 +00:00
class GrowthRate ( TableBase ) :
2010-12-25 01:56:58 +00:00
u """ Growth rate of a Pokémon, i.e. the EXP → level function.
2010-10-03 19:21:39 +00:00
"""
2009-02-05 08:05:42 +00:00
__tablename__ = ' growth_rates '
2011-03-12 15:59:01 +00:00
__singlename__ = ' growth_rate '
2010-10-03 15:21:50 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = " A numeric ID " ) )
2011-03-12 15:59:01 +00:00
identifier = Column ( Unicode ( 20 ) , nullable = False ,
info = dict ( description = " An identifier " , format = ' identifier ' ) )
2010-10-03 15:21:50 +00:00
formula = Column ( Unicode ( 500 ) , nullable = False ,
info = dict ( description = " The formula " , format = ' latex ' ) )
2011-03-24 05:17:02 +00:00
create_translation_table ( ' growth_rate_prose ' , GrowthRate , ' prose ' ,
name = Column ( Unicode ( 20 ) , nullable = False , index = True ,
info = dict ( description = " The name " , format = ' plaintext ' , official = False ) ) ,
)
2009-02-05 08:05:42 +00:00
2011-03-14 06:12:17 +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 " ) )
2011-03-12 15:59:01 +00:00
identifier = Column ( Unicode ( 20 ) , nullable = False ,
info = dict ( description = " An identifier " , format = ' identifier ' ) )
2010-10-03 15:21:50 +00:00
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-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
2011-03-25 01:46:46 +00:00
create_translation_table ( ' item_names ' , Item , ' names ' ,
2011-03-30 01:39:37 +00:00
relation_lazy = ' joined ' ,
2011-03-24 05:17:02 +00:00
name = Column ( Unicode ( 20 ) , nullable = False , index = True ,
info = dict ( description = " The name " , format = ' plaintext ' , official = True ) ) ,
)
create_translation_table ( ' item_prose ' , Item , ' prose ' ,
short_effect = Column ( Unicode ( 256 ) , nullable = False ,
info = dict ( description = " A short summary of the effect " , format = ' plaintext ' ) ) ,
effect = Column ( markdown . MarkdownColumn ( 5120 ) , nullable = False ,
info = dict ( description = u " Detailed description of the item ' s effect. " , format = ' markdown ' ) ) ,
)
2011-03-14 06:12:17 +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 '
2011-03-12 15:59:01 +00:00
__singlename__ = ' item_category '
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 " ) )
2011-03-12 15:59:01 +00:00
identifier = Column ( Unicode ( 16 ) , nullable = False ,
info = dict ( description = " An identifier " , format = ' identifier ' ) )
2011-03-24 05:17:02 +00:00
create_translation_table ( ' item_category_prose ' , ItemCategory , ' prose ' ,
2011-03-30 01:39:37 +00:00
relation_lazy = ' joined ' ,
2011-03-24 05:17:02 +00:00
name = Column ( Unicode ( 16 ) , nullable = False , index = True ,
info = dict ( description = " The name " , format = ' plaintext ' , official = False ) ) ,
)
2010-04-26 06:23:52 +00:00
2011-03-14 06:12:17 +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 '
2011-03-12 15:59:01 +00:00
__singlename__ = ' item_flag '
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 ' ) )
2011-03-24 05:17:02 +00:00
create_translation_table ( ' item_flag_prose ' , ItemFlag , ' prose ' ,
name = Column ( Unicode ( 24 ) , nullable = False , index = True ,
info = dict ( description = " The name " , format = ' plaintext ' , official = False ) ) ,
description = Column ( Unicode ( 64 ) , nullable = False ,
info = dict ( description = " Short 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
2011-03-24 05:39:21 +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 '
2011-03-12 15:59:01 +00:00
__singlename__ = ' 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 " ) )
2011-03-24 05:39:21 +00:00
language_id = Column ( Integer , ForeignKey ( ' languages.id ' ) , primary_key = True , nullable = False ,
info = dict ( description = " The language " ) )
2010-10-03 15:21:50 +00:00
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 '
2011-03-12 15:59:01 +00:00
__singlename__ = ' item_fling_effect '
2010-10-03 15:21:50 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = " A numeric ID " ) )
2011-03-24 05:17:02 +00:00
create_translation_table ( ' item_fling_effect_prose ' , ItemFlingEffect , ' prose ' ,
effect = Column ( Unicode ( 255 ) , nullable = False ,
info = dict ( description = " Description of the effect " , format = ' plaintext ' ) ) ,
)
2010-04-26 06:23:52 +00:00
2011-03-25 02:37:12 +00:00
class ItemGameIndex ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ The internal ID number a game uses for an item
"""
2011-03-25 02:37:12 +00:00
__tablename__ = ' item_game_indices '
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 " ) )
2011-03-25 02:37:12 +00:00
game_index = Column ( Integer , nullable = False ,
2010-10-03 15:21:50 +00:00
info = dict ( description = " Internal ID of the item in the generation " ) )
2010-05-02 08:33:44 +00:00
2011-03-14 06:12:17 +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 '
2011-03-12 15:59:01 +00:00
__singlename__ = ' item_pocket '
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 ' ) )
2011-03-24 05:17:02 +00:00
2011-03-25 01:46:46 +00:00
create_translation_table ( ' item_pocket_names ' , ItemPocket , ' names ' ,
2011-03-30 01:39:37 +00:00
relation_lazy = ' joined ' ,
2011-03-24 05:17:02 +00:00
name = Column ( Unicode ( 16 ) , nullable = False , index = True ,
info = dict ( description = " The name " , format = ' plaintext ' , official = True ) ) ,
)
2009-07-18 06:33:36 +00:00
2011-03-14 06:12:17 +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 " ) )
2011-03-12 15:59:01 +00:00
identifier = Column ( Unicode ( 64 ) , nullable = False ,
info = dict ( description = " An identifier " , format = ' identifier ' ) )
2011-03-24 05:17:02 +00:00
2011-03-25 01:46:46 +00:00
create_translation_table ( ' location_names ' , Location , ' names ' ,
2011-03-30 01:39:37 +00:00
relation_lazy = ' joined ' ,
2011-03-24 05:17:02 +00:00
name = Column ( Unicode ( 64 ) , nullable = False , index = True ,
info = dict ( description = " The name " , format = ' plaintext ' , official = True ) ) ,
)
2009-05-01 13:20:18 +00:00
2011-03-14 06:12:17 +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 '
2011-03-12 15:59:01 +00:00
__singlename__ = ' location_area '
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 " ) )
2011-03-25 02:37:12 +00:00
game_index = Column ( Integer , nullable = False ,
2010-10-03 19:21:39 +00:00
info = dict ( description = " ID the games ude for this area " ) )
2011-03-12 15:59:01 +00:00
identifier = Column ( Unicode ( 64 ) , nullable = True ,
info = dict ( description = " An identifier " , format = ' identifier ' ) )
2011-03-24 05:17:02 +00:00
create_translation_table ( ' location_area_prose ' , LocationArea , ' prose ' ,
2011-03-30 01:39:37 +00:00
relation_lazy = ' joined ' ,
2011-03-24 05:17:02 +00:00
name = Column ( Unicode ( 64 ) , nullable = False , index = True ,
info = dict ( description = " The name " , format = ' plaintext ' , official = False ) ) ,
)
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
2011-03-25 02:37:12 +00:00
class LocationGameIndex ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ IDs the games use internally for locations
"""
2011-03-25 02:37:12 +00:00
__tablename__ = ' location_game_indices '
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 " ) )
2011-03-25 02:37:12 +00:00
game_index = Column ( Integer , nullable = False ,
2010-10-03 19:21:39 +00:00
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-12-25 01:56:58 +00:00
u """ A TM or HM; numbered item that can teach a move to a Pokémon
2010-10-03 19:21:39 +00:00
"""
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
2011-03-14 06:12:17 +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 '
2011-03-12 15:59:01 +00:00
__singlename__ = ' move_battle_style '
2010-10-03 19:21:39 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = " A numeric ID " ) )
2011-03-12 15:59:01 +00:00
identifier = Column ( Unicode ( 8 ) , nullable = False ,
info = dict ( description = " An identifier " , format = ' identifier ' ) )
2011-03-24 05:17:02 +00:00
create_translation_table ( ' move_battle_style_prose ' , MoveBattleStyle , ' prose ' ,
2011-03-30 01:39:37 +00:00
relation_lazy = ' joined ' ,
2011-03-24 05:17:02 +00:00
name = Column ( Unicode ( 8 ) , nullable = False , index = True ,
info = dict ( description = " The name " , format = ' plaintext ' , official = False ) ) ,
)
2010-04-27 06:26:37 +00:00
2011-03-14 06:12:17 +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 '
2011-03-12 15:59:01 +00:00
__singlename__ = ' move_effect_category '
2010-10-03 19:21:39 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = " A numeric ID " ) )
2011-03-12 15:59:01 +00:00
identifier = Column ( Unicode ( 64 ) , nullable = False ,
info = dict ( description = " An identifier " , format = ' identifier ' ) )
2010-10-03 19:21:39 +00:00
can_affect_user = Column ( Boolean , nullable = False ,
info = dict ( description = " Set if the user can be affected " ) )
2011-03-24 05:17:02 +00:00
create_translation_table ( ' move_effect_category_prose ' , MoveEffectCategory , ' prose ' ,
name = Column ( Unicode ( 64 ) , nullable = False , index = True ,
info = dict ( description = " The name " , format = ' plaintext ' , official = False ) ) ,
)
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
2011-03-14 06:12:17 +00:00
class MoveDamageClass ( TableBase ) :
2010-12-25 01:56:58 +00:00
u """ Any of the damage classes moves can have, i.e. physical, special, or non-damaging.
2010-10-03 19:21:39 +00:00
"""
2009-08-27 05:30:07 +00:00
__tablename__ = ' move_damage_classes '
2011-03-12 15:59:01 +00:00
__singlename__ = ' move_damage_class '
2010-10-03 19:21:39 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = " A numeric ID " ) )
2011-03-12 15:59:01 +00:00
identifier = Column ( Unicode ( 16 ) , nullable = False ,
info = dict ( description = " An identifier " , format = ' identifier ' ) )
2011-03-24 05:17:02 +00:00
create_translation_table ( ' move_damage_class_prose ' , MoveDamageClass , ' prose ' ,
2011-03-30 01:39:37 +00:00
relation_lazy = ' joined ' ,
2011-03-24 05:17:02 +00:00
name = Column ( Unicode ( 16 ) , nullable = False , index = True ,
info = dict ( description = " The name " , format = ' plaintext ' , official = False ) ) ,
description = Column ( Unicode ( 64 ) , nullable = False ,
info = dict ( description = " A 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 '
2011-03-12 15:59:01 +00:00
__singlename__ = ' move_effect '
2010-10-03 19:21:39 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = " A numeric ID " ) )
2011-03-24 05:17:02 +00:00
create_translation_table ( ' move_effect_prose ' , MoveEffect , ' prose ' ,
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 '
2011-03-12 15:59:01 +00:00
__singlename__ = ' move_effect_changelog '
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = " A numeric ID " ) )
2011-03-12 20:43:29 +00:00
effect_id = Column ( Integer , ForeignKey ( ' move_effects.id ' ) , nullable = False ,
2010-12-08 01:23:14 +00:00
info = dict ( description = " The ID of the effect that changed " ) )
2011-03-12 20:43:29 +00:00
changed_in_version_group_id = Column ( Integer , ForeignKey ( ' version_groups.id ' ) , nullable = False ,
2010-12-08 01:23:14 +00:00
info = dict ( description = " The ID of the version group in which the effect changed " ) )
2011-03-13 02:06:16 +00:00
__table_args__ = (
UniqueConstraint ( effect_id , changed_in_version_group_id ) ,
{ } ,
)
2011-03-24 05:17:02 +00:00
create_translation_table ( ' move_effect_changelog_prose ' , MoveEffectChangelog , ' prose ' ,
effect = Column ( markdown . MarkdownColumn ( 512 ) , 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
2011-03-14 06:12:17 +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 '
2011-03-12 15:59:01 +00:00
__singlename__ = ' move_flag_type '
2010-10-03 19:21:39 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = " A numeric ID " ) )
2011-03-12 15:59:01 +00:00
identifier = Column ( Unicode ( 32 ) , nullable = False ,
2010-10-03 19:21:39 +00:00
info = dict ( description = " A short identifier for the flag " , format = ' identifier ' ) )
2011-03-24 05:17:02 +00:00
create_translation_table ( ' move_flag_type_prose ' , MoveFlagType , ' prose ' ,
2011-03-30 01:39:37 +00:00
relation_lazy = ' joined ' ,
2011-03-24 05:17:02 +00:00
name = Column ( Unicode ( 32 ) , nullable = False , index = True ,
info = dict ( description = " The name " , format = ' plaintext ' , official = False ) ) ,
description = Column ( markdown . MarkdownColumn ( 128 ) , nullable = False ,
info = dict ( description = " A short description of the flag " , format = ' markdown ' ) ) ,
)
2009-09-14 15:29:05 +00:00
2011-03-24 05:39:21 +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 " ) )
2011-03-24 05:39:21 +00:00
language_id = Column ( Integer , ForeignKey ( ' languages.id ' ) , primary_key = True , nullable = False ,
info = dict ( description = " The language " ) )
2010-10-03 19:21:39 +00:00
flavor_text = Column ( Unicode ( 255 ) , nullable = False ,
2011-03-12 15:59:01 +00:00
info = dict ( description = " The flavor text " , official = True , format = ' gametext ' ) )
2009-09-15 05:18:01 +00:00
2011-03-06 08:00:40 +00:00
class MoveMeta ( TableBase ) :
u """ Metadata for move effects, sorta-kinda ripped straight from the game """
__tablename__ = ' move_meta '
2011-03-12 14:42:41 +00:00
move_id = Column ( Integer , ForeignKey ( ' moves.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = " A numeric ID " ) )
meta_category_id = Column ( Integer , ForeignKey ( ' move_meta_categories.id ' ) , nullable = False ,
info = dict ( description = " ID of the move category " ) )
meta_ailment_id = Column ( Integer , ForeignKey ( ' move_meta_ailments.id ' ) , nullable = False ,
info = dict ( description = " ID of the caused ailment " ) )
min_hits = Column ( Integer , nullable = True , index = True ,
info = dict ( description = " Minimum number of hits per use " ) )
max_hits = Column ( Integer , nullable = True , index = True ,
info = dict ( description = " Maximum number of hits per use " ) )
min_turns = Column ( Integer , nullable = True , index = True ,
info = dict ( description = " Minimum number of turns the user is forced to use the move " ) )
max_turns = Column ( Integer , nullable = True , index = True ,
info = dict ( description = " Maximum number of turns the user is forced to use the move " ) )
recoil = Column ( Integer , nullable = False , index = True ,
info = dict ( description = " Recoil damage, in percent of damage done " ) )
healing = Column ( Integer , nullable = False , index = True ,
info = dict ( description = " Healing, in percent of user ' s max HP " ) )
crit_rate = Column ( Integer , nullable = False , index = True ,
info = dict ( description = " Critical hit rate bonus " ) )
ailment_chance = Column ( Integer , nullable = False , index = True ,
info = dict ( description = " Chance to cause an ailment, in percent " ) )
flinch_chance = Column ( Integer , nullable = False , index = True ,
info = dict ( description = " Chance to cause flinching, in percent " ) )
stat_chance = Column ( Integer , nullable = False , index = True ,
info = dict ( description = " Chance to cause a stat change, in percent " ) )
2011-03-06 08:00:40 +00:00
2011-03-14 06:12:17 +00:00
class MoveMetaAilment ( TableBase ) :
2011-03-06 08:00:40 +00:00
u """ Common status ailments moves can inflict on a single Pokémon, including
major ailments like paralysis and minor ailments like trapping .
"""
__tablename__ = ' move_meta_ailments '
2011-03-12 15:59:01 +00:00
__singlename__ = ' move_meta_ailment '
2011-03-31 16:22:16 +00:00
id = Column ( Integer , primary_key = True , nullable = False , autoincrement = False ,
2011-03-12 14:42:41 +00:00
info = dict ( description = " A numeric ID " ) )
identifier = Column ( Unicode ( 24 ) , nullable = False ,
info = dict ( description = " An identifier " , format = ' identifier ' ) )
2011-03-24 05:17:02 +00:00
2011-03-25 01:46:46 +00:00
create_translation_table ( ' move_meta_ailment_names ' , MoveMetaAilment , ' names ' ,
2011-03-30 01:39:37 +00:00
relation_lazy = ' joined ' ,
2011-03-24 05:17:02 +00:00
name = Column ( Unicode ( 24 ) , nullable = False , index = True ,
info = dict ( description = " The name " , format = ' plaintext ' , official = True ) ) ,
)
2011-03-06 08:00:40 +00:00
class MoveMetaCategory ( TableBase ) :
u """ Very general categories that loosely group move effects. """
__tablename__ = ' move_meta_categories '
2011-03-12 15:59:01 +00:00
__singlename__ = ' move_meta_category '
2011-03-12 14:42:41 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = " A numeric ID " ) )
2011-03-24 05:17:02 +00:00
create_translation_table ( ' move_meta_category_prose ' , MoveMetaCategory , ' prose ' ,
2011-03-30 01:39:37 +00:00
relation_lazy = ' joined ' ,
2011-03-24 05:17:02 +00:00
description = Column ( Unicode ( 64 ) , nullable = False ,
2011-03-29 17:44:43 +00:00
info = dict ( description = " A description of the category " , format = " plaintext " , official = False ) ) ,
2011-03-24 05:17:02 +00:00
)
2011-03-06 08:00:40 +00:00
class MoveMetaStatChange ( TableBase ) :
u """ Stat changes moves (may) make. """
__tablename__ = ' move_meta_stat_changes '
2011-03-12 14:42:41 +00:00
move_id = Column ( Integer , ForeignKey ( ' moves.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = " ID of the move " ) )
stat_id = Column ( Integer , ForeignKey ( ' stats.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = " ID of the stat " ) )
change = Column ( Integer , nullable = False , index = True ,
info = dict ( description = " Amount of increase/decrease, in stages " ) )
2011-03-06 08:00:40 +00:00
2011-03-14 06:12:17 +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 '
2011-03-12 15:59:01 +00:00
__singlename__ = ' move_target '
2010-10-03 19:21:39 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = " A numeric ID " ) )
2011-03-12 15:59:01 +00:00
identifier = Column ( Unicode ( 32 ) , nullable = False ,
info = dict ( description = " An identifier " , format = ' identifier ' ) )
2011-03-24 05:17:02 +00:00
create_translation_table ( ' move_target_prose ' , MoveTarget , ' prose ' ,
2011-03-30 01:39:37 +00:00
relation_lazy = ' joined ' ,
2011-03-24 05:17:02 +00:00
name = Column ( Unicode ( 32 ) , nullable = False , index = True ,
info = dict ( description = " The name " , format = ' plaintext ' , official = False ) ) ,
description = Column ( Unicode ( 128 ) , nullable = False ,
info = dict ( description = " A description " , format = ' plaintext ' ) ) ,
)
2009-02-05 08:05:42 +00:00
2011-03-14 06:12:17 +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 " ) )
2011-03-12 15:59:01 +00:00
identifier = Column ( Unicode ( 24 ) , nullable = False ,
info = dict ( description = " An identifier " , format = ' identifier ' ) )
2010-10-03 19:21:39 +00:00
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 " ) )
2011-02-11 02:00:53 +00:00
pp = Column ( SmallInteger , nullable = True ,
info = dict ( description = " Base PP (Power Points) of the move, nullable if not applicable (e.g. Struggle and Shadow moves). " ) )
2010-10-03 19:21:39 +00:00
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 " ) )
2011-03-22 05:32:52 +00:00
2011-03-25 01:46:46 +00:00
create_translation_table ( ' move_names ' , Move , ' names ' ,
2011-03-30 01:39:37 +00:00
relation_lazy = ' joined ' ,
2011-03-22 05:32:52 +00:00
name = Column ( Unicode ( 24 ) , nullable = False , index = True ,
2011-03-14 06:12:17 +00:00
info = dict ( description = " The name " , format = ' plaintext ' , official = True ) )
2011-03-22 05:32:52 +00:00
)
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 '
2011-03-12 15:59:01 +00:00
__singlename__ = ' move_changelog '
2010-11-27 09:25:38 +00:00
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
2011-03-14 06:12:17 +00:00
class Nature ( TableBase ) :
2010-12-25 01:56:58 +00:00
u """ A nature a Pokémon can have, such as Calm or Brave
2010-10-03 19:21:39 +00:00
"""
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 " ) )
2011-03-12 15:59:01 +00:00
identifier = Column ( Unicode ( 8 ) , nullable = False ,
info = dict ( description = " An identifier " , format = ' identifier ' ) )
2010-10-03 19:21:39 +00:00
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
2011-03-25 01:46:46 +00:00
create_translation_table ( ' nature_names ' , Nature , ' names ' ,
2011-03-30 01:39:37 +00:00
relation_lazy = ' joined ' ,
2011-03-24 05:17:02 +00:00
name = Column ( Unicode ( 8 ) , nullable = False , index = True ,
info = dict ( description = " The name " , format = ' plaintext ' , official = True ) ) ,
)
2010-04-27 06:26:37 +00:00
class NatureBattleStylePreference ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ Battle Palace move preference
2010-12-25 01:56:58 +00:00
Specifies how likely a Pokémon with a specific Nature is to use a move of
2010-10-03 19:21:39 +00:00
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 ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " ID of the Pokémon ' s nature " ) )
2010-10-03 19:21:39 +00:00
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
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
2011-03-14 06:12:17 +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 '
2011-03-12 15:59:01 +00:00
__singlename__ = ' pokeathlon_stat '
2010-10-03 19:21:39 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = " A numeric ID " ) )
2011-03-12 15:59:01 +00:00
identifier = Column ( Unicode ( 8 ) , nullable = False ,
info = dict ( description = " An identifier " , format = ' identifier ' ) )
2011-03-24 05:17:02 +00:00
2011-03-25 01:46:46 +00:00
create_translation_table ( ' pokeathlon_stat_names ' , PokeathlonStat , ' names ' ,
2011-03-24 05:17:02 +00:00
name = Column ( Unicode ( 8 ) , nullable = False , index = True ,
info = dict ( description = " The name " , format = ' plaintext ' , official = True ) ) ,
)
2010-03-23 05:29:28 +00:00
2011-03-14 06:12:17 +00:00
class Pokedex ( TableBase ) :
2010-12-25 01:56:58 +00:00
u """ A collection of Pokémon species ordered in a particular way
2010-10-03 19:21:39 +00:00
"""
2010-02-17 07:16:59 +00:00
__tablename__ = ' pokedexes '
2011-03-12 15:59:01 +00:00
__singlename__ = ' pokedex '
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 ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " ID of the region this Pokédex is used in, or None if it ' s global " ) )
2011-03-12 15:59:01 +00:00
identifier = Column ( Unicode ( 16 ) , nullable = False ,
info = dict ( description = u " An identifier " , format = ' identifier ' ) )
2011-03-24 05:17:02 +00:00
create_translation_table ( ' pokedex_prose ' , Pokedex , ' prose ' ,
2011-03-30 01:39:37 +00:00
relation_lazy = ' joined ' ,
2011-03-24 05:17:02 +00:00
name = Column ( Unicode ( 16 ) , nullable = False , index = True ,
info = dict ( description = " The name " , format = ' plaintext ' , official = False ) ) ,
description = Column ( Unicode ( 512 ) , nullable = False ,
info = dict ( description = u " A longer description of the Pokédex " , format = ' plaintext ' ) ) ,
)
2010-02-17 07:16:59 +00:00
2011-03-14 06:12:17 +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 " ) )
2011-03-12 15:59:01 +00:00
identifier = Column ( Unicode ( 20 ) , nullable = False ,
info = dict ( description = u " An identifier " , format = ' identifier ' ) )
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 ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " The height of the Pokémon, in decimeters (tenths of a meter) " ) )
2010-10-03 19:21:39 +00:00
weight = Column ( Integer , nullable = False ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " The weight of the Pokémon, in tenths of a kilogram (decigrams) " ) )
2010-10-03 19:21:39 +00:00
color_id = Column ( Integer , ForeignKey ( ' pokemon_colors.id ' ) , nullable = False ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " ID of this Pokémon ' s Pokédex color, as used for a gimmick search function in the games. " ) )
2011-04-01 22:59:14 +00:00
pokemon_shape_id = Column ( Integer , ForeignKey ( ' pokemon_shapes.id ' ) , nullable = False ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " ID of this Pokémon ' s body shape, as used for a gimmick search function in the games. " ) )
2010-10-03 19:21:39 +00:00
habitat_id = Column ( Integer , ForeignKey ( ' pokemon_habitats.id ' ) , nullable = True ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " ID of this Pokémon ' s habitat, as used for a gimmick search function in the games. " ) )
2010-10-03 19:21:39 +00:00
gender_rate = Column ( Integer , nullable = False ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " The chance of this Pokémon being female, in eighths; or -1 for genderless " ) )
2010-10-03 19:21:39 +00:00
capture_rate = Column ( Integer , nullable = False ,
info = dict ( description = u " The base capture rate; up to 255 " ) )
base_experience = Column ( Integer , nullable = False ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " The base EXP gained when defeating this Pokémon " ) ) # XXX: Is this correct?
2010-10-03 19:21:39 +00:00
base_happiness = Column ( Integer , nullable = False ,
info = dict ( description = u " The tameness when caught by a normal ball " ) )
is_baby = Column ( Boolean , nullable = False ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " True iff the Pokémon is a baby, i.e. a lowest-stage Pokémon that cannot breed but whose evolved form can. " ) )
2010-10-03 19:21:39 +00:00
hatch_counter = Column ( Integer , nullable = False ,
2010-12-25 01:56:58 +00:00
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 " ) )
2011-01-24 20:47:47 +00:00
has_gender_differences = Column ( Boolean , nullable = False ,
info = dict ( description = u " Set iff the species exhibits enough sexual dimorphism to have separate sets of sprites in Gen IV and beyond. " ) )
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
2011-01-24 20:33:18 +00:00
@property
def form ( self ) :
u """ Returns the Pokémon ' s form, using its default form as fallback. """
return self . unique_form or self . default_form
2009-06-16 03:48:27 +00:00
@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 :
2011-03-12 15:59:01 +00:00
return u ' {0} {1} ' . format ( self . form_name , self . name )
2010-11-29 23:51:50 +00:00
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
2011-03-25 01:46:46 +00:00
create_translation_table ( ' pokemon_names ' , Pokemon , ' names ' ,
2011-03-30 01:39:37 +00:00
relation_lazy = ' joined ' ,
2011-03-22 05:32:52 +00:00
name = Column ( Unicode ( 20 ) , nullable = False , index = True ,
info = dict ( description = " The name " , format = ' plaintext ' , official = True ) ) ,
species = Column ( Unicode ( 16 ) , nullable = False ,
info = dict ( description = u ' The short flavor text, such as " Seed " or " Lizard " ; usually affixed with the word " Pokémon " ' ,
official = True , format = ' plaintext ' ) ) ,
)
2009-02-05 08:05:42 +00:00
class PokemonAbility ( TableBase ) :
2010-12-25 01:56:58 +00:00
u """ Maps an ability to a Pokémon that can have it
2010-10-03 19:21:39 +00:00
"""
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 ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " ID of the Pokémon " ) )
2010-10-03 19:21:39 +00:00
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
2011-03-14 06:12:17 +00:00
class PokemonColor ( TableBase ) :
2010-12-25 01:56:58 +00:00
u """ The " Pokédex color " of a Pokémon species. Usually based on the Pokémon ' s color.
2010-10-03 19:21:39 +00:00
"""
2010-03-03 04:27:40 +00:00
__tablename__ = ' pokemon_colors '
2011-03-12 15:59:01 +00:00
__singlename__ = ' pokemon_color '
2010-10-03 19:21:39 +00:00
id = Column ( Integer , primary_key = True , nullable = False , autoincrement = False ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " ID of the Pokémon " ) )
2011-03-12 15:59:01 +00:00
identifier = Column ( Unicode ( 6 ) , nullable = False ,
info = dict ( description = u " An identifier " , format = ' identifier ' ) )
2011-03-24 05:17:02 +00:00
2011-03-25 01:46:46 +00:00
create_translation_table ( ' pokemon_color_names ' , PokemonColor , ' names ' ,
2011-03-30 01:39:37 +00:00
relation_lazy = ' joined ' ,
2011-03-24 05:17:02 +00:00
name = Column ( Unicode ( 6 ) , nullable = False , index = True ,
info = dict ( description = " The name " , format = ' plaintext ' , official = True ) ) ,
)
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 ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " ID of the Pokémon " ) )
2010-10-03 19:21:39 +00:00
pokedex_id = Column ( Integer , ForeignKey ( ' pokedexes.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " ID of the Pokédex " ) )
2010-10-03 19:21:39 +00:00
pokedex_number = Column ( Integer , nullable = False ,
2010-12-25 01:56:58 +00:00
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-12-25 01:56:58 +00:00
u """ Maps an Egg group to a Pokémon; each Pokémon belongs to one or two egg groups
2010-10-03 19:21:39 +00:00
"""
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 ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " ID of the Pokémon " ) )
2010-10-03 19:21:39 +00:00
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-12-25 01:56:58 +00:00
u """ A required action ( " trigger " ) and the conditions under which the trigger
must occur to cause a Pokémon to evolve .
Any condition may be null if it does not apply for a particular Pokémon .
2010-10-03 19:21:39 +00:00
"""
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 ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " The ID of the pre-evolution Pokémon. " ) )
2010-10-03 19:21:39 +00:00
to_pokemon_id = Column ( Integer , ForeignKey ( ' pokemon.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " The ID of the post-evolution Pokémon. " ) )
2010-10-03 19:21:39 +00:00
evolution_trigger_id = Column ( Integer , ForeignKey ( ' evolution_triggers.id ' ) , nullable = False ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " The ID of the evolution trigger. " ) )
2010-10-03 19:21:39 +00:00
trigger_item_id = Column ( Integer , ForeignKey ( ' items.id ' ) , nullable = True ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " The ID of the item that must be used on the Pokémon. " ) )
2010-10-03 19:21:39 +00:00
minimum_level = Column ( Integer , nullable = True ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " The minimum level for the Pokémon. " ) )
2010-10-03 19:21:39 +00:00
gender = Column ( Enum ( ' male ' , ' female ' , name = ' pokemon_evolution_gender ' ) , nullable = True ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " The Pokémon ' s required gender, or None if gender doesn ' t matter " ) )
2010-10-03 19:21:39 +00:00
location_id = Column ( Integer , ForeignKey ( ' locations.id ' ) , nullable = True ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " The ID of the location the evolution must be triggered at. " ) )
2010-10-03 19:21:39 +00:00
held_item_id = Column ( Integer , ForeignKey ( ' items.id ' ) , nullable = True ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " The ID of the item the Pokémon must hold. " ) )
2011-01-31 19:38:12 +00:00
time_of_day = Column ( Enum ( ' day ' , ' night ' , name = ' pokemon_evolution_time_of_day ' ) , nullable = True ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " The required time of day. " ) )
2010-10-03 19:21:39 +00:00
known_move_id = Column ( Integer , ForeignKey ( ' moves.id ' ) , nullable = True ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " The ID of the move the Pokémon must know. " ) )
2010-10-03 19:21:39 +00:00
minimum_happiness = Column ( Integer , nullable = True ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " The minimum happiness value the Pokémon must have. " ) )
2010-10-03 19:21:39 +00:00
minimum_beauty = Column ( Integer , nullable = True ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " The minimum Beauty value the Pokémon must have. " ) )
2010-10-03 19:21:39 +00:00
relative_physical_stats = Column ( Integer , nullable = True ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " The required relation between the Pokémon ' s Attack and Defense stats, as sgn(atk-def). " ) )
2010-10-03 19:21:39 +00:00
party_pokemon_id = Column ( Integer , ForeignKey ( ' pokemon.id ' ) , nullable = True ,
2010-12-24 01:26:04 +00:00
info = dict ( description = u " The ID of the Pokémon that must be present in the party. " ) )
trade_pokemon_id = Column ( Integer , ForeignKey ( ' pokemon.id ' ) , nullable = True ,
info = dict ( description = u " The ID of the Pokémon for which this Pokémon must be traded. " ) )
2010-05-25 04:29:04 +00:00
2011-03-24 05:39:21 +00:00
class PokemonFlavorText ( TableBase ) :
2010-12-25 01:56:58 +00:00
u """ In-game Pokédex descrption of a Pokémon.
2010-10-03 19:21:39 +00:00
"""
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 ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " ID of the Pokémon " ) )
2010-10-03 19:21:39 +00:00
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 " ) )
2011-03-24 05:39:21 +00:00
language_id = Column ( Integer , ForeignKey ( ' languages.id ' ) , primary_key = True , nullable = False ,
info = dict ( description = " The language " ) )
2010-10-03 19:21:39 +00:00
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
2011-03-14 06:12:17 +00:00
class PokemonForm ( TableBase ) :
2010-11-29 23:51:50 +00:00
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. ' ) )
2011-03-12 15:59:01 +00:00
identifier = Column ( Unicode ( 16 ) , nullable = True ,
info = dict ( description = u " An identifier " , format = ' identifier ' ) )
2010-11-29 23:51:50 +00:00
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. ' ) )
2011-01-24 20:33:18 +00:00
@property
def pokemon ( self ) :
u """ Returns the Pokémon for this form, using the form base as fallback.
"""
return self . unique_pokemon or self . form_base_pokemon
2010-11-29 23:51:50 +00:00
@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 :
2011-03-12 15:59:01 +00:00
return u ' {0} {1} ' . format ( self . name , self . form_group . term )
2010-11-29 23:51:50 +00:00
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 :
2011-03-12 15:59:01 +00:00
return u ' {0} {1} ' . format ( self . name , self . form_base_pokemon . name )
2010-11-29 23:51:50 +00:00
else :
return self . form_base_pokemon . name
2011-03-25 01:46:46 +00:00
create_translation_table ( ' pokemon_form_names ' , PokemonForm , ' names ' ,
2011-03-30 01:39:37 +00:00
relation_lazy = ' joined ' ,
2011-03-24 05:17:02 +00:00
name = Column ( Unicode ( 16 ) , nullable = False , index = True ,
info = dict ( description = " The name " , format = ' plaintext ' , official = True ) ) ,
)
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 '
2011-03-12 15:59:01 +00:00
__singlename__ = ' pokemon_form_group '
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 " ) )
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 " ) )
2011-03-24 05:17:02 +00:00
# FIXME remooove
2011-03-12 15:59:01 +00:00
PokemonFormGroup . id = PokemonFormGroup . pokemon_id
2009-06-16 03:48:02 +00:00
2011-03-24 05:17:02 +00:00
create_translation_table ( ' pokemon_form_group_prose ' , PokemonFormGroup , ' prose ' ,
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 ' ) ) ,
description = Column ( markdown . MarkdownColumn ( 1024 ) , nullable = False ,
info = dict ( description = u " Description of how the forms work " , format = ' markdown ' ) ) ,
)
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. ' ) )
2011-03-14 06:12:17 +00:00
class PokemonHabitat ( TableBase ) :
2010-12-25 01:56:58 +00:00
u """ The habitat of a Pokémon, as given in the FireRed/LeafGreen version Pokédex
2010-10-03 19:21:39 +00:00
"""
2010-03-03 08:53:00 +00:00
__tablename__ = ' pokemon_habitats '
2011-03-12 15:59:01 +00:00
__singlename__ = ' pokemon_habitat '
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 " ) )
2011-03-12 15:59:01 +00:00
identifier = Column ( Unicode ( 16 ) , nullable = False ,
info = dict ( description = u " An identifier " , format = ' identifier ' ) )
2011-03-24 05:17:02 +00:00
2011-03-25 01:46:46 +00:00
create_translation_table ( ' pokemon_habitat_names ' , PokemonHabitat , ' names ' ,
2011-03-30 01:39:37 +00:00
relation_lazy = ' joined ' ,
2011-03-24 05:17:02 +00:00
name = Column ( Unicode ( 16 ) , nullable = False , index = True ,
info = dict ( description = " The name " , format = ' plaintext ' , official = True ) ) ,
)
2010-03-03 08:53:00 +00:00
2011-03-25 02:37:12 +00:00
class PokemonGameIndex ( TableBase ) :
2010-12-25 01:56:58 +00:00
u """ The number of a Pokémon a game uses internally
2010-10-03 19:21:39 +00:00
"""
2011-03-25 02:37:12 +00:00
__tablename__ = ' pokemon_game_indices '
2010-10-03 19:21:39 +00:00
pokemon_id = Column ( Integer , ForeignKey ( ' pokemon.id ' ) , primary_key = True , autoincrement = False , nullable = False ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " Database ID of the Pokémon " ) )
2010-10-03 19:21:39 +00:00
generation_id = Column ( Integer , ForeignKey ( ' generations.id ' ) , primary_key = True , autoincrement = False , nullable = False ,
info = dict ( description = u " Database ID of the generation " ) )
2011-03-25 02:37:12 +00:00
game_index = Column ( Integer , nullable = False ,
2010-12-25 01:56:58 +00:00
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-12-25 01:56:58 +00:00
u """ Record of an item a Pokémon can hold in the wild
2010-10-03 19:21:39 +00:00
"""
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 ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " ID of the Pokémon " ) )
2010-10-03 19:21:39 +00:00
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 ,
2010-12-25 01:56:58 +00:00
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-12-25 01:56:58 +00:00
u """ Record of a move a Pokémon can learn
2010-10-03 19:21:39 +00:00
"""
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 ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " ID of the Pokémon " ) )
2010-10-03 19:21:39 +00:00
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
2011-03-14 06:12:17 +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 '
2011-03-12 15:59:01 +00:00
__singlename__ = ' pokemon_move_method '
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 " ) )
2011-03-12 15:59:01 +00:00
identifier = Column ( Unicode ( 64 ) , nullable = False ,
info = dict ( description = u " An identifier " , format = ' identifier ' ) )
2011-03-24 05:17:02 +00:00
create_translation_table ( ' pokemon_move_method_prose ' , PokemonMoveMethod , ' prose ' ,
2011-03-30 01:39:37 +00:00
relation_lazy = ' joined ' ,
2011-03-24 05:17:02 +00:00
name = Column ( Unicode ( 64 ) , nullable = False , index = True ,
info = dict ( description = " The name " , format = ' plaintext ' , official = False ) ) ,
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
2011-03-14 06:12:17 +00:00
class PokemonShape ( TableBase ) :
2010-12-25 01:56:58 +00:00
u """ The shape of a Pokémon ' s body, as used in generation IV Pokédexes.
2010-10-03 19:21:39 +00:00
"""
2009-03-05 03:29:43 +00:00
__tablename__ = ' pokemon_shapes '
2011-03-12 15:59:01 +00:00
__singlename__ = ' pokemon_shape '
2010-10-03 19:21:39 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = u " A numeric ID " ) )
2011-03-12 15:59:01 +00:00
identifier = Column ( Unicode ( 24 ) , nullable = False ,
info = dict ( description = u " An identifier " , format = ' identifier ' ) )
2011-03-24 05:17:02 +00:00
create_translation_table ( ' pokemon_shape_prose ' , PokemonShape , ' prose ' ,
2011-03-30 01:39:37 +00:00
relation_lazy = ' joined ' ,
2011-03-24 05:17:02 +00:00
name = Column ( Unicode ( 24 ) , nullable = False , index = True ,
info = dict ( description = " The name " , format = ' plaintext ' , official = False ) ) ,
2011-03-25 00:17:24 +00:00
awesome_name = Column ( Unicode ( 16 ) , nullable = False ,
info = dict ( description = u " A splendiferous name of the body shape " , format = ' plaintext ' ) ) ,
2011-03-24 05:17:02 +00:00
)
2009-03-05 03:29:43 +00:00
2009-02-05 08:05:42 +00:00
class PokemonStat ( TableBase ) :
2010-12-25 01:56:58 +00:00
u """ A stat value of a Pokémon
2010-10-03 19:21:39 +00:00
"""
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 ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " ID of the Pokémon " ) )
2010-10-03 19:21:39 +00:00
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 ,
2010-12-25 01:56:58 +00:00
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-12-25 01:56:58 +00:00
u """ Maps a type to a Pokémon. Each Pokémon has 1 or 2 types.
2010-10-03 19:21:39 +00:00
"""
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 ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " ID of the Pokémon " ) )
2010-10-03 19:21:39 +00:00
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
2011-03-14 06:12:17 +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 '
2011-03-12 15:59:01 +00:00
__singlename__ = ' region '
2010-10-03 19:21:39 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = u " A numeric ID " ) )
2011-03-12 15:59:01 +00:00
identifier = Column ( Unicode ( 16 ) , nullable = False ,
info = dict ( description = u " An identifier " , format = ' identifier ' ) )
2011-03-24 05:17:02 +00:00
2011-03-25 01:46:46 +00:00
create_translation_table ( ' region_names ' , Region , ' names ' ,
2011-03-30 01:39:37 +00:00
relation_lazy = ' joined ' ,
2011-03-24 05:17:02 +00:00
name = Column ( Unicode ( 16 ) , nullable = False , index = True ,
info = dict ( description = " The name " , format = ' plaintext ' , official = True ) ) ,
)
2010-01-25 04:39:33 +00:00
2011-03-14 06:12:17 +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 '
2011-03-12 15:59:01 +00:00
__singlename__ = ' stat '
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) " ) )
2011-03-12 15:59:01 +00:00
identifier = Column ( Unicode ( 16 ) , nullable = False ,
info = dict ( description = u " An identifier " , format = ' identifier ' ) )
2011-03-30 04:26:57 +00:00
is_battle_only = Column ( Boolean , nullable = False ,
info = dict ( description = u " Whether this stat only exists within a battle " ) )
2011-03-24 05:17:02 +00:00
2011-03-25 01:46:46 +00:00
create_translation_table ( ' stat_names ' , Stat , ' names ' ,
2011-03-30 01:39:37 +00:00
relation_lazy = ' joined ' ,
2011-03-24 05:17:02 +00:00
name = Column ( Unicode ( 16 ) , nullable = False , index = True ,
info = dict ( description = " The name " , format = ' plaintext ' , official = True ) ) ,
)
2009-02-05 08:05:42 +00:00
2011-03-06 09:13:19 +00:00
class StatHint ( TableBase ) :
u """ Flavor text for genes that appears in a Pokémon ' s summary. Sometimes
called " characteristics " .
"""
__tablename__ = ' stat_hints '
2011-03-12 15:59:01 +00:00
__singlename__ = ' stat_hint '
2011-03-12 14:42:41 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = u " A numeric ID " ) )
stat_id = Column ( Integer , ForeignKey ( ' stats.id ' ) , nullable = False ,
info = dict ( description = u " ID of the highest stat " ) )
gene_mod_5 = Column ( Integer , nullable = False , index = True ,
info = dict ( description = u " Value of the highest stat modulo 5 " ) )
2011-03-24 05:17:02 +00:00
2011-03-25 01:46:46 +00:00
create_translation_table ( ' stat_hint_names ' , StatHint , ' names ' ,
2011-03-30 01:39:37 +00:00
relation_lazy = ' joined ' ,
2011-03-24 05:17:02 +00:00
message = Column ( Unicode ( 24 ) , nullable = False , index = True ,
info = dict ( description = u " The text displayed " , official = True , format = ' plaintext ' ) ) ,
)
2011-03-06 09:13:19 +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 ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " The ID of the first move in the combo. " ) )
2010-10-03 19:21:39 +00:00
second_move_id = Column ( Integer , ForeignKey ( ' moves.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " The 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 '
2011-03-12 15:59:01 +00:00
__singlename__ = ' super_contest_effect '
2010-10-03 19:21:39 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " This effect ' s unique ID. " ) )
2010-10-03 19:21:39 +00:00
appeal = Column ( SmallInteger , nullable = False ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " The number of hearts the user gains. " ) )
2011-03-24 05:17:02 +00:00
create_translation_table ( ' super_contest_effect_prose ' , SuperContestEffect , ' prose ' ,
flavor_text = Column ( Unicode ( 64 ) , nullable = False ,
2011-03-29 02:12:30 +00:00
info = dict ( description = u " A description of the effect. " , format = ' plaintext ' , official = True ) ) ,
2011-03-24 05:17:02 +00:00
)
2009-09-15 05:07:08 +00:00
2009-02-05 08:05:42 +00:00
class TypeEfficacy ( TableBase ) :
2010-12-25 01:56:58 +00:00
u """ The damage multiplier used when a move of a particular type damages a
Pokémon of a particular other type .
2010-10-03 19:21:39 +00:00
"""
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 ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " The ID of the damaging type. " ) )
2010-10-03 19:21:39 +00:00
target_type_id = Column ( Integer , ForeignKey ( ' types.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " The ID of the defending Pokémon ' s type. " ) )
2010-10-03 19:21:39 +00:00
damage_factor = Column ( Integer , nullable = False ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " The multiplier, as a percentage of damage inflicted. " ) )
2009-02-05 08:05:42 +00:00
2011-03-14 06:12:17 +00:00
class Type ( TableBase ) :
2010-12-25 01:56:58 +00:00
u """ Any of the elemental types Pokémon and moves can have. """
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 ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " A unique ID for this type. " ) )
2011-03-12 20:43:29 +00:00
identifier = Column ( Unicode ( 12 ) , nullable = False ,
2011-03-12 15:59:01 +00:00
info = dict ( description = u " An identifier " , format = ' identifier ' ) )
2010-10-03 19:21:39 +00:00
generation_id = Column ( Integer , ForeignKey ( ' generations.id ' ) , nullable = False ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " The ID of the generation this type first appeared in. " ) )
2011-02-06 18:31:20 +00:00
damage_class_id = Column ( Integer , ForeignKey ( ' move_damage_classes.id ' ) , nullable = True ,
info = dict ( description = u " The ID of the damage class this type ' s moves had before Generation IV, null if not applicable (e.g. ???). " ) )
2011-03-24 05:17:02 +00:00
2011-03-25 01:46:46 +00:00
create_translation_table ( ' type_names ' , Type , ' names ' ,
2011-03-30 01:39:37 +00:00
relation_lazy = ' joined ' ,
2011-03-24 05:17:02 +00:00
name = Column ( Unicode ( 12 ) , nullable = False , index = True ,
info = dict ( description = " The name " , format = ' plaintext ' , official = True ) ) ,
)
2009-02-05 08:05:42 +00:00
class VersionGroup ( TableBase ) :
2010-12-25 01:56:58 +00:00
u """ A group of versions, containing either two paired versions (such as Red
and Blue ) or a single game ( such as Yellow . )
2010-10-03 19:21:39 +00:00
"""
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 ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " This version group ' s unique ID. " ) )
2010-10-03 19:21:39 +00:00
generation_id = Column ( Integer , ForeignKey ( ' generations.id ' ) , nullable = False ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " The ID of the generation the games in this group belong to. " ) )
2010-12-05 01:46:06 +00:00
pokedex_id = Column ( Integer , ForeignKey ( ' pokedexes.id ' ) , nullable = False ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " The 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-12-25 01:56:58 +00:00
u """ Maps a version group to a region that appears in 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 ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " The ID of the version group. " ) )
2010-10-03 19:21:39 +00:00
region_id = Column ( Integer , ForeignKey ( ' regions.id ' ) , primary_key = True , nullable = False ,
2010-12-25 01:56:58 +00:00
info = dict ( description = u " The ID of the region. " ) )
2010-01-25 04:39:33 +00:00
2011-03-14 06:12:17 +00:00
class Version ( TableBase ) :
2010-12-25 01:56:58 +00:00
u """ An individual main-series Pokémon game. """
2009-02-05 08:05:42 +00:00
__tablename__ = ' versions '
2011-03-12 15:59:01 +00:00
__singlename__ = ' version '
2010-10-03 19:21:39 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
2010-12-25 01:56:58 +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-25 01:56:58 +00:00
info = dict ( description = u " The ID of the version group this game belongs to. " ) )
2011-03-12 15:59:01 +00:00
identifier = Column ( Unicode ( 32 ) , nullable = False ,
info = dict ( description = u ' And identifier ' , format = ' identifier ' ) )
2011-03-24 05:17:02 +00:00
2011-03-25 01:46:46 +00:00
create_translation_table ( ' version_names ' , Version , ' names ' ,
2011-03-30 01:39:37 +00:00
relation_lazy = ' joined ' ,
2011-03-24 05:17:02 +00:00
name = Column ( Unicode ( 32 ) , nullable = False , index = True ,
info = dict ( description = " The name " , format = ' plaintext ' , official = True ) ) ,
)
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 ' )
2010-05-01 21:33:11 +00:00
Ability . generation = relation ( Generation , backref = ' abilities ' )
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 )
2011-03-24 05:39:21 +00:00
AbilityFlavorText . language = relation ( Language )
2010-05-04 06:03:01 +00:00
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 ' )
2011-01-27 05:33:03 +00:00
EncounterSlot . version_group = relation ( VersionGroup )
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 ' )
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-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
2011-03-12 15:59:01 +00:00
ItemCategory . items = relation ( Item , order_by = Item . identifier )
2010-04-27 04:13:28 +00:00
ItemCategory . pocket = relation ( ItemPocket )
2010-05-02 08:33:44 +00:00
ItemFlavorText . version_group = relation ( VersionGroup )
2011-03-24 05:39:21 +00:00
ItemFlavorText . language = relation ( Language )
2010-05-02 08:33:44 +00:00
2011-03-25 02:37:12 +00:00
ItemGameIndex . item = relation ( Item , backref = ' game_indices ' )
ItemGameIndex . generation = relation ( Generation )
2010-07-26 03:25:59 +00:00
2011-03-12 15:59:01 +00:00
ItemPocket . categories = relation ( ItemCategory , order_by = ItemCategory . identifier )
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 ' )
2011-03-25 02:37:12 +00:00
LocationGameIndex . location = relation ( Location , backref = ' game_indices ' )
LocationGameIndex . generation = relation ( Generation )
2010-07-26 03:25:59 +00:00
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 ' )
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 ' )
2011-03-06 08:00:40 +00:00
Move . meta = relation ( MoveMeta , uselist = False , backref = ' move ' )
Move . meta_stat_changes = relation ( MoveMetaStatChange )
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 ' )
2011-03-25 03:44:08 +00:00
Move . type = relation ( Type , backref = ' moves ' )
Move . effect = markdown . MoveEffectProperty ( ' effect ' )
Move . effect_map = markdown . MoveEffectProperty ( ' effect_map ' )
Move . short_effect = markdown . MoveEffectProperty ( ' short_effect ' )
Move . short_effect_map = markdown . MoveEffectProperty ( ' short_effect_map ' )
2009-07-28 02:09:11 +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 ' )
2011-03-25 03:44:08 +00:00
MoveChangelog . effect = markdown . MoveEffectProperty ( ' effect ' )
MoveChangelog . effect_map = markdown . MoveEffectProperty ( ' effect_map ' )
MoveChangelog . short_effect = markdown . MoveEffectProperty ( ' short_effect ' )
MoveChangelog . short_effect_map = markdown . MoveEffectProperty ( ' short_effect_map ' )
2009-11-09 01:00:45 +00:00
MoveEffect . category_map = relation ( MoveEffectCategoryMap )
MoveEffect . categories = association_proxy ( ' category_map ' , ' category ' )
2011-02-10 07:37:41 +00:00
MoveEffect . changelog = relation ( MoveEffectChangelog ,
order_by = MoveEffectChangelog . changed_in_version_group_id . desc ( ) ,
backref = ' move_effect ' ,
)
2009-11-09 01:00:45 +00:00
MoveEffectCategoryMap . category = relation ( MoveEffectCategory )
2011-02-10 07:37:41 +00:00
MoveEffectChangelog . changed_in = relation ( VersionGroup , backref = ' move_effect_changelog ' )
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 )
2011-03-24 05:39:21 +00:00
MoveFlavorText . language = relation ( Language )
2009-09-15 05:18:01 +00:00
2011-03-06 08:00:40 +00:00
MoveMeta . category = relation ( MoveMetaCategory , backref = ' move_meta ' )
MoveMeta . ailment = relation ( MoveMetaAilment , backref = ' move_meta ' )
MoveMetaStatChange . stat = relation ( Stat , backref = ' move_meta_stat_changes ' )
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 ' )
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 ' )
2011-03-25 03:44:08 +00:00
Pokedex . version_groups = relation ( VersionGroup , order_by = VersionGroup . id , backref = ' 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 ,
2011-03-25 03:44:08 +00:00
backref = backref ( ' all_pokemon ' ,
order_by = Pokemon . order ,
) ,
2010-11-25 08:09:06 +00:00
)
Pokemon . abilities = relation ( Ability ,
secondary = PokemonAbility . __table__ ,
primaryjoin = and_ (
Pokemon . id == PokemonAbility . pokemon_id ,
PokemonAbility . is_dream == False ,
) ,
order_by = PokemonAbility . slot ,
2011-03-25 03:44:08 +00:00
backref = backref ( ' pokemon ' ,
order_by = Pokemon . order ,
) ,
2010-11-25 08:09:06 +00:00
)
Pokemon . dream_ability = relation ( Ability ,
secondary = PokemonAbility . __table__ ,
primaryjoin = and_ (
Pokemon . id == PokemonAbility . pokemon_id ,
PokemonAbility . is_dream == True ,
) ,
uselist = False ,
2011-03-25 03:44:08 +00:00
backref = backref ( ' dream_pokemon ' ,
order_by = Pokemon . order ,
) ,
2010-11-25 08:09:06 +00:00
)
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 ) )
2011-03-25 03:44:08 +00:00
Pokemon . evolution_chain = relation ( EvolutionChain , backref = backref ( ' pokemon ' , order_by = Pokemon . order ) )
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 ' )
2010-11-29 23:51:50 +00:00
Pokemon . forms = relation ( PokemonForm , primaryjoin = Pokemon . id == PokemonForm . form_base_pokemon_id ,
2011-03-12 15:59:01 +00:00
order_by = ( PokemonForm . order . asc ( ) , PokemonForm . identifier . asc ( ) ) )
2010-11-29 23:51:50 +00:00
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 ( ) )
2011-03-25 03:44:08 +00:00
Pokemon . types = relation ( Type ,
secondary = PokemonType . __table__ ,
order_by = PokemonType . slot . asc ( ) ,
backref = backref ( ' pokemon ' , order_by = Pokemon . order ) ,
)
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 ' ,
)
2010-12-24 01:26:04 +00:00
PokemonEvolution . trade_pokemon = relation ( Pokemon ,
primaryjoin = PokemonEvolution . trade_pokemon_id == Pokemon . id ,
)
2010-05-25 04:29:04 +00:00
2009-03-07 03:14:42 +00:00
PokemonFlavorText . version = relation ( Version )
2011-03-24 05:39:21 +00:00
PokemonFlavorText . language = relation ( Language )
2009-03-07 03:14:42 +00:00
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 )
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 ' )
2011-03-06 09:13:19 +00:00
StatHint . stat = relation ( Stat , backref = ' hints ' )
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 ' )
2009-08-27 05:30:07 +00:00
Version . generation = association_proxy ( ' version_group ' , ' generation ' )
2009-08-04 02:59:39 +00:00
2011-03-25 03:44:08 +00:00
VersionGroup . versions = relation ( Version , order_by = Version . id , backref = ' 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 ' )