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)
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 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))
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))
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, })
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, })
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))