Ejemplo n.º 1
0
 def test_voting_security(self):
     answer = Answer.create(question = self.question, text= 'fake answer', creator = self.avatar)
     self.app.get(answer.voting_url+'/up', status = 302)
     answer = Answer.get(answer.key())
     self.assertEqual(answer.vote_count, 1)
     self.logout()
     self.app.get(answer.voting_url+'/down', status = 302)
     answer = Answer.get(answer.key())
     self.assertEqual(answer.vote_count, 1)        
Ejemplo n.º 2
0
def set_answer(puzzle_name, player_id, question, content_type, content):
    player = Player.get(Player.id == player_id)
    puzzle, _ = Puzzle.get_or_create(name=puzzle_name)
    try:
        answer = Answer.get(
            (Answer.puzzle == puzzle) & (Answer.player == player))
    except Answer.DoesNotExist:
        answer = Answer(puzzle=puzzle, player=player)

    answer.question = question

    if content_type == 'text':
        answer.value = content
    elif content_type == 'image':
        filename = '%s_%s.jpg' %  (puzzle.id, player.id)
        path = '%s/images/%s' % (STATIC_DIR, filename)
        with open(path, 'wb') as fp:
            fp.write(content)
        answer.value = 'image:' + filename
    elif content_type == 'video':
        filename = '%s_%s.mp4' %  (puzzle.id, player.id)
        path = '%s/videos/%s' % (STATIC_DIR, filename)
        with open(path, 'wb') as fp:
            fp.write(content)
        answer.value = 'video:' + filename

    answer.save()
Ejemplo n.º 3
0
def set_answer(puzzle_name, player_id, question, content_type, content):
    player = Player.get(Player.id == player_id)
    puzzle, _ = Puzzle.get_or_create(name=puzzle_name)
    try:
        answer = Answer.get((Answer.puzzle == puzzle)
                            & (Answer.player == player))
    except Answer.DoesNotExist:
        answer = Answer(puzzle=puzzle, player=player)

    answer.question = question

    if content_type == 'text':
        answer.value = content
    elif content_type == 'image':
        filename = '%s_%s.jpg' % (puzzle.id, player.id)
        path = '%s/images/%s' % (STATIC_DIR, filename)
        with open(path, 'wb') as fp:
            fp.write(content)
        answer.value = 'image:' + filename
    elif content_type == 'video':
        filename = '%s_%s.mp4' % (puzzle.id, player.id)
        path = '%s/videos/%s' % (STATIC_DIR, filename)
        with open(path, 'wb') as fp:
            fp.write(content)
        answer.value = 'video:' + filename

    answer.save()
def statistics(request):
    _check_for_admin()
    question = get_question()
    chooses = question.chooses
    answers = dict((ans.key().id(), {"answer":ans, "count": 0, "chooses":[]}) for ans in question.answers)

    for choose in chooses:
        for answer in Answer.get(choose.answers):
            if answer:
                key = answer.key()
                id = key.id()
                answers[id]["count"] += 1
                answer = Answer.get(key)
                answers[id]["chooses"] = Choose.gql("where answers = :1 order by when", answer).fetch(200)

    return render_to_response('statistics.html', {
            'answers':sorted(answers.items(), key=lambda a:a[1]["count"], reverse=True)
        }, context_instance=RequestContext(request))
Ejemplo n.º 5
0
def question(request, qid, **kwargs):

    session_data = {}
    if local.request.session['uid']:
        session_data['user_name'] = User.get_by_id(local.request.session['uid'])[0].name
    try:
        question = Question.get_by_id(qid)[0]
    except TypeError:
        return not_found(request)

    question.views += 1
    question.update()

    edit = question.latest_edit()[0]
    category = Category.get_by_id(question.category_id)[0]
    user = User.get_by_id(question.user_id)[0]
    
    question_data =  {
        'title' : str(edit.title),
        'category' : str(category.name),
        'votes' : str(question.votes),
        'author' : str(user.name),
        'author_id' : str(user.id),
        'avatar' : str(user.avatar),
        'views' : str(question.views),
        'created' : str(question.created),
        'body' : str(edit.body),
        }
    
    try:
        answers_list = Answer.get(where=('question_id', qid), order=('votes', 'desc'))
        answer_data_list = []
        for answer in answers_list:
            answer_user = User.get_by_id(answer.user_id)[0]
            answer_edit = AnswerEdit.get(where=('answer_id', answer.id))[0]
            answer_data = {
                'votes' : str(answer.votes),
                'author' : str(answer_user.name),
                'author_id' : str(answer_user.id),
                'avatar' : str(answer_user.avatar),
                'body' : str(answer_edit.body),
                }
            answer_data_list.append(answer_data)
            
    except TypeError:
        answer_data_list = False
    
    page = Page(session_data)
    page.title = str(edit.title) + ' - Meno'
    content = Thread(question_data, answer_data_list)
    local.request.session['last'] = request.base_url
    return respond(page.render(content))
Ejemplo n.º 6
0
def flag_answer_as_off_topic(answer_id):
    if not (current_user.is_staff or current_user.is_admin):
        return abort(HTTPStatus.BAD_REQUEST)

    answer_id = int(answer_id)
    answer = Answer.get(answer_id)
    if not answer:
        return abort(HTTPStatus.NOT_FOUND)

    answer.flag_as_off_topic()

    return jsonify({
        'answer': answer_id,
        'is_off_topic': answer.is_off_topic,
    })
Ejemplo n.º 7
0
def inc_answer_rating_view(answer_id):
    answer_id = int(answer_id)

    answer = Answer.get(answer_id)
    if not answer:
        return abort(HTTPStatus.NOT_FOUND)

    if answer.is_off_topic:
        return abort(HTTPStatus.BAD_REQUEST)

    answer.increment_rating()

    return jsonify({
        'answer': answer_id,
        'rating': answer.rating,
    })
Ejemplo n.º 8
0
def user(request, uid, **kwargs):
    user = User.get_by_id(uid)[0]
    questions = Question.get(where=('author_id', uid), order=('date_created', 'desc'))
    try:
        user.questions_count = len(questions)
    except TypeError:
        user.questions_count = None

    answers = Answer.get(where=('author_id', uid), order=('date_created', 'desc'))
    try:
        user.answers_count = len(questions)
    except TypeError:
        user.answers_count = None

    session_data = {}
    if local.request.session['uid']:
        session_data['user_name'] = User.get_by_id(local.request.session['uid'])[0].name

    page = Page(session_data)
    page.title = user.name + "'s Profile - Meno"
    content = Profile(user)

    local.request.session['last'] = request.base_url
    return respond(page.render(content))