def _get_card_set_data(user_id, collection_name, set_name):
    cards_in_set = list(
        Card.filter({
            'card_set': set_name
        }).order_by('number').run())

    user_hash = {'user_id': user_id}
    if collection_name:
        user_hash['collection_id'] = _get_collection_id(
            user_id, collection_name)

    user_cards_data = list(
        UserCard.filter(r.row['count'] > 0).filter(user_hash).run())

    for card in cards_in_set:
        card['edition_counts'] = {}
        for edition in card['editions']:
            edition_superset = edition['type'].split('-')[0]
            user_card_data = list(
                filter(
                    lambda user_card:
                    (user_card['card_code'], user_card['edition_superset']) ==
                    (card['card_code'], edition_superset), user_cards_data))
            card['edition_counts'][edition_superset] = reduce(
                lambda left, right: {'count': left['count'] + right['count']},
                user_card_data)['count'] if user_card_data else 0

    return {
        'normalized_set_name': _normalized_card_set(set_name),
        'set_name': set_name,
        'cards': cards_in_set,
        'editions':
        _user_set_editions_in_order(_normalized_card_set(set_name)),
        'edition_keys': _set_editions_in_order(_normalized_card_set(set_name)),
        'collection_name': collection_name
    }
def refresh_fulltext_search_field():
    cards = Card.filter(r.row.has_fields('fulltext')).run()
    for card in cards:
        fulltext_string = _check(card)
        Card.get(card['id']).update({'fulltext': fulltext_string})