Esempio n. 1
0
def get_questions(page, category):
    if category == 'all':
        questions = Question.query.all()
    else:
        if Category.query.filter(Category.type == category).count() == 0:
            abort(404)
        category_id = Category.query.filter(
            Category.type == category).first().id
        questions = Question.query.filter(
            Question.category_id == category_id).all()

    questions_per_page = 10
    first_question_index = (page - 1) * questions_per_page
    if len(questions) < first_question_index:
        abort(404)

    return get_response({
        'current_category':
        category,
        'categories':
        get_categories_as_list(),
        'question_count':
        len(questions),
        'questions':
        serialize_questions(
            questions[first_question_index:(first_question_index +
                                            questions_per_page)])
    })
Esempio n. 2
0
def add_result(user_id, question_id, success):
    verify_user_id_exist_or_neg1(user_id)
    verify_question_id_exists(question_id)

    question = Question.query.filter(Question.id == question_id).first()
    question.answer_attempt_count = Question.answer_attempt_count + 1
    if success:
        question.answer_success_count = Question.answer_success_count + 1

    if user_id != -1:
        user = User.query.filter(User.id == user_id).first()
        user.questions_total = User.questions_total + 1
        if success:
            user.questions_won = User.questions_won + 1

    db.session.commit()

    question_info = serialize_question(
        Question.query.filter(Question.id == question_id).first())
    if user_id != -1:
        user_info = serialize_user(
            User.query.filter(User.id == user_id).first())
    else:
        user_info = 'None'

    return get_response({'user': user_info, 'question': question_info})
Esempio n. 3
0
def create_new_category(name):
    verify_category_does_not_exists(name)

    new_category = Category()
    new_category.type = name
    save(new_category)

    return get_response({'category': name})
Esempio n. 4
0
def delete_question(question_id):
    q = Question.query.get(question_id)

    if q is None:
        abort(404)
    delete(q)

    return get_response({'question': question_id})
Esempio n. 5
0
def create_test(name):
    test = Test.query.filter(Test.name == name).first()
    if test is None:
        new_test = Test()
        new_test.name = name
        db.session.add(new_test)
        db.session.commit()
        return get_response(test_to_short_string(new_test))
    else:
        abort(422, "Name already exists")
Esempio n. 6
0
def create_new_user(name):
    verify_user_does_not_exist(name)

    new_user = User()
    new_user.name = name
    new_user.questions_total = 0
    new_user.questions_won = 0
    save(new_user)

    return get_response({'name': name})
Esempio n. 7
0
def register_test_result(user_id, test_id, time, value):
    if Test.query.get(test_id) is None:
        abort(404)

    result = TestResult()
    result.user_id = user_id
    result.test_id = test_id
    result.time = parser.parse(time)
    result.value = value
    db.session.add(result)
    db.session.commit()
    return get_response(result_to_short_string(result))
Esempio n. 8
0
def get_random_question(used_questions, category):
    if category == 'all':
        questions = Question.query.filter(
            ~Question.id.in_(used_questions)).all()
    else:
        verify_category_exists(category)
        cat_id = Category.query.filter(Category.type == category).first().id
        questions = Question.query.filter(Question.category_id == cat_id) \
            .filter(~Question.id.in_(used_questions)).all()

    if len(questions) <= 0:
        abort(404, 'No suitable question found')

    return get_response(serialize_question(random.choice(questions)))
Esempio n. 9
0
def delete_result(user_id, result_id):
    result = TestResult.query.get(result_id)
    if result is None:
        abort(404)
    if result.user_id != user_id:
        raise AuthError(
            {
                'code': 'unauthorized',
                'description': 'Test result belongs to another user.'
            }, 403)

    db.session.delete(result)
    db.session.commit()

    return get_response(result_id)
Esempio n. 10
0
def create_new_question(question, answer, category, difficulty):
    verify_category_exists(category)
    if difficulty not in [1, 2, 3, 4, 5]:
        abort(422, "difficulty must be an integer between 1-5")

    cat_id = Category.query.filter(Category.type == category).first().id

    new_question = Question()
    new_question.question = question
    new_question.answer = answer
    new_question.category_id = cat_id
    new_question.difficulty = difficulty
    new_question.answer_success_count = 0
    new_question.answer_attempt_count = 0
    save(new_question)

    return get_response({'question': serialize_question(new_question)})
Esempio n. 11
0
def search_for_question(search_term, page):
    questions = Question.query.filter(
        Question.question.ilike('%{}%'.format(search_term))).all()

    questions_per_page = 10
    first_question_index = (page - 1) * questions_per_page
    if len(questions) <= first_question_index:
        abort(404)

    return get_response({
        'question_count':
        len(questions),
        'questions':
        serialize_questions(
            questions[first_question_index:(first_question_index +
                                            questions_per_page)])
    })
Esempio n. 12
0
def update_test_result(user_id, result_id, time, value):
    result = TestResult.query.get(result_id)
    if result is None:
        abort(404)
    if result.user_id != user_id:
        raise AuthError(
            {
                'code': 'unauthorized',
                'description': 'Test result belongs to another user.'
            }, 403)

    if time != '':
        result.time = parser.parse(time)
    if value != '':
        result.value = value
    db.session.commit()

    return get_response(result_to_short_string(result))
Esempio n. 13
0
def get_test_results(user_id, test_id):
    if User.query.get(user_id) is None:
        abort(404)

    if test_id == -1:
        results = TestResult.query.filter(TestResult.user_id == user_id).all()
    else:
        if Test.query.get(test_id) is None:
            abort(404)
        results = TestResult.query.filter(
            TestResult.user_id == user_id).filter(
                TestResult.test_id == test_id).all()

    data = []
    for result in results:
        data.append(result_to_short_string(result))

    # todo: test_id and user_id are duplications...
    return get_response({'test_id': test_id, 'user_id': user_id, 'data': data})
Esempio n. 14
0
def get_categories():
    return get_response(get_categories_as_list())
Esempio n. 15
0
def unprocessable(error):
    return get_response("Unprocessable: " + error.description, False, 422), 422
Esempio n. 16
0
def get_users():
    data = []
    for user in User.query.all():
        data.append(serialize_user(user))
    return get_response(data)
Esempio n. 17
0
def get_tests():
    tests = Test.query.all()
    data = []
    for test in tests:
        data.append(test_to_short_string(test))
    return get_response(data)
Esempio n. 18
0
def update_profile(user_id, name):
    user = User.query.get(user_id)
    user.name = name
    db.session.commit()
    return get_response(user_to_short_string(user))
Esempio n. 19
0
def get_profile(user_id):
    user = User.query.get(user_id)
    return get_response(user_to_short_string(user))
Esempio n. 20
0
def get_available_users():
    users = User.query.all()
    result = []
    for user in users:
        result.append(user_to_short_string(user))
    return get_response(result)
Esempio n. 21
0
def not_found(error):
    return get_response("Not found: " + error.description, False, 404), 404
Esempio n. 22
0
def not_implemented(error):
    return get_response("Not Implemented: " + error.description, False,
                        501), 501