Example #1
0
def add_word(word):
    try:
        existing_word = db.session.query(Word).filter_by(title=word).one()
        return jsonify({'error': 'Word already exists'})
    except NoResultFound as ex:
        try:
            new_word = Word()
            new_word.title = word
            db.session.add(new_word)
            db.session.commit()
            return jsonify({'id': new_word.id})
        except ValueError as ex:
            return jsonify({'error': str(ex)})
Example #2
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 })