X-Git-Url: http://git.veekun.com/zzz-pokedex.git/blobdiff_plain/d2880d4f03e6192e08f6a9eb70c485027de0fe8a..095fdd7d58c012cbe6345d369d00c26b8159e935:/pokedex/db/tables.py diff --git a/pokedex/db/tables.py b/pokedex/db/tables.py index fcb1c1b..9553349 100644 --- a/pokedex/db/tables.py +++ b/pokedex/db/tables.py @@ -32,7 +32,7 @@ from sqlalchemy.ext.associationproxy import association_proxy from sqlalchemy.orm import backref, relation from sqlalchemy.orm.session import Session from sqlalchemy.orm.interfaces import AttributeExtension -from sqlalchemy.sql import and_ +from sqlalchemy.sql import and_, or_ from sqlalchemy.schema import ColumnDefault from sqlalchemy.types import * @@ -1100,12 +1100,6 @@ class Pokemon(TableBase): ### Stuff to handle alternate Pokémon forms @property - def form(self): - u"""Returns the Pokémon's form, using its default form as fallback.""" - - return self.unique_form or self.default_form - - @property def is_base_form(self): u"""Returns True iff the Pokémon is the base form for its species, e.g. Land Shaymin. @@ -1320,13 +1314,6 @@ class PokemonForm(TableBase): 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 def full_name(self): u"""Returns the full name of this form, e.g. "Plant Cloak".""" @@ -2028,6 +2015,14 @@ Pokemon.types = relation(Type, innerjoin=True, order_by=PokemonType.slot.asc(), backref=backref('pokemon', order_by=Pokemon.order)) +Pokemon.form = relation(PokemonForm, + primaryjoin=or_( + PokemonForm.unique_pokemon_id==Pokemon.id, + and_(PokemonForm.unique_pokemon_id==None, + PokemonForm.form_base_pokemon_id==Pokemon.id, + PokemonForm.is_default==True) + ), + uselist=False) PokemonDexNumber.pokedex = relation(Pokedex, innerjoin=True, lazy='joined') @@ -2060,6 +2055,12 @@ PokemonForm.form_base_pokemon = relation(Pokemon, PokemonForm.unique_pokemon = relation(Pokemon, primaryjoin=PokemonForm.unique_pokemon_id==Pokemon.id, 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, innerjoin=True) PokemonForm.form_group = association_proxy('form_base_pokemon', 'form_group')