X-Git-Url: http://git.veekun.com/zzz-pokedex.git/blobdiff_plain/409006486eb3a3a0ef3f720bbbdf215df0ba6fb8..fe7fe27d1e5df6918fb9cf11d64686f85948c564:/pokedex/db/markdown.py?ds=inline diff --git a/pokedex/db/markdown.py b/pokedex/db/markdown.py index 2bef876..616830a 100644 --- a/pokedex/db/markdown.py +++ b/pokedex/db/markdown.py @@ -56,29 +56,16 @@ class MarkdownString(object): """ return self.source_text +def _markdownify_effect_text(move, effect_text): + effect_text = effect_text.replace( + u'$effect_chance', + unicode(move.effect_chance), + ) -class _MoveEffects(object): - def __init__(self, effect_column, move): - self.effect_column = effect_column - self.move = move - - def __contains__(self, lang): - return lang in self.move.move_effect.prose - - def __getitem__(self, lang): - try: - effect_text = getattr(self.move.move_effect.prose[lang], self.effect_column) - except AttributeError: - return None - effect_text = effect_text.replace( - u'$effect_chance', - unicode(self.move.effect_chance), - ) - - return MarkdownString(effect_text) + return MarkdownString(effect_text) class MoveEffectProperty(object): - """Property that wraps a move effect. Used like this: + """Property that wraps move effects. Used like this: MoveClass.effect = MoveEffectProperty('effect') @@ -87,34 +74,27 @@ class MoveEffectProperty(object): This class also performs simple substitution on the effect, replacing `$effect_chance` with the move's actual effect chance. + + Use `MoveEffectPropertyMap` for dict-like association proxies. """ def __init__(self, effect_column): self.effect_column = effect_column - def __get__(self, move, move_class): - if move is None: - # Don't crash with getattr on the class - return NotImplemented - return _MoveEffects(self.effect_column, move)['en'] - -class MoveEffectsProperty(object): - """Property that wraps move effects. Used like this: - - MoveClass.effects = MoveEffectProperty('effect') + def __get__(self, obj, cls): + prop = getattr(obj.move_effect, self.effect_column) + return _markdownify_effect_text(obj, prop) - some_move.effects[lang] # returns a MarkdownString - some_move.effects[lang].as_html # returns a chunk of HTML - - This class also performs simple substitution on the effect, replacing - `$effect_chance` with the move's actual effect chance. +class MoveEffectPropertyMap(MoveEffectProperty): + """Similar to `MoveEffectProperty`, but works on dict-like association + proxies. """ - - def __init__(self, effect_column): - self.effect_column = effect_column - - def __get__(self, move, move_class): - return _MoveEffects(self.effect_column, move) + def __get__(self, obj, cls): + prop = getattr(obj.move_effect, self.effect_column) + newdict = dict(prop) + for key in newdict: + newdict[key] = _markdownify_effect_text(obj, newdict[key]) + return newdict class MarkdownColumn(sqlalchemy.types.TypeDecorator): """Generic SQLAlchemy column type for Markdown text.