Make PokemonForm.pokemon an actual relation

This commit is contained in:
Petr Viktorin 2011-04-13 22:44:50 +03:00 committed by Eevee
parent 27d33556d4
commit 0f7feab591

View file

@ -32,7 +32,7 @@ from sqlalchemy.ext.associationproxy import association_proxy
from sqlalchemy.orm import backref, relation from sqlalchemy.orm import backref, relation
from sqlalchemy.orm.session import Session from sqlalchemy.orm.session import Session
from sqlalchemy.orm.interfaces import AttributeExtension from sqlalchemy.orm.interfaces import AttributeExtension
from sqlalchemy.sql import and_ from sqlalchemy.sql import and_, or_
from sqlalchemy.schema import ColumnDefault from sqlalchemy.schema import ColumnDefault
from sqlalchemy.types import * from sqlalchemy.types import *
@ -1319,13 +1319,6 @@ class PokemonForm(TableBase):
order = Column(Integer, nullable=False, autoincrement=False, 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.')) info=dict(description=u'The order in which forms should be sorted. Multiple forms may have equal order, in which case they should fall back on sorting by name.'))
@property
def pokemon(self):
u"""Returns the Pokémon for this form, using the form base as fallback.
"""
return self.unique_pokemon or self.form_base_pokemon
@property @property
def full_name(self): def full_name(self):
u"""Returns the full name of this form, e.g. "Plant Cloak".""" u"""Returns the full name of this form, e.g. "Plant Cloak"."""
@ -2060,6 +2053,12 @@ PokemonForm.form_base_pokemon = relation(Pokemon,
PokemonForm.unique_pokemon = relation(Pokemon, PokemonForm.unique_pokemon = relation(Pokemon,
primaryjoin=PokemonForm.unique_pokemon_id==Pokemon.id, primaryjoin=PokemonForm.unique_pokemon_id==Pokemon.id,
backref=backref('unique_form', uselist=False)) backref=backref('unique_form', uselist=False))
PokemonForm.pokemon = relation(Pokemon,
primaryjoin=or_(
PokemonForm.unique_pokemon_id==Pokemon.id,
and_(PokemonForm.unique_pokemon_id==None,
PokemonForm.form_base_pokemon_id==Pokemon.id)
), uselist=False)
PokemonForm.version_group = relation(VersionGroup, PokemonForm.version_group = relation(VersionGroup,
innerjoin=True) innerjoin=True)
PokemonForm.form_group = association_proxy('form_base_pokemon', 'form_group') PokemonForm.form_group = association_proxy('form_base_pokemon', 'form_group')