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-30 01:47:18 +00:00
- ripped : True for text that has been ripped from the games , and can be ripped
again for new versions or languages
2011-03-12 12:36:08 +00:00
2011-04-20 19:47:37 +00:00
- string_getter : for translation columns , a function taking ( text , session ,
language ) that is used for properties on the main table . Used for Markdown
text .
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-04-28 10:01:56 +00:00
from sqlalchemy . orm import backref , relationship
2011-03-25 03:02:00 +00:00
from sqlalchemy . orm . session import Session
2011-03-20 08:06:45 +00:00
from sqlalchemy . orm . interfaces import AttributeExtension
2011-04-13 19:44:50 +00:00
from sqlalchemy . sql import and_ , or_
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-04-03 18:00:58 +00:00
def __repr__ ( self ) :
return unicode ( self ) . encode ( ' utf8 ' )
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 '
2011-04-03 11:28:29 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
2011-03-22 05:32:52 +00:00
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 '
2011-04-03 11:28:29 +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 ,
2011-03-30 01:47:18 +00:00
info = dict ( description = " The name " , format = ' plaintext ' , official = True , ripped = True ) ) ,
2011-03-22 05:32:52 +00:00
)
create_translation_table ( ' ability_prose ' , Ability , ' prose ' ,
2011-04-20 19:47:37 +00:00
effect = Column ( Unicode ( 5120 ) , nullable = True ,
info = dict ( description = " A detailed description of this ability ' s effect " , format = ' markdown ' , string_getter = markdown . MarkdownString ) ) ,
short_effect = Column ( Unicode ( 512 ) , nullable = True ,
info = dict ( description = " A short summary of this ability ' s effect " , format = ' markdown ' , string_getter = markdown . MarkdownString ) ) ,
2011-03-22 05:32:52 +00:00
)
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 '
2011-04-03 11:28:29 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
2011-03-12 15:59:01 +00:00
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 ' ,
2011-04-20 19:47:37 +00:00
effect = Column ( Unicode ( 255 ) , nullable = False ,
info = dict ( description = " A description of the old behavior " , format = ' markdown ' , string_getter = markdown . MarkdownString ) )
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-04-03 11:28:29 +00:00
language_id = Column ( Integer , ForeignKey ( ' languages.id ' ) , primary_key = True , nullable = False ,
2011-03-24 05:39:21 +00:00
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 '
2011-04-03 11:28:29 +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 ,
2011-08-30 14:49:20 +00:00
info = dict ( description = u " 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 '
2011-04-03 11:28:29 +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 '
2011-04-03 11:28:29 +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 ' ,
2011-04-03 16:34:44 +00:00
flavor_text = Column ( Unicode ( 64 ) , nullable = True ,
2011-03-24 05:17:02 +00:00
info = dict ( description = " The in-game description of this effect " , official = True , format = ' gametext ' ) ) ,
2011-04-03 16:34:44 +00:00
effect = Column ( Unicode ( 255 ) , nullable = True ,
2011-03-25 00:17:24 +00:00
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 '
2011-04-03 11:28:29 +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-04-03 16:34:44 +00:00
name = Column ( Unicode ( 6 ) , nullable = True , index = True ,
2011-03-25 00:17:24 +00:00
info = dict ( description = " The name " , format = ' plaintext ' , official = True ) ) ,
2011-04-03 16:34:44 +00:00
flavor = Column ( Unicode ( 6 ) , nullable = True ,
2011-03-24 05:17:02 +00:00
info = dict ( description = " The name of the corresponding Berry flavor " , official = True , format = ' plaintext ' ) ) ,
2011-04-03 16:34:44 +00:00
color = Column ( Unicode ( 6 ) , nullable = True ,
2011-03-24 05:17:02 +00:00
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 '
2011-04-03 11:28:29 +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
2011-04-03 13:34:49 +00:00
through tall grass , is called a method . Each method has its own set of
2009-12-09 22:35:29 +00:00
encounter slots .
2009-05-17 07:18:10 +00:00
2011-04-03 13:34:49 +00:00
Within a method , slots are defined primarily by rarity . Each slot can
2009-12-09 22:35:29 +00:00
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 '
2011-04-03 11:28:29 +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 ,
2011-04-03 13:34:49 +00:00
info = dict ( description = " The ID of the encounter slot, which determines method and rarity " ) )
2010-10-03 15:21:50 +00:00
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 '
2011-04-03 11:28:29 +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 '
2011-04-03 11:28:29 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
2010-10-03 15:21:50 +00:00
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-04-03 13:34:49 +00:00
class EncounterMethod ( TableBase ) :
u """ A way the player can enter a wild encounter, e.g., surfing, fishing, or walking through tall grass.
"""
__tablename__ = ' encounter_methods '
__singlename__ = ' encounter_method '
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = " A unique ID for the method " ) )
identifier = Column ( Unicode ( 16 ) , nullable = False , unique = True ,
info = dict ( description = " An identifier " , format = ' identifier ' ) )
create_translation_table ( ' encounter_method_prose ' , EncounterMethod , ' prose ' ,
name = Column ( Unicode ( 64 ) , nullable = False , index = True ,
info = dict ( description = " The name " , format = ' plaintext ' , official = False ) ) ,
)
2009-12-09 22:35:29 +00:00
class EncounterSlot ( TableBase ) :
2011-04-03 13:34:49 +00:00
u """ An abstract " slot " within a method, 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 '
2011-04-03 11:28:29 +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 " ) )
2011-04-03 13:34:49 +00:00
encounter_method_id = Column ( Integer , ForeignKey ( ' encounter_methods.id ' ) , primary_key = False , nullable = False , autoincrement = False ,
info = dict ( description = " The ID of the method " ) )
2010-10-03 19:21:39 +00:00
slot = Column ( Integer , nullable = True ,
2011-04-03 13:34:49 +00:00
info = dict ( description = " This slot ' s order for the location and method " ) )
2011-04-03 22:09:45 +00:00
rarity = Column ( Integer , nullable = True ,
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 '
2011-04-03 11:28:29 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
2010-10-03 15:21:50 +00:00
info = dict ( description = " A numeric ID " ) )
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 '
2011-04-03 11:28:29 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
2010-10-03 15:21:50 +00:00
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 '
2011-04-03 11:28:29 +00:00
growth_rate_id = Column ( Integer , ForeignKey ( ' growth_rates.id ' ) , primary_key = True , nullable = False ,
2010-10-03 15:21:50 +00:00
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 '
2011-04-03 11:28:29 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
2010-10-03 15:21:50 +00:00
info = dict ( description = " A numeric ID " ) )
2011-04-03 08:26:55 +00:00
main_region_id = Column ( Integer , ForeignKey ( ' regions.id ' ) , nullable = False ,
2010-10-03 15:21:50 +00:00
info = dict ( description = " ID of the region this generation ' s main games take place in " ) )
2011-04-03 08:26:55 +00:00
canonical_pokedex_id = Column ( Integer , ForeignKey ( ' pokedexes.id ' ) , nullable = False ,
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 '
2011-04-03 11:28:29 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
2010-10-03 15:21:50 +00:00
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 '
2011-04-03 11:28:29 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
2010-10-03 15:21:50 +00:00
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 ,
2011-03-30 01:47:18 +00:00
info = dict ( description = " The name " , format = ' plaintext ' , official = True , ripped = True ) ) ,
2011-03-24 05:17:02 +00:00
)
create_translation_table ( ' item_prose ' , Item , ' prose ' ,
2011-04-20 19:47:37 +00:00
short_effect = Column ( Unicode ( 256 ) , nullable = True ,
info = dict ( description = " A short summary of the effect " , format = ' markdown ' , string_getter = markdown . MarkdownString ) ) ,
effect = Column ( Unicode ( 5120 ) , nullable = True ,
info = dict ( description = u " Detailed description of the item ' s effect. " , format = ' markdown ' , string_getter = markdown . MarkdownString ) ) ,
2011-03-24 05:17:02 +00:00
)
2011-04-01 23:47:52 +00:00
create_translation_table ( ' item_flavor_summaries ' , Item , ' flavor_summaries ' ,
flavor_summary = Column ( Unicode ( 512 ) , nullable = True ,
2011-03-30 01:47:18 +00:00
info = dict ( description = u " Text containing facts from all flavor texts, for languages without official game translations " , official = False , format = ' plaintext ' , ripped = True ) ) ,
2011-04-01 23:47:52 +00:00
)
2011-03-24 05:17:02 +00:00
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 '
2011-04-03 11:28:29 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
2010-10-03 15:21:50 +00:00
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 '
2011-04-03 11:28:29 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
2010-10-03 15:21:50 +00:00
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 ' ,
2011-04-03 16:34:44 +00:00
name = Column ( Unicode ( 24 ) , nullable = True , index = True ,
2011-03-24 05:17:02 +00:00
info = dict ( description = " The name " , format = ' plaintext ' , official = False ) ) ,
2011-04-03 16:34:44 +00:00
description = Column ( Unicode ( 64 ) , nullable = True ,
2011-03-24 05:17:02 +00:00
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 '
2011-04-01 23:47:52 +00:00
summary_column = Item . flavor_summaries_table , ' flavor_summary '
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-04-03 11:28:29 +00:00
language_id = Column ( Integer , ForeignKey ( ' languages.id ' ) , primary_key = True , nullable = False ,
2011-03-24 05:39:21 +00:00
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 '
2011-04-03 11:28:29 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
2010-10-03 15:21:50 +00:00
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 '
2011-04-03 11:28:29 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
2010-10-03 15:21:50 +00:00
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 '
2011-04-03 11:28:29 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
2010-10-03 19:21:39 +00:00
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 '
2011-04-03 11:28:29 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
2010-10-03 19:21:39 +00:00
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 ,
2012-02-06 21:54:27 +00:00
info = dict ( description = " ID the games use 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 " ) )
2011-04-03 13:34:49 +00:00
encounter_method_id = Column ( Integer , ForeignKey ( ' encounter_methods.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = " ID of the method " ) )
2010-10-03 19:21:39 +00:00
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 '
2011-04-03 11:28:29 +00:00
location_id = Column ( Integer , ForeignKey ( ' locations.id ' ) , nullable = False , primary_key = True ,
2010-10-03 19:21:39 +00:00
info = dict ( description = " Database ID of the locaion " ) )
2011-04-03 11:28:29 +00:00
generation_id = Column ( Integer , ForeignKey ( ' generations.id ' ) , nullable = False , primary_key = True ,
2010-10-03 19:21:39 +00:00
info = dict ( description = " ID of the generation this entry to " ) )
2011-04-03 12:12:09 +00:00
game_index = Column ( Integer , nullable = False , primary_key = True , autoincrement = 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-29 21:15:28 +00:00
class Move ( TableBase ) :
u """ A Move: technique or attack a Pokémon can learn to use
"""
__tablename__ = ' moves '
__singlename__ = ' move '
2011-04-03 11:28:29 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
2011-03-29 21:15:28 +00:00
info = dict ( description = " A numeric ID " ) )
identifier = Column ( Unicode ( 24 ) , nullable = False ,
info = dict ( description = " An identifier " , format = ' identifier ' ) )
generation_id = Column ( Integer , ForeignKey ( ' generations.id ' ) , nullable = False ,
info = dict ( description = " ID of the generation this move first appeared in " ) )
type_id = Column ( Integer , ForeignKey ( ' types.id ' ) , nullable = False ,
info = dict ( description = " ID of the move ' s elemental type " ) )
power = Column ( SmallInteger , nullable = False ,
info = dict ( description = " Base power of the move " ) )
pp = Column ( SmallInteger , nullable = True ,
info = dict ( description = " Base PP (Power Points) of the move, nullable if not applicable (e.g. Struggle and Shadow moves). " ) )
accuracy = Column ( SmallInteger , nullable = True ,
info = dict ( description = " Accuracy of the move; NULL means it never misses " ) )
priority = Column ( SmallInteger , nullable = False ,
info = dict ( description = " The move ' s priority bracket " ) )
target_id = Column ( Integer , ForeignKey ( ' move_targets.id ' ) , nullable = False ,
info = dict ( description = " ID of the target (range) of the move " ) )
damage_class_id = Column ( Integer , ForeignKey ( ' move_damage_classes.id ' ) , nullable = False ,
info = dict ( description = " ID of the damage class (physical/special) of the move " ) )
effect_id = Column ( Integer , ForeignKey ( ' move_effects.id ' ) , nullable = False ,
info = dict ( description = " ID of the move ' s effect " ) )
effect_chance = Column ( Integer , nullable = True ,
info = dict ( description = " The chance for a secondary effect. What this is a chance of is specified by the move ' s effect. " ) )
contest_type_id = Column ( Integer , ForeignKey ( ' contest_types.id ' ) , nullable = True ,
info = dict ( description = " ID of the move ' s Contest type (e.g. cool or smart) " ) )
contest_effect_id = Column ( Integer , ForeignKey ( ' contest_effects.id ' ) , nullable = True ,
info = dict ( description = " ID of the move ' s Contest effect " ) )
super_contest_effect_id = Column ( Integer , ForeignKey ( ' super_contest_effects.id ' ) , nullable = True ,
info = dict ( description = " ID of the move ' s Super Contest effect " ) )
create_translation_table ( ' move_names ' , Move , ' names ' ,
relation_lazy = ' joined ' ,
name = Column ( Unicode ( 24 ) , nullable = False , index = True ,
2011-03-30 01:47:18 +00:00
info = dict ( description = " The name " , format = ' plaintext ' , official = True , ripped = True ) )
2011-03-29 21:15:28 +00:00
)
2011-04-01 23:47:52 +00:00
create_translation_table ( ' move_flavor_summaries ' , Move , ' flavor_summaries ' ,
flavor_summary = Column ( Unicode ( 512 ) , nullable = True ,
2011-03-30 01:47:18 +00:00
info = dict ( description = u " Text containing facts from all flavor texts, for languages without official game translations " , official = False , format = ' plaintext ' , ripped = True ) ) ,
2011-04-01 23:47:52 +00:00
)
2011-03-29 21:15:28 +00:00
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 '
2011-04-03 11:28:29 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
2010-10-03 19:21:39 +00:00
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-29 21:15:28 +00:00
class MoveChangelog ( TableBase ) :
""" History of changes to moves across main game versions. """
__tablename__ = ' move_changelog '
__singlename__ = ' move_changelog '
2011-04-03 11:28:29 +00:00
move_id = Column ( Integer , ForeignKey ( ' moves.id ' ) , primary_key = True , nullable = False ,
2011-03-29 21:15:28 +00:00
info = dict ( description = " ID of the move that changed " ) )
2011-04-03 11:28:29 +00:00
changed_in_version_group_id = Column ( Integer , ForeignKey ( ' version_groups.id ' ) , primary_key = True , nullable = False ,
2011-03-29 21:15:28 +00:00
info = dict ( description = " ID of the version group in which the move changed " ) )
type_id = Column ( Integer , ForeignKey ( ' types.id ' ) , nullable = True ,
info = dict ( description = " Prior type of the move, or NULL if unchanged " ) )
power = Column ( SmallInteger , nullable = True ,
info = dict ( description = " Prior base power of the move, or NULL if unchanged " ) )
pp = Column ( SmallInteger , nullable = True ,
info = dict ( description = " Prior base PP of the move, or NULL if unchanged " ) )
accuracy = Column ( SmallInteger , nullable = True ,
info = dict ( description = " Prior accuracy of the move, or NULL if unchanged " ) )
effect_id = Column ( Integer , ForeignKey ( ' move_effects.id ' ) , nullable = True ,
info = dict ( description = " Prior ID of the effect, or NULL if unchanged " ) )
effect_chance = Column ( Integer , nullable = True ,
info = dict ( description = " Prior effect chance, or NULL if unchanged " ) )
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 '
2011-04-03 11:28:29 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
2010-10-03 19:21:39 +00:00
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-04-03 16:34:44 +00:00
name = Column ( Unicode ( 16 ) , nullable = True , index = True ,
2011-03-24 05:17:02 +00:00
info = dict ( description = " The name " , format = ' plaintext ' , official = False ) ) ,
2011-04-03 16:34:44 +00:00
description = Column ( Unicode ( 64 ) , nullable = True ,
2011-03-24 05:17:02 +00:00
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 '
2011-04-03 11:28:29 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
2010-10-03 19:21:39 +00:00
info = dict ( description = " A numeric ID " ) )
2011-03-24 05:17:02 +00:00
create_translation_table ( ' move_effect_prose ' , MoveEffect , ' prose ' ,
2011-04-03 16:34:44 +00:00
short_effect = Column ( Unicode ( 256 ) , nullable = True ,
2011-04-20 19:47:37 +00:00
info = dict ( description = " A short summary of the effect " , format = ' markdown ' ) ) ,
2011-04-03 16:34:44 +00:00
effect = Column ( Unicode ( 5120 ) , nullable = True ,
2011-04-12 05:57:30 +00:00
info = dict ( description = " A detailed description of the effect " , format = ' markdown ' ) ) ,
2011-03-24 05:17:02 +00:00
)
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 '
2011-04-03 11:28:29 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
2011-03-12 15:59:01 +00:00
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 ' ,
2011-04-20 19:47:37 +00:00
effect = Column ( Unicode ( 512 ) , nullable = False ,
info = dict ( description = " A description of the old behavior " , format = ' markdown ' , string_getter = markdown . MarkdownString ) ) ,
2011-03-24 05:17:02 +00:00
)
2009-09-14 15:29:05 +00:00
class MoveFlag ( TableBase ) :
2010-10-03 19:21:39 +00:00
u """ A Move attribute such as " snatchable " or " contact " .
"""
2011-04-28 11:23:10 +00:00
__tablename__ = ' move_flags '
__singlename__ = ' move_flag '
2011-04-03 11:28:29 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
2010-10-03 19:21:39 +00:00
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
2011-04-28 11:23:10 +00:00
class MoveFlagMap ( TableBase ) :
u """ Maps a move flag to a move
"""
__tablename__ = ' move_flag_map '
move_id = Column ( Integer , ForeignKey ( ' moves.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = " ID of the move " ) )
move_flag_id = Column ( Integer , ForeignKey ( ' move_flags.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = " ID of the flag " ) )
create_translation_table ( ' move_flag_prose ' , MoveFlag , ' prose ' ,
2011-03-30 01:39:37 +00:00
relation_lazy = ' joined ' ,
2011-04-03 16:34:44 +00:00
name = Column ( Unicode ( 32 ) , nullable = True , index = True ,
2011-03-24 05:17:02 +00:00
info = dict ( description = " The name " , format = ' plaintext ' , official = False ) ) ,
2011-04-20 19:47:37 +00:00
description = Column ( Unicode ( 256 ) , nullable = True ,
info = dict ( description = " A short description of the flag " , format = ' markdown ' , string_getter = markdown . MarkdownString ) ) ,
2011-03-24 05:17:02 +00:00
)
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 '
2011-04-01 23:47:52 +00:00
summary_column = Move . flavor_summaries_table , ' flavor_summary '
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-04-03 11:28:29 +00:00
language_id = Column ( Integer , ForeignKey ( ' languages.id ' ) , primary_key = True , nullable = False ,
2011-03-24 05:39:21 +00:00
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 " ) )
2011-04-10 05:22:58 +00:00
identifier = Column ( Unicode ( 24 ) , nullable = False , index = True , unique = True ,
2011-03-12 14:42:41 +00:00
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-04-19 09:24:40 +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 " ) )
2011-04-10 05:22:58 +00:00
identifier = Column ( Unicode ( 32 ) , nullable = False , index = True , unique = True ,
info = dict ( description = " An identifier " , format = ' identifier ' ) )
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 '
2011-04-03 11:28:29 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
2010-10-03 19:21:39 +00:00
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-04-03 16:34:44 +00:00
name = Column ( Unicode ( 32 ) , nullable = True , index = True ,
2011-03-24 05:17:02 +00:00
info = dict ( description = " The name " , format = ' plaintext ' , official = False ) ) ,
2011-04-03 16:34:44 +00:00
description = Column ( Unicode ( 128 ) , nullable = True ,
2011-03-24 05:17:02 +00:00
info = dict ( description = " A description " , format = ' plaintext ' ) ) ,
)
2009-02-05 08:05:42 +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 '
2011-04-03 11:28:29 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
2010-10-03 19:21:39 +00:00
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 ,
2011-03-30 01:47:18 +00:00
info = dict ( description = " The name " , format = ' plaintext ' , official = True , ripped = True ) ) ,
2011-03-24 05:17:02 +00:00
)
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 '
2011-04-03 11:28:29 +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 " ) )
2011-04-03 11:28:29 +00:00
move_battle_style_id = Column ( Integer , ForeignKey ( ' move_battle_styles.id ' ) , primary_key = True , nullable = False ,
2010-10-03 19:21:39 +00:00
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 '
2011-04-03 11:28:29 +00:00
nature_id = Column ( Integer , ForeignKey ( ' natures.id ' ) , primary_key = True , nullable = False ,
2010-10-03 19:21:39 +00:00
info = dict ( description = " ID of the nature " ) )
2011-04-03 11:28:29 +00:00
pokeathlon_stat_id = Column ( Integer , ForeignKey ( ' pokeathlon_stats.id ' ) , primary_key = True , nullable = False ,
2010-10-03 19:21:39 +00:00
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
2012-03-27 05:36:05 +00:00
class PalPark ( TableBase ) :
u """ Pal Park encounter info
"""
__tablename__ = ' pal_park '
__singlename__ = ' pal_park '
species_id = Column ( Integer , ForeignKey ( ' pokemon_species.id ' ) , primary_key = True ,
info = dict ( description = " ID of the Pokémon species this data pertains to " ) )
area = Column ( Enum ( ' forest ' , ' field ' , ' mountain ' , ' pond ' , ' sea ' , name = ' pal_park_areas ' ) , nullable = False ,
info = dict ( description = " The area in which this Pokémon can be found " ) )
base_score = Column ( Integer , nullable = False ,
info = dict ( description = " Value used in calculating the player ' s score in a Pal Park run " ) )
rate = Column ( Integer , nullable = False ,
info = dict ( description = " Base rate for encountering this Pokémon " ) )
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 '
2011-04-03 11:28:29 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
2010-10-03 19:21:39 +00:00
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 '
2011-04-03 11:28:29 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
2010-10-03 19:21:39 +00:00
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-04-03 16:34:44 +00:00
name = Column ( Unicode ( 16 ) , nullable = True , index = True ,
2011-03-24 05:17:02 +00:00
info = dict ( description = " The name " , format = ' plaintext ' , official = False ) ) ,
2011-04-03 16:34:44 +00:00
description = Column ( Unicode ( 512 ) , nullable = True ,
2011-03-24 05:17:02 +00:00
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 ) :
2011-04-29 21:16:53 +00:00
u """ A Pokémon. The core to this whole mess.
2011-08-30 03:36:06 +00:00
This table defines " Pokémon " the same way the games do : a form with
different types , moves , or other game - changing properties counts as a
different Pokémon . For example , this table contains four rows for Deoxys ,
but only one for Unown .
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 '
2011-04-03 11:28:29 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
2010-10-03 19:21:39 +00:00
info = dict ( description = u " A numeric ID " ) )
2011-04-29 21:16:53 +00:00
species_id = Column ( Integer , ForeignKey ( ' pokemon_species.id ' ) ,
info = dict ( description = u " ID of the species this Pokémon belongs to " ) )
2010-10-03 19:21:39 +00:00
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
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-12-09 02:20:21 +00:00
order = Column ( Integer , nullable = False , index = True ,
2011-04-29 21:16:53 +00:00
info = dict ( description = u " Order for sorting. Almost national order, except families are grouped together. " ) )
2011-04-30 16:01:43 +00:00
is_default = Column ( Boolean , nullable = False , index = True ,
info = dict ( description = u ' Set for exactly one pokemon used as the default for each species. ' ) )
2009-02-05 08:05:42 +00:00
2009-06-16 03:48:27 +00:00
@property
2011-04-29 23:12:56 +00:00
def name ( self ) :
2012-01-21 04:18:38 +00:00
u """ Returns a name for this Pokémon, specifiying the form iff it
represents a specific PokemonForm .
"""
if any ( not form . is_default for form in self . forms ) :
return self . species . name
else :
return self . default_form . pokemon_name or self . species . name
2009-06-21 05:32:37 +00:00
2011-09-02 18:01:53 +00:00
def stat ( self , stat_identifier ) :
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 .
"""
2011-09-02 18:01:53 +00:00
if isinstance ( stat_identifier , Stat ) :
stat_identifier = stat_identifier . identifier
2010-04-16 03:05:03 +00:00
for pokemon_stat in self . stats :
2011-09-02 18:01:53 +00:00
if pokemon_stat . stat . identifier == stat_identifier :
2010-04-16 03:05:03 +00:00
return pokemon_stat
2011-09-02 18:01:53 +00:00
raise KeyError ( u ' No stat named %s ' % stat_identifier )
2010-05-27 04:58:18 +00:00
@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 ' .
"""
2011-09-02 18:01:53 +00:00
phys = self . stat ( u ' attack ' )
spec = self . stat ( u ' special-attack ' )
2010-05-27 04:58:18 +00:00
diff = phys . base_stat - spec . base_stat
if diff > 5 :
return phys . stat . damage_class
elif diff < - 5 :
return spec . stat . damage_class
else :
return None
2010-04-16 03:05:03 +00:00
2009-02-05 08:05:42 +00:00
class PokemonAbility ( TableBase ) :
2010-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 ) :
2011-04-29 21:16:53 +00:00
u """ The number of a species in a particular Pokédex (e.g. Jigglypuff is #138 in Hoenn ' s ' dex)
2010-10-03 19:21:39 +00:00
"""
2009-02-05 08:05:42 +00:00
__tablename__ = ' pokemon_dex_numbers '
2011-04-29 21:16:53 +00:00
species_id = Column ( Integer , ForeignKey ( ' pokemon_species.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = u " ID of the species " ) )
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 ) :
2011-04-29 21:16:53 +00:00
u """ Maps an Egg group to a species; each species 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 '
2011-04-29 21:16:53 +00:00
species_id = Column ( Integer , ForeignKey ( ' pokemon_species.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = u " ID of the species " ) )
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 '
2011-04-12 05:57:49 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = u " A numeric ID " ) )
2011-04-29 21:16:53 +00:00
evolved_species_id = Column ( Integer , ForeignKey ( ' pokemon_species.id ' ) , nullable = False ,
info = dict ( description = u " The ID of the post-evolution species. " ) )
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). " ) )
2011-04-29 21:16:53 +00:00
party_species_id = Column ( Integer , ForeignKey ( ' pokemon_species.id ' ) , nullable = True ,
info = dict ( description = u " The ID of the species that must be present in the party. " ) )
trade_species_id = Column ( Integer , ForeignKey ( ' pokemon_species.id ' ) , nullable = True ,
info = dict ( description = u " The ID of the species for which this one must be traded. " ) )
2009-02-05 08:05:42 +00:00
2011-03-14 06:12:17 +00:00
class PokemonForm ( TableBase ) :
2011-08-30 03:36:06 +00:00
u """ An individual form of a Pokémon. This includes *every* variant (except
color differences ) of every Pokémon , regardless of how the games treat
them . Even Pokémon with no alternate forms have one row in this table , to
represent their lone " normal " form .
2010-11-29 23:51:50 +00:00
"""
__tablename__ = ' pokemon_forms '
__singlename__ = ' pokemon_form '
2011-04-03 11:28:29 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
2010-11-29 23:51:50 +00:00
info = dict ( description = u ' A unique ID for this form. ' ) )
2011-04-29 21:16:53 +00:00
form_identifier = Column ( Unicode ( 16 ) , nullable = True ,
2011-04-30 16:01:43 +00:00
info = dict ( description = u " An identifier of the form, uniue among a species. May be None for the default form of the species. " , format = ' identifier ' ) )
2011-04-29 21:16:53 +00:00
pokemon_id = Column ( Integer , ForeignKey ( ' pokemon.id ' ) , nullable = False , autoincrement = False ,
2010-11-29 23:51:50 +00:00
info = dict ( description = u ' The ID of the base Pokémon for this form. ' ) )
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 ,
2011-04-30 16:01:43 +00:00
info = dict ( description = u ' Set for exactly one form used as the default for each pokemon (not necessarily species). ' ) )
2011-04-29 21:16:53 +00:00
is_battle_only = Column ( Boolean , nullable = False ,
info = dict ( description = u ' Set iff the form can only appear in battle. ' ) )
2010-11-29 23:51:50 +00:00
order = Column ( Integer , nullable = False , autoincrement = False ,
info = dict ( description = u ' The order in which forms should be sorted. Multiple forms may have equal order, in which case they should fall back on sorting by name. ' ) )
@property
2011-04-29 21:16:53 +00:00
def name ( self ) :
return self . pokemon_name or self . species . name
2010-11-29 23:51:50 +00:00
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-04-29 23:12:56 +00:00
form_name = Column ( Unicode ( 32 ) , nullable = True , index = True ,
2011-04-29 21:16:53 +00:00
info = dict ( description = u " The full form name, e.g. ' Sky Forme ' , for pokémon with different forms " , format = ' plaintext ' , official = True ) ) ,
2011-04-29 23:12:56 +00:00
pokemon_name = Column ( Unicode ( 32 ) , nullable = True , index = True ,
2011-04-29 21:16:53 +00:00
info = dict ( description = u " The full pokémon name, e.g. ' Sky Shaymin ' , for pokémon with different forms " , format = ' plaintext ' , official = True ) ) ,
2011-03-24 05:17:02 +00:00
)
2012-02-11 12:08:54 +00:00
class PokemonFormGeneration ( TableBase ) :
u """ Links Pokémon forms to the generations they exist in """
__tablename__ = ' pokemon_form_generations '
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. ' ) )
generation_id = Column ( Integer , ForeignKey ( ' generations.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = u ' The ID of the generation. ' ) )
game_index = Column ( Integer , nullable = False ,
info = dict ( description = u ' The internal ID the games use for this form. ' ) )
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-29 21:15:28 +00:00
class PokemonGameIndex ( TableBase ) :
u """ The number of a Pokémon a game uses internally
"""
__tablename__ = ' pokemon_game_indices '
pokemon_id = Column ( Integer , ForeignKey ( ' pokemon.id ' ) , primary_key = True , autoincrement = False , nullable = False ,
info = dict ( description = u " Database ID of the Pokémon " ) )
generation_id = Column ( Integer , ForeignKey ( ' generations.id ' ) , primary_key = True , autoincrement = False , nullable = False ,
info = dict ( description = u " Database ID of the generation " ) )
game_index = Column ( Integer , nullable = False ,
info = dict ( description = u " Internal ID the generation ' s games use for the Pokémon " ) )
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
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-04-03 16:34:44 +00:00
name = Column ( Unicode ( 64 ) , nullable = True , index = True ,
2011-03-24 05:17:02 +00:00
info = dict ( description = " The name " , format = ' plaintext ' , official = False ) ) ,
2011-04-03 16:34:44 +00:00
description = Column ( Unicode ( 255 ) , nullable = True ,
2011-03-24 05:17:02 +00:00
info = dict ( description = u " A detailed description of how the method works " , format = ' plaintext ' ) ) ,
)
2011-03-14 06:12:17 +00:00
class PokemonShape ( TableBase ) :
2011-08-30 03:36:06 +00:00
u """ The shape of a Pokémon ' s body. Used for flavor in generation IV and V
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 '
2011-04-03 11:28:29 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
2010-10-03 19:21:39 +00:00
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-04-03 16:34:44 +00:00
name = Column ( Unicode ( 24 ) , nullable = True , index = True ,
2011-03-24 05:17:02 +00:00
info = dict ( description = " The name " , format = ' plaintext ' , official = False ) ) ,
2011-04-03 16:34:44 +00:00
awesome_name = Column ( Unicode ( 16 ) , nullable = True ,
2011-03-25 00:17:24 +00:00
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
2011-04-29 21:16:53 +00:00
class PokemonSpecies ( TableBase ) :
2011-08-30 03:36:06 +00:00
u """ A Pokémon species: the standard 1– 151. Or 649. Whatever.
2011-04-29 21:16:53 +00:00
"""
__tablename__ = ' pokemon_species '
__singlename__ = ' pokemon_species '
id = Column ( Integer , primary_key = True , nullable = False ,
info = dict ( description = u " A numeric ID " ) )
identifier = Column ( Unicode ( 20 ) , nullable = False ,
info = dict ( description = u " An identifier " , format = ' identifier ' ) )
generation_id = Column ( Integer , ForeignKey ( ' generations.id ' ) ,
info = dict ( description = u " ID of the generation this species first appeared in " ) )
evolves_from_species_id = Column ( Integer , ForeignKey ( ' pokemon_species.id ' ) , nullable = True ,
info = dict ( description = u " The species from which this one evolves " ) )
evolution_chain_id = Column ( Integer , ForeignKey ( ' evolution_chains.id ' ) ,
info = dict ( description = u " ID of the species ' evolution chain (a.k.a. family) " ) )
color_id = Column ( Integer , ForeignKey ( ' pokemon_colors.id ' ) , nullable = False ,
info = dict ( description = u " ID of this Pokémon ' s Pokédex color, as used for a gimmick search function in the games. " ) )
shape_id = Column ( Integer , ForeignKey ( ' pokemon_shapes.id ' ) , nullable = False ,
info = dict ( description = u " ID of this Pokémon ' s body shape, as used for a gimmick search function in the games. " ) )
habitat_id = Column ( Integer , ForeignKey ( ' pokemon_habitats.id ' ) , nullable = True ,
info = dict ( description = u " ID of this Pokémon ' s habitat, as used for a gimmick search function in the games. " ) )
gender_rate = Column ( Integer , nullable = False ,
info = dict ( description = u " The chance of this Pokémon being female, in eighths; or -1 for genderless " ) )
capture_rate = Column ( Integer , nullable = False ,
info = dict ( description = u " The base capture rate; up to 255 " ) )
base_happiness = Column ( Integer , nullable = False ,
info = dict ( description = u " The tameness when caught by a normal ball " ) )
is_baby = Column ( Boolean , nullable = False ,
info = dict ( description = u " True iff the Pokémon is a baby, i.e. a lowest-stage Pokémon that cannot breed but whose evolved form can. " ) )
hatch_counter = Column ( Integer , nullable = False ,
info = dict ( description = u " Initial hatch counter: one must walk 255 × (hatch_counter + 1) steps before this Pokémon ' s egg hatches, unless utilizing bonuses like Flame Body ' s " ) )
has_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. " ) )
growth_rate_id = Column ( Integer , ForeignKey ( ' growth_rates.id ' ) , nullable = False ,
info = dict ( description = " ID of the growth rate for this family " ) )
forms_switchable = Column ( Boolean , nullable = False ,
info = dict ( description = u " True iff a particular individual of this species can switch beween its different forms. " ) )
create_translation_table ( ' pokemon_species_names ' , PokemonSpecies , ' names ' ,
relation_lazy = ' joined ' ,
name = Column ( Unicode ( 20 ) , nullable = True , index = True ,
info = dict ( description = " The name " , format = ' plaintext ' , official = True , ripped = True ) ) ,
genus = Column ( Unicode ( 16 ) , nullable = True ,
info = dict ( description = u ' The short flavor text, such as " Seed " or " Lizard " ; usually affixed with the word " Pokémon " ' ,
official = True , format = ' plaintext ' ) ) ,
)
create_translation_table ( ' pokemon_species_flavor_summaries ' , PokemonSpecies , ' flavor_summaries ' ,
flavor_summary = Column ( Unicode ( 512 ) , nullable = True ,
info = dict ( description = u " Text containing facts from all flavor texts, for languages without official game translations " , official = False , format = ' plaintext ' , ripped = True ) ) ,
)
create_translation_table ( ' pokemon_species_prose ' , PokemonSpecies , ' prose ' ,
form_description = Column ( Unicode ( 1024 ) , nullable = True ,
info = dict ( description = u " Description of how the forms work " , format = ' markdown ' , string_getter = markdown . MarkdownString ) ) ,
)
class PokemonSpeciesFlavorText ( TableBase ) :
u """ In-game Pokédex descrption of a Pokémon.
"""
__tablename__ = ' pokemon_species_flavor_text '
summary_column = PokemonSpecies . flavor_summaries_table , ' flavor_summary '
species_id = Column ( Integer , ForeignKey ( ' pokemon_species.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = u " ID of the Pokémon " ) )
version_id = Column ( Integer , ForeignKey ( ' versions.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = u " ID of the version that has this flavor text " ) )
language_id = Column ( Integer , ForeignKey ( ' languages.id ' ) , primary_key = True , nullable = False ,
info = dict ( description = " The language " ) )
flavor_text = Column ( Unicode ( 255 ) , nullable = False ,
info = dict ( description = u " The flavor text " , official = True , format = ' gametext ' ) )
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 '
2011-04-03 11:28:29 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
2010-10-03 19:21:39 +00:00
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 '
2011-04-03 11:28:29 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
2010-10-03 19:21:39 +00:00
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 " ) )
2012-03-03 05:49:42 +00:00
game_index = Column ( Integer , nullable = True ,
info = dict ( description = u " The stat order the games use internally for the persistent stats. NULL for battle-only stats. " ) )
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-04-03 11:28:29 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
2011-03-12 14:42:41 +00:00
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 '
2011-04-03 11:28:29 +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
)
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 '
2011-04-03 11:28:29 +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
2011-03-29 21:15:28 +00:00
class TypeEfficacy ( TableBase ) :
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
"""
2011-03-29 21:15:28 +00:00
__tablename__ = ' type_efficacy '
damage_type_id = Column ( Integer , ForeignKey ( ' types.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = u " The ID of the damaging type. " ) )
target_type_id = Column ( Integer , ForeignKey ( ' types.id ' ) , primary_key = True , nullable = False , autoincrement = False ,
info = dict ( description = u " The ID of the defending Pokémon ' s type. " ) )
damage_factor = Column ( Integer , nullable = False ,
info = dict ( description = u " The multiplier, as a percentage of damage inflicted. " ) )
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 '
2011-04-03 11:28:29 +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
2011-03-29 21:15:28 +00:00
class VersionGroup ( TableBase ) :
u """ A group of versions, containing either two paired versions (such as Red
and Blue ) or a single game ( such as Yellow . )
"""
__tablename__ = ' version_groups '
2011-04-03 11:28:29 +00:00
id = Column ( Integer , primary_key = True , nullable = False ,
2011-03-29 21:15:28 +00:00
info = dict ( description = u " This version group ' s unique ID. " ) )
generation_id = Column ( Integer , ForeignKey ( ' generations.id ' ) , nullable = False ,
info = dict ( description = u " The ID of the generation the games in this group belong to. " ) )
2012-02-16 16:32:47 +00:00
pokedex_id = Column ( Integer , ForeignKey ( ' pokedexes.id ' ) , nullable = True ,
info = dict ( description = u " The ID of the regional Pokédex used in this version group. Null if not applicable. " ) )
2012-01-30 13:09:05 +00:00
order = Column ( Integer , nullable = True ,
info = dict ( description = u " Order for sorting. Almost by date of release, except similar versions are grouped together. " ) )
2011-03-29 21:15:28 +00:00
2012-02-05 23:43:47 +00:00
class VersionGroupPokemonMoveMethod ( TableBase ) :
u """ Maps a version group to a move learn methods it supports.
" Supporting " means simply that the method appears in the game .
For example , Breeding didn ' t exist in Gen.I, so it ' s not in this table .
"""
__tablename__ = ' version_group_pokemon_move_methods '
version_group_id = Column ( Integer , ForeignKey ( ' version_groups.id ' ) , primary_key = True , nullable = False ,
info = dict ( description = u " The ID of the version group. " ) )
pokemon_move_method_id = Column ( Integer , ForeignKey ( ' pokemon_move_methods.id ' ) , primary_key = True , nullable = False ,
info = dict ( description = u " The ID of the move method. " ) )
2011-03-29 21:15:28 +00:00
class VersionGroupRegion ( TableBase ) :
u """ Maps a version group to a region that appears in it. """
__tablename__ = ' version_group_regions '
2011-04-03 11:28:29 +00:00
version_group_id = Column ( Integer , ForeignKey ( ' version_groups.id ' ) , primary_key = True , nullable = False ,
2011-03-29 21:15:28 +00:00
info = dict ( description = u " The ID of the version group. " ) )
2011-04-03 11:28:29 +00:00
region_id = Column ( Integer , ForeignKey ( ' regions.id ' ) , primary_key = True , nullable = False ,
2011-03-29 21:15:28 +00:00
info = dict ( description = u " The ID of the region. " ) )
2009-02-24 07:31:35 +00:00
2010-05-01 21:33:11 +00:00
2011-04-28 10:01:56 +00:00
### Relationships down here, to avoid dependency ordering problems
2010-12-06 22:45:43 +00:00
2011-04-28 10:01:56 +00:00
Ability . changelog = relationship ( AbilityChangelog ,
2011-04-03 08:26:55 +00:00
order_by = AbilityChangelog . changed_in_version_group_id . desc ( ) ,
backref = backref ( ' ability ' , innerjoin = True , lazy = ' joined ' ) )
2011-04-28 10:01:56 +00:00
Ability . flavor_text = relationship ( AbilityFlavorText ,
2011-04-03 08:26:55 +00:00
order_by = AbilityFlavorText . version_group_id ,
backref = backref ( ' ability ' , innerjoin = True , lazy = ' joined ' ) )
2011-04-28 10:01:56 +00:00
Ability . generation = relationship ( Generation ,
2011-04-03 08:26:55 +00:00
innerjoin = True ,
backref = ' abilities ' )
2011-04-28 10:01:56 +00:00
AbilityChangelog . changed_in = relationship ( VersionGroup ,
2011-04-03 08:26:55 +00:00
innerjoin = True , lazy = ' joined ' ,
backref = ' ability_changelog ' )
2011-04-28 10:01:56 +00:00
AbilityFlavorText . version_group = relationship ( VersionGroup ,
2011-04-03 08:26:55 +00:00
innerjoin = True )
2011-04-28 10:01:56 +00:00
AbilityFlavorText . language = relationship ( Language ,
2011-04-03 08:26:55 +00:00
innerjoin = True , lazy = ' joined ' )
2011-04-28 10:01:56 +00:00
Berry . berry_firmness = relationship ( BerryFirmness ,
2011-04-03 08:26:55 +00:00
innerjoin = True ,
backref = ' berries ' )
2010-04-26 06:23:52 +00:00
Berry . firmness = association_proxy ( ' berry_firmness ' , ' name ' )
2011-04-28 10:01:56 +00:00
Berry . flavors = relationship ( BerryFlavor ,
2011-04-03 08:26:55 +00:00
order_by = BerryFlavor . contest_type_id ,
backref = backref ( ' berry ' , innerjoin = True ) )
2011-04-28 10:01:56 +00:00
Berry . natural_gift_type = relationship ( Type , innerjoin = True )
2010-04-26 06:23:52 +00:00
2011-04-28 10:01:56 +00:00
BerryFlavor . contest_type = relationship ( ContestType , innerjoin = True )
2010-04-26 06:23:52 +00:00
2009-09-16 03:04:22 +00:00
2011-04-28 10:01:56 +00:00
ContestCombo . first = relationship ( Move ,
2011-04-03 08:26:55 +00:00
primaryjoin = ContestCombo . first_move_id == Move . id ,
innerjoin = True , lazy = ' joined ' ,
backref = ' contest_combo_first ' )
2011-04-28 10:01:56 +00:00
ContestCombo . second = relationship ( Move ,
2011-04-03 08:26:55 +00:00
primaryjoin = ContestCombo . second_move_id == Move . id ,
innerjoin = True , lazy = ' joined ' ,
backref = ' contest_combo_second ' )
2009-12-09 22:35:29 +00:00
2011-04-28 10:01:56 +00:00
Encounter . condition_value_map = relationship ( EncounterConditionValueMap ,
2011-04-03 08:26:55 +00:00
backref = ' encounter ' )
2009-12-09 22:35:29 +00:00
Encounter . condition_values = association_proxy ( ' condition_value_map ' , ' condition_value ' )
2011-04-28 10:01:56 +00:00
Encounter . location_area = relationship ( LocationArea ,
2011-04-03 08:26:55 +00:00
innerjoin = True , lazy = ' joined ' ,
backref = ' encounters ' )
2011-04-28 10:01:56 +00:00
Encounter . pokemon = relationship ( Pokemon ,
2011-04-03 08:26:55 +00:00
innerjoin = True , lazy = ' joined ' ,
backref = ' encounters ' )
2011-04-28 10:01:56 +00:00
Encounter . version = relationship ( Version ,
2011-04-03 08:26:55 +00:00
innerjoin = True , lazy = ' joined ' ,
backref = ' encounters ' )
2011-04-28 10:01:56 +00:00
Encounter . slot = relationship ( EncounterSlot ,
2011-04-03 08:26:55 +00:00
innerjoin = True , lazy = ' joined ' ,
backref = ' encounters ' )
2011-04-28 10:01:56 +00:00
EncounterConditionValue . condition = relationship ( EncounterCondition ,
2011-04-03 08:26:55 +00:00
innerjoin = True , lazy = ' joined ' ,
backref = ' values ' )
2011-04-28 10:01:56 +00:00
EncounterConditionValueMap . condition_value = relationship ( EncounterConditionValue ,
2011-04-03 08:26:55 +00:00
innerjoin = True , lazy = ' joined ' ,
backref = ' encounter_map ' )
2009-05-01 13:20:18 +00:00
2011-04-28 10:01:56 +00:00
EncounterSlot . method = relationship ( EncounterMethod ,
2011-04-03 08:26:55 +00:00
innerjoin = True , lazy = ' joined ' ,
backref = ' slots ' )
2011-04-28 10:01:56 +00:00
EncounterSlot . version_group = relationship ( VersionGroup , innerjoin = True )
2009-05-01 13:20:18 +00:00
2011-04-28 10:01:56 +00:00
EvolutionChain . baby_trigger_item = relationship ( Item ,
2011-04-03 08:26:55 +00:00
backref = ' evolution_chains ' )
2010-04-26 11:27:55 +00:00
2010-01-25 04:39:33 +00:00
2011-04-28 10:01:56 +00:00
Experience . growth_rate = relationship ( GrowthRate ,
2011-04-03 08:26:55 +00:00
innerjoin = True , lazy = ' joined ' ,
backref = ' experience_table ' )
2011-04-28 10:01:56 +00:00
Generation . canonical_pokedex = relationship ( Pokedex ,
2011-04-03 08:26:55 +00:00
backref = ' canonical_for_generation ' )
2011-04-28 10:01:56 +00:00
Generation . versions = relationship ( Version ,
2011-04-03 08:26:55 +00:00
secondary = VersionGroup . __table__ ,
innerjoin = True )
2011-04-28 10:01:56 +00:00
Generation . main_region = relationship ( Region , innerjoin = True )
2011-04-03 08:26:55 +00:00
2011-04-28 10:01:56 +00:00
GrowthRate . max_experience_obj = relationship ( Experience ,
2011-04-03 08:26:55 +00:00
primaryjoin = and_ (
Experience . growth_rate_id == GrowthRate . id ,
Experience . level == 100 ) ,
uselist = False , innerjoin = True )
2010-05-03 08:00:05 +00:00
GrowthRate . max_experience = association_proxy ( ' max_experience_obj ' , ' experience ' )
2011-04-03 08:26:55 +00:00
2011-04-28 10:01:56 +00:00
Item . berry = relationship ( Berry ,
2011-04-03 08:26:55 +00:00
uselist = False ,
backref = ' item ' )
2011-04-28 10:01:56 +00:00
Item . flags = relationship ( ItemFlag ,
2011-04-03 08:26:55 +00:00
secondary = ItemFlagMap . __table__ )
2011-04-28 10:01:56 +00:00
Item . flavor_text = relationship ( ItemFlavorText ,
2011-04-03 08:26:55 +00:00
order_by = ItemFlavorText . version_group_id . asc ( ) ,
backref = backref ( ' item ' , innerjoin = True , lazy = ' joined ' ) )
2011-04-28 10:01:56 +00:00
Item . fling_effect = relationship ( ItemFlingEffect ,
2011-04-03 08:26:55 +00:00
backref = ' items ' )
2011-04-28 10:01:56 +00:00
Item . machines = relationship ( Machine ,
2011-04-03 08:26:55 +00:00
order_by = Machine . version_group_id . asc ( ) )
2011-04-28 10:01:56 +00:00
Item . category = relationship ( ItemCategory ,
2011-04-03 08:26:55 +00:00
innerjoin = True ,
backref = backref ( ' items ' , order_by = Item . identifier . asc ( ) ) )
2010-04-27 04:13:28 +00:00
Item . pocket = association_proxy ( ' category ' , ' pocket ' )
2010-04-26 06:23:52 +00:00
2011-04-28 10:01:56 +00:00
ItemCategory . pocket = relationship ( ItemPocket , innerjoin = True )
2011-04-03 08:26:55 +00:00
2011-04-28 10:01:56 +00:00
ItemFlavorText . version_group = relationship ( VersionGroup ,
2011-04-03 08:26:55 +00:00
innerjoin = True , lazy = ' joined ' )
2011-04-28 10:01:56 +00:00
ItemFlavorText . language = relationship ( Language ,
2011-04-03 08:26:55 +00:00
innerjoin = True , lazy = ' joined ' )
2011-04-28 10:01:56 +00:00
ItemGameIndex . item = relationship ( Item ,
2011-04-03 08:26:55 +00:00
innerjoin = True , lazy = ' joined ' ,
backref = ' game_indices ' )
2011-04-28 10:01:56 +00:00
ItemGameIndex . generation = relationship ( Generation ,
2011-04-03 08:26:55 +00:00
innerjoin = True , lazy = ' joined ' )
2010-04-27 04:13:28 +00:00
2011-04-28 10:01:56 +00:00
ItemPocket . categories = relationship ( ItemCategory ,
2011-04-03 08:26:55 +00:00
innerjoin = True ,
order_by = ItemCategory . identifier . asc ( ) )
2010-05-02 08:33:44 +00:00
2010-07-26 03:25:59 +00:00
2011-04-28 10:01:56 +00:00
Location . region = relationship ( Region ,
2011-04-03 08:26:55 +00:00
innerjoin = True ,
backref = ' locations ' )
2010-04-26 06:23:52 +00:00
2011-04-28 10:01:56 +00:00
LocationArea . location = relationship ( Location ,
2011-04-03 08:26:55 +00:00
innerjoin = True , lazy = ' joined ' ,
backref = ' areas ' )
2009-08-19 06:49:49 +00:00
2011-04-28 10:01:56 +00:00
LocationAreaEncounterRate . location_area = relationship ( LocationArea ,
2011-04-03 22:09:45 +00:00
innerjoin = True ,
backref = ' encounter_rates ' )
2011-04-28 10:01:56 +00:00
LocationAreaEncounterRate . method = relationship ( EncounterMethod ,
2011-04-03 22:09:45 +00:00
innerjoin = True )
2011-04-28 10:01:56 +00:00
LocationGameIndex . location = relationship ( Location ,
2011-04-03 08:26:55 +00:00
innerjoin = True , lazy = ' joined ' ,
backref = ' game_indices ' )
2011-04-28 10:01:56 +00:00
LocationGameIndex . generation = relationship ( Generation ,
2011-04-03 08:26:55 +00:00
innerjoin = True , lazy = ' joined ' )
2009-05-01 13:20:18 +00:00
2010-07-26 03:25:59 +00:00
2011-04-28 10:01:56 +00:00
Machine . item = relationship ( Item )
Machine . version_group = relationship ( VersionGroup ,
2011-04-03 08:26:55 +00:00
innerjoin = True , lazy = ' joined ' )
2009-08-10 06:07:23 +00:00
2011-04-28 10:01:56 +00:00
Move . changelog = relationship ( MoveChangelog ,
2010-12-06 23:10:52 +00:00
order_by = MoveChangelog . changed_in_version_group_id . desc ( ) ,
2011-04-03 08:26:55 +00:00
backref = backref ( ' move ' , innerjoin = True , lazy = ' joined ' ) )
2011-04-28 10:01:56 +00:00
Move . contest_effect = relationship ( ContestEffect ,
2011-04-03 08:26:55 +00:00
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 ' )
2011-04-28 10:01:56 +00:00
Move . contest_type = relationship ( ContestType ,
2011-04-03 08:26:55 +00:00
backref = ' moves ' )
2011-04-28 10:01:56 +00:00
Move . damage_class = relationship ( MoveDamageClass ,
2011-04-03 08:26:55 +00:00
innerjoin = True ,
backref = ' moves ' )
2009-09-14 15:29:05 +00:00
Move . flags = association_proxy ( ' move_flags ' , ' flag ' )
2011-04-28 10:01:56 +00:00
Move . flavor_text = relationship ( MoveFlavorText ,
2011-04-03 08:26:55 +00:00
order_by = MoveFlavorText . version_group_id , backref = ' move ' )
2011-04-28 10:01:56 +00:00
Move . generation = relationship ( Generation ,
2011-04-03 08:26:55 +00:00
innerjoin = True ,
backref = ' moves ' )
2011-04-28 10:01:56 +00:00
Move . machines = relationship ( Machine ,
2011-04-03 08:26:55 +00:00
backref = ' move ' )
2011-04-28 10:01:56 +00:00
Move . meta = relationship ( MoveMeta ,
2011-04-03 08:26:55 +00:00
uselist = False , innerjoin = True ,
backref = ' move ' )
2011-04-28 10:01:56 +00:00
Move . meta_stat_changes = relationship ( MoveMetaStatChange )
Move . move_effect = relationship ( MoveEffect ,
2011-04-03 08:26:55 +00:00
innerjoin = True ,
backref = ' moves ' )
2011-04-28 11:23:10 +00:00
Move . move_flags = relationship ( MoveFlagMap ,
2011-04-03 08:26:55 +00:00
backref = ' move ' )
2011-04-28 10:01:56 +00:00
Move . super_contest_effect = relationship ( SuperContestEffect ,
2011-04-03 08:26:55 +00:00
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 ' )
2011-04-28 10:01:56 +00:00
Move . target = relationship ( MoveTarget ,
2011-04-03 08:26:55 +00:00
innerjoin = True ,
backref = ' moves ' )
2011-04-28 10:01:56 +00:00
Move . type = relationship ( Type ,
2011-04-03 08:26:55 +00:00
innerjoin = True ,
backref = ' moves ' )
2011-03-25 03:44:08 +00:00
Move . effect = markdown . MoveEffectProperty ( ' effect ' )
2011-04-03 08:25:59 +00:00
Move . effect_map = markdown . MoveEffectPropertyMap ( ' effect_map ' )
2011-03-25 03:44:08 +00:00
Move . short_effect = markdown . MoveEffectProperty ( ' short_effect ' )
2011-04-03 08:25:59 +00:00
Move . short_effect_map = markdown . MoveEffectPropertyMap ( ' short_effect_map ' )
2009-07-28 02:09:11 +00:00
2011-04-28 10:01:56 +00:00
MoveChangelog . changed_in = relationship ( VersionGroup ,
2011-04-03 08:26:55 +00:00
innerjoin = True , lazy = ' joined ' ,
backref = ' move_changelog ' )
2011-04-28 10:01:56 +00:00
MoveChangelog . move_effect = relationship ( MoveEffect ,
2011-04-03 08:26:55 +00:00
backref = ' move_changelog ' )
2011-04-28 10:01:56 +00:00
MoveChangelog . type = relationship ( Type ,
2011-04-03 08:26:55 +00:00
backref = ' move_changelog ' )
2010-12-14 01:24:14 +00:00
2011-03-25 03:44:08 +00:00
MoveChangelog . effect = markdown . MoveEffectProperty ( ' effect ' )
2011-04-03 08:25:59 +00:00
MoveChangelog . effect_map = markdown . MoveEffectPropertyMap ( ' effect_map ' )
2011-03-25 03:44:08 +00:00
MoveChangelog . short_effect = markdown . MoveEffectProperty ( ' short_effect ' )
2011-04-03 08:25:59 +00:00
MoveChangelog . short_effect_map = markdown . MoveEffectPropertyMap ( ' short_effect_map ' )
2011-03-25 03:44:08 +00:00
2011-04-28 10:01:56 +00:00
MoveEffect . changelog = relationship ( MoveEffectChangelog ,
2011-02-10 07:37:41 +00:00
order_by = MoveEffectChangelog . changed_in_version_group_id . desc ( ) ,
2011-04-03 08:26:55 +00:00
backref = ' move_effect ' )
2009-11-09 01:00:45 +00:00
2011-04-28 10:01:56 +00:00
MoveEffectChangelog . changed_in = relationship ( VersionGroup ,
2011-04-03 08:26:55 +00:00
innerjoin = True , lazy = ' joined ' ,
backref = ' move_effect_changelog ' )
2011-04-28 11:23:10 +00:00
MoveFlagMap . flag = relationship ( MoveFlag , innerjoin = True , lazy = ' joined ' )
2011-04-03 08:26:55 +00:00
2011-04-28 10:01:56 +00:00
MoveFlavorText . version_group = relationship ( VersionGroup ,
2011-04-03 08:26:55 +00:00
innerjoin = True , lazy = ' joined ' )
2011-04-28 10:01:56 +00:00
MoveFlavorText . language = relationship ( Language ,
2011-04-03 08:26:55 +00:00
innerjoin = True , lazy = ' joined ' )
2011-04-28 10:01:56 +00:00
MoveMeta . category = relationship ( MoveMetaCategory ,
2011-04-03 08:26:55 +00:00
innerjoin = True , lazy = ' joined ' ,
backref = ' move_meta ' )
2011-04-28 10:01:56 +00:00
MoveMeta . ailment = relationship ( MoveMetaAilment ,
2011-04-03 08:26:55 +00:00
innerjoin = True , lazy = ' joined ' ,
backref = ' move_meta ' )
2011-04-28 10:01:56 +00:00
MoveMetaStatChange . stat = relationship ( Stat ,
2011-04-03 08:26:55 +00:00
innerjoin = True , lazy = ' joined ' ,
backref = ' move_meta_stat_changes ' )
2011-04-28 10:01:56 +00:00
Nature . decreased_stat = relationship ( Stat ,
2011-04-03 08:26:55 +00:00
primaryjoin = Nature . decreased_stat_id == Stat . id ,
innerjoin = True ,
backref = ' decreasing_natures ' )
2011-04-28 10:01:56 +00:00
Nature . increased_stat = relationship ( Stat ,
2011-04-03 08:26:55 +00:00
primaryjoin = Nature . increased_stat_id == Stat . id ,
innerjoin = True ,
backref = ' increasing_natures ' )
2011-04-28 10:01:56 +00:00
Nature . hates_flavor = relationship ( ContestType ,
2011-04-03 08:26:55 +00:00
primaryjoin = Nature . hates_flavor_id == ContestType . id ,
innerjoin = True ,
backref = ' hating_natures ' )
2011-04-28 10:01:56 +00:00
Nature . likes_flavor = relationship ( ContestType ,
2011-04-03 08:26:55 +00:00
primaryjoin = Nature . likes_flavor_id == ContestType . id ,
innerjoin = True ,
backref = ' liking_natures ' )
2011-04-28 10:01:56 +00:00
Nature . battle_style_preferences = relationship ( NatureBattleStylePreference ,
2011-04-03 08:26:55 +00:00
order_by = NatureBattleStylePreference . move_battle_style_id . asc ( ) ,
backref = ' nature ' )
2011-04-28 10:01:56 +00:00
Nature . pokeathlon_effects = relationship ( NaturePokeathlonStat ,
2011-04-03 08:26:55 +00:00
order_by = NaturePokeathlonStat . pokeathlon_stat_id . asc ( ) )
2011-03-06 08:00:40 +00:00
2011-04-28 10:01:56 +00:00
NatureBattleStylePreference . battle_style = relationship ( MoveBattleStyle ,
2011-04-03 08:26:55 +00:00
innerjoin = True , lazy = ' joined ' ,
backref = ' nature_preferences ' )
2011-03-06 08:00:40 +00:00
2011-04-28 10:01:56 +00:00
NaturePokeathlonStat . pokeathlon_stat = relationship ( PokeathlonStat ,
2011-04-03 08:26:55 +00:00
innerjoin = True , lazy = ' joined ' ,
backref = ' nature_effects ' )
2010-04-27 06:26:37 +00:00
2011-04-28 10:01:56 +00:00
Pokedex . region = relationship ( Region ,
2011-04-03 08:26:55 +00:00
innerjoin = True ,
backref = ' pokedexes ' )
2011-04-28 10:01:56 +00:00
Pokedex . version_groups = relationship ( VersionGroup ,
2011-04-03 08:26:55 +00:00
innerjoin = True ,
2012-01-30 17:17:00 +00:00
order_by = VersionGroup . order . asc ( ) ,
2011-04-03 08:26:55 +00:00
backref = ' pokedex ' )
2010-03-23 05:29:28 +00:00
2010-02-17 07:16:59 +00:00
2011-04-28 10:01:56 +00:00
Pokemon . all_abilities = relationship ( Ability ,
2010-11-25 08:09:06 +00:00
secondary = PokemonAbility . __table__ ,
2011-04-03 08:26:55 +00:00
order_by = PokemonAbility . slot . asc ( ) ,
innerjoin = True ,
2011-03-25 03:44:08 +00:00
backref = backref ( ' all_pokemon ' ,
2011-04-03 08:26:55 +00:00
order_by = Pokemon . order . asc ( ) ,
2011-03-25 03:44:08 +00:00
) ,
2010-11-25 08:09:06 +00:00
)
2011-04-28 10:01:56 +00:00
Pokemon . abilities = relationship ( Ability ,
2010-11-25 08:09:06 +00:00
secondary = PokemonAbility . __table__ ,
primaryjoin = and_ (
Pokemon . id == PokemonAbility . pokemon_id ,
PokemonAbility . is_dream == False ,
) ,
2011-04-03 08:26:55 +00:00
innerjoin = True ,
order_by = PokemonAbility . slot . asc ( ) ,
2011-03-25 03:44:08 +00:00
backref = backref ( ' pokemon ' ,
2011-04-03 08:26:55 +00:00
order_by = Pokemon . order . asc ( ) ,
2011-03-25 03:44:08 +00:00
) ,
2010-11-25 08:09:06 +00:00
)
2011-04-28 10:01:56 +00:00
Pokemon . dream_ability = relationship ( Ability ,
2010-11-25 08:09:06 +00:00
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
)
2011-04-28 10:01:56 +00:00
Pokemon . forms = relationship ( PokemonForm ,
2011-04-29 21:16:53 +00:00
primaryjoin = Pokemon . id == PokemonForm . pokemon_id ,
2012-02-29 00:02:01 +00:00
order_by = ( PokemonForm . order . asc ( ) , PokemonForm . form_identifier . asc ( ) ) ,
lazy = ' joined ' )
2011-04-28 10:01:56 +00:00
Pokemon . default_form = relationship ( PokemonForm ,
2011-04-03 08:26:55 +00:00
primaryjoin = and_ (
2011-04-29 21:16:53 +00:00
Pokemon . id == PokemonForm . pokemon_id ,
2011-04-03 08:26:55 +00:00
PokemonForm . is_default == True ) ,
2011-04-30 16:01:43 +00:00
uselist = False , lazy = ' joined ' )
2011-04-28 10:01:56 +00:00
Pokemon . items = relationship ( PokemonItem ,
2011-04-03 08:26:55 +00:00
backref = ' pokemon ' )
2011-04-28 10:01:56 +00:00
Pokemon . stats = relationship ( PokemonStat ,
2011-04-03 08:26:55 +00:00
innerjoin = True ,
order_by = PokemonStat . stat_id . asc ( ) ,
backref = ' pokemon ' )
2011-04-29 23:12:56 +00:00
Pokemon . species = relationship ( PokemonSpecies ,
innerjoin = True ,
backref = ' pokemon ' )
2011-04-28 10:01:56 +00:00
Pokemon . types = relationship ( Type ,
2011-03-25 03:44:08 +00:00
secondary = PokemonType . __table__ ,
2011-04-29 23:12:56 +00:00
innerjoin = True , lazy = ' joined ' ,
2011-03-25 03:44:08 +00:00
order_by = PokemonType . slot . asc ( ) ,
2011-04-03 08:26:55 +00:00
backref = backref ( ' pokemon ' , order_by = Pokemon . order ) )
2009-03-02 03:40:02 +00:00
2011-04-28 10:01:56 +00:00
PokemonDexNumber . pokedex = relationship ( Pokedex ,
2011-04-03 08:26:55 +00:00
innerjoin = True , lazy = ' joined ' )
2009-03-02 03:40:02 +00:00
2011-04-28 10:01:56 +00:00
PokemonEvolution . trigger = relationship ( EvolutionTrigger ,
2011-04-03 08:26:55 +00:00
innerjoin = True , lazy = ' joined ' ,
backref = ' evolutions ' )
2011-04-28 10:01:56 +00:00
PokemonEvolution . trigger_item = relationship ( Item ,
2010-05-25 04:29:04 +00:00
primaryjoin = PokemonEvolution . trigger_item_id == Item . id ,
2011-04-03 08:26:55 +00:00
backref = ' triggered_evolutions ' )
2011-04-28 10:01:56 +00:00
PokemonEvolution . held_item = relationship ( Item ,
2010-05-25 04:29:04 +00:00
primaryjoin = PokemonEvolution . held_item_id == Item . id ,
2011-04-03 08:26:55 +00:00
backref = ' required_for_evolutions ' )
2011-04-28 10:01:56 +00:00
PokemonEvolution . location = relationship ( Location ,
2011-04-03 08:26:55 +00:00
backref = ' triggered_evolutions ' )
2011-04-28 10:01:56 +00:00
PokemonEvolution . known_move = relationship ( Move ,
2011-04-03 08:26:55 +00:00
backref = ' triggered_evolutions ' )
2011-04-29 21:16:53 +00:00
PokemonEvolution . party_species = relationship ( PokemonSpecies ,
primaryjoin = PokemonEvolution . party_species_id == PokemonSpecies . id ,
2011-04-03 08:26:55 +00:00
backref = ' triggered_evolutions ' )
2011-04-29 21:16:53 +00:00
PokemonEvolution . trade_species = relationship ( PokemonSpecies ,
primaryjoin = PokemonEvolution . trade_species_id == PokemonSpecies . id )
2011-04-03 08:26:55 +00:00
2011-04-28 10:01:56 +00:00
PokemonForm . pokemon = relationship ( Pokemon ,
2011-04-29 21:16:53 +00:00
primaryjoin = PokemonForm . pokemon_id == Pokemon . id ,
2011-04-30 16:01:43 +00:00
innerjoin = True , lazy = ' joined ' )
2011-04-29 23:12:56 +00:00
PokemonForm . species = association_proxy ( ' pokemon ' , ' species ' )
2011-04-28 10:01:56 +00:00
PokemonForm . version_group = relationship ( VersionGroup ,
2011-04-03 08:26:55 +00:00
innerjoin = True )
2011-04-28 10:01:56 +00:00
PokemonForm . pokeathlon_stats = relationship ( PokemonFormPokeathlonStat ,
2011-04-03 08:26:55 +00:00
order_by = PokemonFormPokeathlonStat . pokeathlon_stat_id ,
backref = ' pokemon_form ' )
2011-04-28 10:01:56 +00:00
PokemonFormPokeathlonStat . pokeathlon_stat = relationship ( PokeathlonStat ,
2011-04-03 08:26:55 +00:00
innerjoin = True , lazy = ' joined ' )
2012-02-11 12:08:54 +00:00
PokemonFormGeneration . form = relationship ( PokemonForm ,
backref = backref ( ' pokemon_form_generations ' ,
order_by = PokemonFormGeneration . generation_id ) )
PokemonFormGeneration . generation = relationship ( Generation ,
backref = backref ( ' pokemon_form_generations ' ,
order_by = PokemonFormGeneration . game_index ) )
2011-04-28 10:01:56 +00:00
PokemonItem . item = relationship ( Item ,
2011-04-03 08:26:55 +00:00
innerjoin = True , lazy = ' joined ' ,
backref = ' pokemon ' )
2011-04-28 10:01:56 +00:00
PokemonItem . version = relationship ( Version ,
2011-04-03 08:26:55 +00:00
innerjoin = True , lazy = ' joined ' )
2011-04-28 10:01:56 +00:00
PokemonMove . pokemon = relationship ( Pokemon ,
2011-04-03 08:26:55 +00:00
innerjoin = True , lazy = ' joined ' ,
backref = ' pokemon_moves ' )
2011-04-28 10:01:56 +00:00
PokemonMove . version_group = relationship ( VersionGroup ,
2011-04-03 08:26:55 +00:00
innerjoin = True , lazy = ' joined ' )
2011-04-28 10:01:56 +00:00
PokemonMove . machine = relationship ( Machine ,
2011-04-03 08:26:55 +00:00
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 ,
backref = ' pokemon_moves ' )
2011-04-28 10:01:56 +00:00
PokemonMove . move = relationship ( Move ,
2011-04-03 08:26:55 +00:00
innerjoin = True , lazy = ' joined ' ,
backref = ' pokemon_moves ' )
2011-04-28 10:01:56 +00:00
PokemonMove . method = relationship ( PokemonMoveMethod ,
2011-04-03 08:26:55 +00:00
innerjoin = True , lazy = ' joined ' )
2009-07-18 06:33:36 +00:00
2011-04-28 10:01:56 +00:00
PokemonStat . stat = relationship ( Stat ,
2011-04-03 08:26:55 +00:00
innerjoin = True , lazy = ' joined ' )
2010-11-29 23:51:50 +00:00
2011-04-30 16:01:43 +00:00
PokemonSpecies . parent_species = relationship ( PokemonSpecies ,
2011-04-29 21:16:53 +00:00
primaryjoin = PokemonSpecies . evolves_from_species_id == PokemonSpecies . id ,
remote_side = [ PokemonSpecies . id ] ,
backref = ' child_species ' )
PokemonSpecies . evolutions = relationship ( PokemonEvolution ,
primaryjoin = PokemonSpecies . id == PokemonEvolution . evolved_species_id ,
backref = backref ( ' evolved_species ' , innerjoin = True , lazy = ' joined ' ) )
PokemonSpecies . flavor_text = relationship ( PokemonSpeciesFlavorText ,
order_by = PokemonSpeciesFlavorText . version_id . asc ( ) ,
2011-04-29 23:12:56 +00:00
backref = ' species ' )
PokemonSpecies . growth_rate = relationship ( GrowthRate ,
innerjoin = True ,
backref = ' evolution_chains ' )
2011-04-30 16:01:43 +00:00
PokemonSpecies . habitat = relationship ( PokemonHabitat ,
2011-04-29 23:12:56 +00:00
backref = ' species ' )
2011-04-30 16:01:43 +00:00
PokemonSpecies . color = relationship ( PokemonColor ,
2011-04-29 23:12:56 +00:00
innerjoin = True ,
backref = ' species ' )
PokemonSpecies . egg_groups = relationship ( EggGroup ,
secondary = PokemonEggGroup . __table__ ,
innerjoin = True ,
order_by = PokemonEggGroup . egg_group_id . asc ( ) ,
backref = backref ( ' species ' , order_by = Pokemon . order . asc ( ) ) )
PokemonSpecies . forms = relationship ( PokemonForm ,
secondary = Pokemon . __table__ ,
primaryjoin = PokemonSpecies . id == Pokemon . species_id ,
secondaryjoin = Pokemon . id == PokemonForm . pokemon_id ,
2011-04-30 16:01:43 +00:00
order_by = ( PokemonForm . order . asc ( ) , PokemonForm . form_identifier . asc ( ) ) )
PokemonSpecies . default_form = relationship ( PokemonForm ,
secondary = Pokemon . __table__ ,
primaryjoin = and_ ( PokemonSpecies . id == Pokemon . species_id ,
Pokemon . is_default == True ) ,
secondaryjoin = and_ ( Pokemon . id == PokemonForm . pokemon_id ,
PokemonForm . is_default == True ) ,
uselist = False )
PokemonSpecies . default_pokemon = relationship ( Pokemon ,
primaryjoin = and_ (
PokemonSpecies . id == Pokemon . species_id ,
Pokemon . is_default == True ) ,
uselist = False , lazy = ' joined ' )
2011-04-29 23:12:56 +00:00
PokemonSpecies . evolution_chain = relationship ( EvolutionChain ,
innerjoin = True ,
2011-04-30 16:01:43 +00:00
backref = backref ( ' species ' , order_by = PokemonSpecies . id . asc ( ) ) )
2011-04-29 23:12:56 +00:00
PokemonSpecies . dex_numbers = relationship ( PokemonDexNumber ,
innerjoin = True ,
order_by = PokemonDexNumber . pokedex_id . asc ( ) ,
backref = ' species ' )
PokemonSpecies . generation = relationship ( Generation ,
innerjoin = True ,
backref = ' species ' )
PokemonSpecies . shape = relationship ( PokemonShape ,
innerjoin = True ,
backref = ' species ' )
2012-03-27 05:36:05 +00:00
PokemonSpecies . pal_park = relationship ( PalPark ,
uselist = False ,
backref = ' species ' )
2011-04-29 23:12:56 +00:00
PokemonSpeciesFlavorText . version = relationship ( Version , innerjoin = True , lazy = ' joined ' )
PokemonSpeciesFlavorText . language = relationship ( Language , innerjoin = True , lazy = ' joined ' )
2010-11-30 07:29:14 +00:00
2011-04-28 10:01:56 +00:00
Region . generation = relationship ( Generation , uselist = False )
Region . version_group_regions = relationship ( VersionGroupRegion ,
2011-04-03 08:26:55 +00:00
order_by = VersionGroupRegion . version_group_id . asc ( ) ,
backref = ' region ' )
2012-01-30 17:17:00 +00:00
Region . version_groups = relationship ( VersionGroup ,
secondary = VersionGroupRegion . __table__ ,
order_by = VersionGroup . order )
2009-06-16 03:48:02 +00:00
2009-07-27 06:03:10 +00:00
2011-04-28 10:01:56 +00:00
Stat . damage_class = relationship ( MoveDamageClass ,
2011-04-03 08:26:55 +00:00
backref = ' stats ' )
2009-03-02 03:40:02 +00:00
2011-04-28 10:01:56 +00:00
StatHint . stat = relationship ( Stat ,
2011-04-03 08:26:55 +00:00
innerjoin = True ,
backref = ' hints ' )
2010-01-25 04:39:33 +00:00
2010-05-27 04:58:18 +00:00
2011-04-28 10:01:56 +00:00
SuperContestCombo . first = relationship ( Move ,
2011-04-03 08:26:55 +00:00
primaryjoin = SuperContestCombo . first_move_id == Move . id ,
innerjoin = True , lazy = ' joined ' ,
backref = ' super_contest_combo_first ' )
2011-04-28 10:01:56 +00:00
SuperContestCombo . second = relationship ( Move ,
2011-04-03 08:26:55 +00:00
primaryjoin = SuperContestCombo . second_move_id == Move . id ,
innerjoin = True , lazy = ' joined ' ,
backref = ' super_contest_combo_second ' )
2011-03-06 09:13:19 +00:00
2009-09-16 03:04:22 +00:00
2011-04-28 10:01:56 +00:00
Type . damage_efficacies = relationship ( TypeEfficacy ,
2011-04-03 08:26:55 +00:00
primaryjoin = Type . id == TypeEfficacy . damage_type_id ,
backref = backref ( ' damage_type ' , innerjoin = True , lazy = ' joined ' ) )
2011-04-28 10:01:56 +00:00
Type . target_efficacies = relationship ( TypeEfficacy ,
2011-04-03 08:26:55 +00:00
primaryjoin = Type . id == TypeEfficacy . target_type_id ,
backref = backref ( ' target_type ' , innerjoin = True , lazy = ' joined ' ) )
2011-04-28 10:01:56 +00:00
Type . generation = relationship ( Generation ,
2011-04-03 08:26:55 +00:00
innerjoin = True ,
backref = ' types ' )
2011-04-28 10:01:56 +00:00
Type . damage_class = relationship ( MoveDamageClass ,
2011-04-03 08:26:55 +00:00
backref = ' types ' )
2009-05-01 13:20:18 +00:00
2009-12-20 06:41:40 +00:00
2009-08-27 05:30:07 +00:00
Version . generation = association_proxy ( ' version_group ' , ' generation ' )
2009-08-04 02:59:39 +00:00
2011-04-28 10:01:56 +00:00
VersionGroup . versions = relationship ( Version ,
2011-04-03 08:26:55 +00:00
innerjoin = True ,
order_by = Version . id ,
backref = backref ( ' version_group ' , lazy = ' joined ' ) )
2011-04-28 10:01:56 +00:00
VersionGroup . generation = relationship ( Generation ,
2011-04-03 08:26:55 +00:00
innerjoin = True , lazy = ' joined ' ,
2012-01-30 17:17:00 +00:00
backref = backref ( ' version_groups ' , order_by = VersionGroup . order ) )
2011-04-28 10:01:56 +00:00
VersionGroup . version_group_regions = relationship ( VersionGroupRegion ,
2011-04-03 08:26:55 +00:00
backref = ' version_group ' )
2010-01-25 04:39:33 +00:00
VersionGroup . regions = association_proxy ( ' version_group_regions ' , ' region ' )
2012-02-05 23:43:47 +00:00
VersionGroup . pokemon_move_methods = relationship ( PokemonMoveMethod ,
secondary = VersionGroupPokemonMoveMethod . __table__ ,
primaryjoin = and_ ( VersionGroup . id == VersionGroupPokemonMoveMethod . version_group_id ) ,
secondaryjoin = and_ ( PokemonMoveMethod . id == VersionGroupPokemonMoveMethod . pokemon_move_method_id ) ,
backref = " version_groups " )
2012-02-29 05:32:10 +00:00
VersionGroup . machines = relationship ( Machine ,
innerjoin = True ,
order_by = Machine . machine_number )
2012-02-05 23:43:47 +00:00
VersionGroupPokemonMoveMethod . version_group = relationship ( VersionGroup ,
backref = ' version_group_move_methods ' )
VersionGroupPokemonMoveMethod . pokemon_move_method = relationship ( PokemonMoveMethod ,
backref = ' version_group_move_methods ' )