Split up MoveEffectProperty; don't detect dict proxies.

(It didn't work anyway!)
This commit is contained in:
Eevee 2011-04-03 01:25:59 -07:00
parent adbd3b628f
commit 50b3adf949
2 changed files with 17 additions and 16 deletions

View file

@ -72,12 +72,10 @@ class MoveEffectProperty(object):
some_move.effect # returns a MarkdownString some_move.effect # returns a MarkdownString
some_move.effect.as_html # returns a chunk of HTML some_move.effect.as_html # returns a chunk of HTML
This class attempts to detect if the wrapped property is a dict-based
association proxy, and will act like such a dict if so. Don't rely on it
for querying, of course.
This class also performs simple substitution on the effect, replacing This class also performs simple substitution on the effect, replacing
`$effect_chance` with the move's actual effect chance. `$effect_chance` with the move's actual effect chance.
Use `MoveEffectPropertyMap` for dict-like association proxies.
""" """
def __init__(self, effect_column): def __init__(self, effect_column):
@ -85,16 +83,19 @@ class MoveEffectProperty(object):
def __get__(self, obj, cls): def __get__(self, obj, cls):
prop = getattr(obj.move_effect, self.effect_column) prop = getattr(obj.move_effect, self.effect_column)
if isinstance(prop, dict): return _markdownify_effect_text(obj, prop)
# Looks like a dict proxy; markdownify everyone
class MoveEffectPropertyMap(MoveEffectProperty):
"""Similar to `MoveEffectProperty`, but works on dict-like association
proxies.
"""
def __get__(self, obj, cls):
prop = getattr(obj.move_effect, self.effect_column)
newdict = dict(prop) newdict = dict(prop)
for key in newdict: for key in newdict:
newdict[key] = _markdownify_effect_text(obj, newdict[key]) newdict[key] = _markdownify_effect_text(obj, newdict[key])
return newdict return newdict
# Otherwise, scalar prop. Boring
return _markdownify_effect_text(obj, prop)
class MarkdownColumn(sqlalchemy.types.TypeDecorator): class MarkdownColumn(sqlalchemy.types.TypeDecorator):
"""Generic SQLAlchemy column type for Markdown text. """Generic SQLAlchemy column type for Markdown text.

View file

@ -1781,18 +1781,18 @@ Move.target = relation(MoveTarget, backref='moves')
Move.type = relation(Type, backref='moves') Move.type = relation(Type, backref='moves')
Move.effect = markdown.MoveEffectProperty('effect') Move.effect = markdown.MoveEffectProperty('effect')
Move.effect_map = markdown.MoveEffectProperty('effect_map') Move.effect_map = markdown.MoveEffectPropertyMap('effect_map')
Move.short_effect = markdown.MoveEffectProperty('short_effect') Move.short_effect = markdown.MoveEffectProperty('short_effect')
Move.short_effect_map = markdown.MoveEffectProperty('short_effect_map') Move.short_effect_map = markdown.MoveEffectPropertyMap('short_effect_map')
MoveChangelog.changed_in = relation(VersionGroup, backref='move_changelog') MoveChangelog.changed_in = relation(VersionGroup, backref='move_changelog')
MoveChangelog.move_effect = relation(MoveEffect, backref='move_changelog') MoveChangelog.move_effect = relation(MoveEffect, backref='move_changelog')
MoveChangelog.type = relation(Type, backref='move_changelog') MoveChangelog.type = relation(Type, backref='move_changelog')
MoveChangelog.effect = markdown.MoveEffectProperty('effect') MoveChangelog.effect = markdown.MoveEffectProperty('effect')
MoveChangelog.effect_map = markdown.MoveEffectProperty('effect_map') MoveChangelog.effect_map = markdown.MoveEffectPropertyMap('effect_map')
MoveChangelog.short_effect = markdown.MoveEffectProperty('short_effect') MoveChangelog.short_effect = markdown.MoveEffectProperty('short_effect')
MoveChangelog.short_effect_map = markdown.MoveEffectProperty('short_effect_map') MoveChangelog.short_effect_map = markdown.MoveEffectPropertyMap('short_effect_map')
MoveEffect.category_map = relation(MoveEffectCategoryMap) MoveEffect.category_map = relation(MoveEffectCategoryMap)
MoveEffect.categories = association_proxy('category_map', 'category') MoveEffect.categories = association_proxy('category_map', 'category')