Ejemplo n.º 1
0
def get_word(title):
    if not is_emoji(title):
        return jsonify({'error': 'Title must be a combination of up to 3 emoji'})

    try:
        word = db.session.query(Word).\
            options(joinedload('definitions')).\
            filter_by(title=title).one()
    except NoResultFound as ex:
        word = Word()
        word.title = title
        db.session.add(word)
        db.session.commit()

    res_word = word.as_dict()

    def format_definition(definition):
        formatted = definition.as_dict()

        user = definition.user.as_dict()
        del user['oauth_token']
        del user['oauth_token_secret']
        formatted['user'] = user

        votes = definition.votes
        upvotes = 0
        downvotes = 0
        for vote in votes:
            if vote.vote is 1:
                upvotes += 1
            else:
                downvotes += 1
        formatted['upvotes'] = upvotes
        formatted['downvotes'] = downvotes

        return formatted

    definitions = []
    for definition in word.definitions:
        formatted = format_definition(definition)
        definitions.append(formatted)

    def def_comp(definition):
        return definition['upvotes'] - definition['downvotes']

    sorted_definitions = sorted(definitions, key=def_comp, reverse=True)

    res_word['definitions'] = sorted_definitions
    return jsonify({ 'word': res_word })