Example #1
0
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
Example #2
0
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))
Example #4
0
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))