def get(self, request, format=None): """ Return profile of user """ user = request.user statusCode = status.HTTP_200_OK name = user.first_name + ' ' + user.last_name avatar = bw_get_thumbnail( user.profile.get_avatar(), '21x21').url return Response({'username': user.username, 'name': name, 'avatar': avatar}, statusCode)
def get(self, request, slug, format=None): """ Get a Problem with given slug """ try: problem = get_object_or_none( Poll, article__slug=slug ) if not problem: return Response( { "error": True, "message": "No such Poll" } ) my_response = get_object_or_none( PollResponse, user_id=request.user.id, poll_id=problem.id ) user = problem.article.author name = user.first_name + ' ' + user.last_name avatar = bw_get_thumbnail( user.profile.get_avatar(), '21x21').url content = render_to_string('bw_restapi/problem_description.html', { 'problem': problem }) answerMap = problem.get_ordered_answers() answers = [] num_abstentions = problem.pollresponse_set.filter(answer__isnull=True).count() my_answer = None if my_response: my_answer = { 'public': my_response.public } if my_response.answer: my_answer['answer'] = my_response.answer.answer_text else: my_answer['answer'] = "Abstain" for answer in answerMap: if answer.answer_count > 0: if answer.answer_text.lower() == my_answer['answer'].lower(): my_answer['count'] = answer.answer_count; answers.append( { 'text': answer.answer_text, 'count':answer.answer_count } ) item = { 'my_answer': my_answer, 'num_answers': problem.article.num_poll_responses, 'abstentions': num_abstentions, 'num_abstentions': num_abstentions, 'answers': answers, 'slug': problem.article.slug, 'description': content, 'type': problem.poll_type, 'lin_str': problem.hand.lin_str(), 'author': name, 'avatar': avatar, 'scoring': problem.scoring, 'vulnerability': problem.vul, 'auction': problem.auction, 'dealer': problem.dealer } item["error"] = False return Response( item ) except Exception as e: return Response( { "error": True, "message": e.message } )
def post(self, request, format=None): """ Get Recent Published Problems """ try: start = int(request.POST.get( "start", 0)) end = int(request.POST.get( "end", 0)) end = end+1 recent_polls = Poll.objects.filter(article__author_id=request.user.id).exclude(article__unpublished=True).exclude(poll_type='Basic').order_by('-created')[start:end] answers = [] for poll in recent_polls: num_abstentions = poll.pollresponse_set.filter(answer__isnull=True).count() num_answers = poll.article.num_poll_responses user = poll.article.author name = user.first_name + ' ' + user.last_name avatar = bw_get_thumbnail( user.profile.get_avatar(), '21x21').url answerMap = poll.get_ordered_answers() all_answers = [] for item in answerMap: if item.answer_count > 0: itemPercent = int( 100.0 * float( item.answer_count ) / (num_answers - num_abstentions) + 0.5 ) all_answers.append( { 'text': item.answer_text, 'count':item.answer_count, 'percent': itemPercent } ) my_response = get_object_or_none( PollResponse, user_id=request.user.id, poll_id=poll.id ) my_answer = None if my_response: my_answer = { 'public': my_response.public } if my_response.answer: my_answer['count'] = my_response.answer.answer_count my_answer['answer'] = my_response.answer.answer_text else: my_answer['count'] = num_abstentions my_answer['answer'] = "Abstain" item = { 'type': poll.poll_type, 'slug': poll.article.slug, 'lin_str': poll.hand.lin_str(), 'num_answers': num_answers, 'num_abstentions': num_abstentions, 'avatar': avatar, 'author': name, 'answers': all_answers, 'my_answer': my_answer } answers.append(item) return Response( { "error": False, "recent_answers": answers } ) except Exception as e: return Response( { "error": True, "message": e.message } )
def post(self, request): serializer = self.serializer_class(data=request.data) serializer.is_valid(raise_exception=True) user = serializer.validated_data['user'] msg = serializer.validated_data['msg'] error = serializer.validated_data['error'] tokenKey = '' name = '' avatar = '' if not error: token, created = Token.objects.get_or_create(user=user) tokenKey = token.key name = user.first_name + ' ' + user.last_name avatar = bw_get_thumbnail( user.profile.get_avatar(), '21x21').url return Response( {'error': error, 'token': tokenKey, 'message': msg, 'name': name, 'avatar': avatar} )
def post(self, request, format=None): """ Return next voting problem of user """ try: exclude_slug = request.POST.get( 'exclude', None ); all_problems = Poll.objects.exclude( poll_type='Basic' ) all_problems = all_problems.exclude( article__unpublished=True ) all_problems = all_problems.exclude( article__deleted=True ) all_problems = all_problems.filter( article__author__profile__verification_status=Profile.VERIFICATION_STATUS_VERIFIED ) if request.user.is_authenticated(): my_answers = [a for a in PollResponse.objects.filter(user_id=request.user.id).exclude( poll__poll_type='Basic' ).values_list('poll_id',flat=True)] my_ignores = [i for i in Ignore.objects.filter( user_id=request.user.id, articles=True ).values_list( 'ignored_user', flat=True )] available_problems = all_problems.exclude( id__in=my_answers ) available_problems = available_problems.exclude( article__author_id__in=my_ignores ) else: available_problems = all_problems if exclude_slug: available_problems = available_problems.exclude( article__slug=exclude_slug ) site_settings = SitewideSettings.objects.get_singleton(request) sample_strategy_names = [ "Sampling from all problems", "Written by %d most popular people" % site_settings.num_popular_people, "Written by people I'm following" ] pdf = [site_settings.frontpage_problem_everyone_weight, site_settings.frontpage_problem_popular_weight] if request.user.is_authenticated(): pdf.append(site_settings.frontpage_problem_following_weight) cdf = compute_cdf( pdf ) sample_strategy = sample_cdf( cdf ) initial_sample_strategy_name = sample_strategy_names[sample_strategy] while True: strategy_problems = get_strategy_problems( request.user, available_problems, site_settings.num_popular_people, sample_strategy ) if strategy_problems.exists() or sample_strategy == 0: break; sample_strategy -= 1 sample_strategy_name = sample_strategy_names[sample_strategy] sample_likelihood = 0 if sample_strategy == 0: sample_likelihood = cdf[0] elif sample_strategy > 0: sample_likelihood = cdf[sample_strategy] - cdf[sample_strategy-1] num_problems = strategy_problems.count() if num_problems > 0: import random, math uniform = random.random() exponential = - math.log(uniform) / 15 # fudge factor from experiments idx = min( int( exponential * num_problems ), num_problems-1 ) problem = strategy_problems.order_by('-article__publish_date')[idx] user = problem.article.author name = user.first_name + ' ' + user.last_name avatar = bw_get_thumbnail( user.profile.get_avatar(), '21x21').url content = render_to_string('bw_restapi/problem_description.html', { 'problem': problem }) return Response({"error": False, 'alldone': False, 'slug': problem.article.slug, 'description': content, 'type': problem.poll_type, 'lin_str': problem.hand.lin_str(), 'author': name, 'avatar': avatar, 'scoring': problem.scoring, 'vulnerability': problem.vul, 'auction': problem.auction, 'dealer': problem.dealer}) else: return Response({"error": False, 'alldone': True}) except Exception as e: return Response( { "error": True, "message": e.message } )