def with_fields(card, fields=None, precision=1): ''' returns a dictionary of card attributes filtered using the {key: bool} dictionary fields. keys are entries in finder.models.returnable_card_fields, such as: fields= { 'colors': True, 'cmc': True, } Any omitted fields are assumed False. If fields is None, all fields are returned. Some fields are formatted for clarity. ''' if fields is None: include_field = lambda key: True else: include_field = lambda key: fields.get(key, False) filtered_results = {} for key, field in models.returnable_card_fields.iteritems(): if include_field(key): value = getattr(card, field, None) filtered_results[key] = value #================= # post-processing #================= #if include_field('formats'): # Generate a list of strings regarding the cards' legality in each format # Format: "[Legality] in [Format]" # Don't tag cards that are too old for a format as banned in that format. #raise NotImplementedError("formats not calculated yet!") if 'rulings' in filtered_results: text = filtered_results['rulings'] text = util.sanitize(text) filtered_results['rulings'] = text.split(u'\n') def scale_value(field): if field in filtered_results: value = filtered_results[field] formatted_value = util.format_scaled_value(value, card.processed_scale, precision=precision) filtered_results[field] = formatted_value scale_value('cmc') scale_value('power') scale_value('toughness') # Clean up empty strings as null for key in filtered_results: if filtered_results[key] == "": filtered_results[key] = None return filtered_results
def convert_row(row, dst, scale=10): '''Convert a src row into one or more dst cards''' from finder import util name = util.sanitize(row.name) attrs = {dkey: getattr(row, skey) for skey, dkey in field_conversion.iteritems()} # Split card, process both halves if u'//' in name: for side in sides: dst.session.add(to_card(attrs, scale=scale, split=side)) else: dst.session.add(to_card(attrs, scale=scale))
def convert_row(row, dst, scale=10): '''Convert a src row into one or more dst cards''' from finder import util name = util.sanitize(row.name) attrs = { dkey: getattr(row, skey) for skey, dkey in field_conversion.iteritems() } # Split card, process both halves if u'//' in name: for side in sides: dst.session.add(to_card(attrs, scale=scale, split=side)) else: dst.session.add(to_card(attrs, scale=scale))