def vote_smart_rating_list_view(request): messages_on_stage = get_messages(request) rating_list_found = False try: rating_list = VoteSmartRating.objects.order_by('-timeSpan')[:1000] # Descending order, and limited to 1000 if len(rating_list): rating_list_found = True except VotesmartApiError as error_instance: # Catch the error message coming back from Vote Smart and pass it in the status error_message = error_instance.args status = "EXCEPTION_RAISED: {error_message}".format(error_message=error_message) print_to_log(logger=logger, exception_message_optional=status) # election_list = Election.objects.order_by('-election_day_text') if rating_list_found: template_values = { 'messages_on_stage': messages_on_stage, 'rating_list': rating_list, # 'election_list': election_list, # 'google_civic_election_id': google_civic_election_id, } else: template_values = { 'messages_on_stage': messages_on_stage, # 'election_list': election_list, # 'google_civic_election_id': google_civic_election_id, } return render(request, 'import_export_vote_smart/rating_list.html', template_values)
def vote_smart_candidate_list_view(request): authority_required = {'verified_volunteer'} # admin, verified_volunteer if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) messages_on_stage = get_messages(request) candidate_list = [] candidate_list_found = False try: candidate_list = VoteSmartCandidate.objects.order_by('lastName')[:1000] # Descending order, and limited to 1000 if len(candidate_list): candidate_list_found = True except VotesmartApiError as error_instance: # Catch the error message coming back from Vote Smart and pass it in the status error_message = error_instance.args status = "EXCEPTION_RAISED: {error_message}".format(error_message=error_message) print_to_log(logger=logger, exception_message_optional=status) # election_list = Election.objects.order_by('-election_day_text') if candidate_list_found: template_values = { 'messages_on_stage': messages_on_stage, 'candidate_list': candidate_list, } else: template_values = { 'messages_on_stage': messages_on_stage, } return render(request, 'import_export_vote_smart/candidate_list.html', template_values)
def import_group_ratings_view(request): # state_code = request.GET.get('state_code', 'NA') # Default to national # category_id = request.GET.get('category_id', 0) # Retrieve each group so we can request the ratings for each group get_sig_group_count = 0 get_sig_error_message_count = 0 special_interest_group_list = VoteSmartSpecialInterestGroup.objects.order_by('name') for one_group in special_interest_group_list: special_interest_group_id = one_group.sigId one_group_results = retrieve_vote_smart_ratings_by_group_into_local_db(special_interest_group_id) if not one_group_results['success']: print_to_log(logger=logger, exception_message_optional=one_group_results['status']) get_sig_error_message_count += 1 else: get_sig_group_count += 1 messages.add_message(request, messages.INFO, "Ratings from {get_sig_group_count} " "Special Interest Groups retrieved. " "(errors: {get_sig_error_message_count})" "".format(get_sig_group_count=get_sig_group_count, get_sig_error_message_count=get_sig_error_message_count)) return HttpResponseRedirect(reverse('import_export_vote_smart:vote_smart_rating_list', args=()))
def vote_smart_candidate_list_view(request): authority_required = {'verified_volunteer'} # admin, verified_volunteer if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) messages_on_stage = get_messages(request) candidate_list = [] candidate_list_found = False try: candidate_list = VoteSmartCandidate.objects.order_by( 'lastName')[:1000] # Descending order, and limited to 1000 if len(candidate_list): candidate_list_found = True except VotesmartApiError as error_instance: # Catch the error message coming back from Vote Smart and pass it in the status error_message = error_instance.args status = "EXCEPTION_RAISED: {error_message}".format( error_message=error_message) print_to_log(logger=logger, exception_message_optional=status) # election_list = Election.objects.order_by('-election_day_text') if candidate_list_found: template_values = { 'messages_on_stage': messages_on_stage, 'candidate_list': candidate_list, } else: template_values = { 'messages_on_stage': messages_on_stage, } return render(request, 'import_export_vote_smart/candidate_list.html', template_values)
def import_group_ratings_view(request): authority_required = {'admin'} # admin, verified_volunteer if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) # state_code = request.GET.get('state_code', 'NA') # Default to national # category_id = request.GET.get('category_id', 0) # Retrieve each group so we can request the ratings for each group get_sig_group_count = 0 get_sig_error_message_count = 0 special_interest_group_list = VoteSmartSpecialInterestGroup.objects.order_by( 'name') for one_group in special_interest_group_list: special_interest_group_id = one_group.sigId one_group_results = retrieve_vote_smart_ratings_by_group_into_local_db( special_interest_group_id) if not one_group_results['success']: print_to_log( logger=logger, exception_message_optional=one_group_results['status']) get_sig_error_message_count += 1 else: get_sig_group_count += 1 messages.add_message( request, messages.INFO, "Ratings from {get_sig_group_count} " "Special Interest Groups retrieved. " "(errors: {get_sig_error_message_count})" "".format(get_sig_group_count=get_sig_group_count, get_sig_error_message_count=get_sig_error_message_count)) return HttpResponseRedirect( reverse('import_export_vote_smart:vote_smart_rating_list', args=()))
def candidate_edit_view(request, candidate_id): authority_required = {'verified_volunteer'} # admin, verified_volunteer if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) messages_on_stage = get_messages(request) candidate_id = convert_to_int(candidate_id) candidate_on_stage_found = False candidate_on_stage = CandidateCampaign() try: candidate_on_stage = CandidateCampaign.objects.get(id=candidate_id) candidate_on_stage_found = True except CandidateCampaign.MultipleObjectsReturned as e: handle_record_found_more_than_one_exception(e, logger=logger) except CandidateCampaign.DoesNotExist: # This is fine, create new pass if candidate_on_stage_found: # Working with Vote Smart data try: vote_smart_candidate_id = candidate_on_stage.vote_smart_id rating_list_query = VoteSmartRatingOneCandidate.objects.order_by( '-timeSpan') # Desc order rating_list = rating_list_query.filter( candidateId=vote_smart_candidate_id) except VotesmartApiError as error_instance: # Catch the error message coming back from Vote Smart and pass it in the status error_message = error_instance.args status = "EXCEPTION_RAISED: {error_message}".format( error_message=error_message) print_to_log(logger=logger, exception_message_optional=status) rating_list = [] # Working with We Vote Positions try: candidate_position_list = PositionEntered.objects.order_by( 'stance') candidate_position_list = candidate_position_list.filter( candidate_campaign_id=candidate_id) # if positive_value_exists(google_civic_election_id): # organization_position_list = candidate_position_list.filter( # google_civic_election_id=google_civic_election_id) except Exception as e: handle_record_not_found_exception(e, logger=logger) candidate_position_list = [] template_values = { 'messages_on_stage': messages_on_stage, 'candidate': candidate_on_stage, 'rating_list': rating_list, 'candidate_position_list': candidate_position_list, } else: template_values = { 'messages_on_stage': messages_on_stage, } return render(request, 'candidate/candidate_edit.html', template_values)
def special_interest_group_rating_list_view(request, special_interest_group_id): authority_required = {'verified_volunteer'} # admin, verified_volunteer if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) messages_on_stage = get_messages(request) special_interest_group_id = convert_to_int(special_interest_group_id) # google_civic_election_id = request.GET.get('google_civic_election_id', 0) special_interest_group = VoteSmartSpecialInterestGroup() special_interest_group_found = False try: special_interest_group_query = VoteSmartSpecialInterestGroup.objects.filter(sigId=special_interest_group_id) if special_interest_group_query.count(): special_interest_group = special_interest_group_query[0] special_interest_group_found = True except VotesmartApiError as error_instance: # Catch the error message coming back from Vote Smart and pass it in the status error_message = error_instance.args status = "EXCEPTION_RAISED: {error_message}".format(error_message=error_message) print_to_log(logger=logger, exception_message_optional=status) special_interest_group_found = False if not special_interest_group_found: messages.add_message(request, messages.ERROR, 'Could not find special_interest_group when trying to retrieve ratings.') return HttpResponseRedirect(reverse('import_export_vote_smart:vote_smart_special_interest_group_list', args=())) else: rating_list = [] rating_list_found = False try: rating_list = VoteSmartRatingOneCandidate.objects.order_by('-timeSpan') rating_list = rating_list.filter(sigId=special_interest_group_id) if len(rating_list): rating_list_found = True except VotesmartApiError as error_instance: # Catch the error message coming back from Vote Smart and pass it in the status error_message = error_instance.args status = "EXCEPTION_RAISED: {error_message}".format(error_message=error_message) print_to_log(logger=logger, exception_message_optional=status) # election_list = Election.objects.order_by('-election_day_text') if rating_list_found: template_values = { 'messages_on_stage': messages_on_stage, 'special_interest_group': special_interest_group, 'rating_list': rating_list, # 'election_list': election_list, # 'google_civic_election_id': google_civic_election_id, } else: template_values = { 'messages_on_stage': messages_on_stage, 'special_interest_group': special_interest_group, # 'election_list': election_list, # 'google_civic_election_id': google_civic_election_id, } return render(request, 'import_export_vote_smart/group_rating_list.html', template_values)
def candidate_edit_view(request, candidate_id): authority_required = {'verified_volunteer'} # admin, verified_volunteer if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) messages_on_stage = get_messages(request) candidate_id = convert_to_int(candidate_id) candidate_on_stage_found = False candidate_on_stage = CandidateCampaign() try: candidate_on_stage = CandidateCampaign.objects.get(id=candidate_id) candidate_on_stage_found = True except CandidateCampaign.MultipleObjectsReturned as e: handle_record_found_more_than_one_exception(e, logger=logger) except CandidateCampaign.DoesNotExist: # This is fine, create new pass if candidate_on_stage_found: # Working with Vote Smart data try: vote_smart_candidate_id = candidate_on_stage.vote_smart_id rating_list_query = VoteSmartRatingOneCandidate.objects.order_by('-timeSpan') # Desc order rating_list = rating_list_query.filter(candidateId=vote_smart_candidate_id) except VotesmartApiError as error_instance: # Catch the error message coming back from Vote Smart and pass it in the status error_message = error_instance.args status = "EXCEPTION_RAISED: {error_message}".format(error_message=error_message) print_to_log(logger=logger, exception_message_optional=status) rating_list = [] # Working with We Vote Positions candidate_position_list_found = False try: candidate_position_list = PositionEntered.objects.order_by('stance') candidate_position_list = candidate_position_list.filter(candidate_campaign_id=candidate_id) # if positive_value_exists(google_civic_election_id): # organization_position_list = candidate_position_list.filter( # google_civic_election_id=google_civic_election_id) except Exception as e: handle_record_not_found_exception(e, logger=logger) candidate_position_list = [] template_values = { 'messages_on_stage': messages_on_stage, 'candidate': candidate_on_stage, 'rating_list': rating_list, 'candidate_position_list': candidate_position_list, } else: template_values = { 'messages_on_stage': messages_on_stage, } return render(request, 'candidate/candidate_edit.html', template_values)
def import_special_interest_groups_view(request): authority_required = {'admin'} # admin, verified_volunteer if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) # state_code = request.GET.get('state_code', 'NA') # Default to national # category_id = request.GET.get('category_id', 0) # First retrieve an index of all groups for each state and category group_count = 0 error_message_count = 0 position_category_list = VoteSmartCategory.objects.order_by('name') for position_category in position_category_list: category_id = position_category.categoryId for state_code, state_name in STATE_CODE_MAP.items(): results = retrieve_vote_smart_special_interest_groups_into_local_db(category_id, state_code) if not results['success']: # messages.add_message(request, messages.INFO, results['status']) print_to_log(logger=logger, exception_message_optional=results['status']) error_message_count += 1 else: group_count += 1 messages.add_message(request, messages.INFO, "{group_count} Special Interest Groups retrieved. " "(errors: {error_message_count})" "".format(group_count=group_count, error_message_count=error_message_count)) # Then retrieve the details about each group get_sig_group_count = 0 get_sig_error_message_count = 0 special_interest_group_list = VoteSmartSpecialInterestGroup.objects.order_by('name') for one_group in special_interest_group_list: special_interest_group_id = one_group.sigId one_group_results = retrieve_vote_smart_special_interest_group_into_local_db(special_interest_group_id) if not one_group_results['success']: print_to_log(logger=logger, exception_message_optional=one_group_results['status']) get_sig_error_message_count += 1 else: get_sig_group_count += 1 messages.add_message(request, messages.INFO, "{get_sig_group_count} Special Interest Groups augmented. " "(errors: {get_sig_error_message_count})" "".format(get_sig_group_count=get_sig_group_count, get_sig_error_message_count=get_sig_error_message_count)) return HttpResponseRedirect(reverse('import_export_vote_smart:vote_smart_special_interest_group_list', args=()))
def politician_edit_view(request, politician_id): authority_required = {'verified_volunteer'} # admin, verified_volunteer if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) # These variables are here because there was an error on the edit_process_view and the voter needs to try again politician_name = request.GET.get('politician_name', False) state_code = request.GET.get('state_code', False) google_civic_candidate_name = request.GET.get( 'google_civic_candidate_name', False) politician_twitter_handle = request.GET.get('politician_twitter_handle', False) politician_url = request.GET.get('politician_url', False) political_party = request.GET.get('political_party', False) vote_smart_id = request.GET.get('vote_smart_id', False) maplight_id = request.GET.get('maplight_id', False) messages_on_stage = get_messages(request) politician_id = convert_to_int(politician_id) politician_on_stage_found = False politician_on_stage = Politician() try: politician_on_stage = Politician.objects.get(id=politician_id) politician_on_stage_found = True except Politician.MultipleObjectsReturned as e: handle_record_found_more_than_one_exception(e, logger=logger) except Politician.DoesNotExist: # This is fine, create new below pass if politician_on_stage_found: # Working with Vote Smart data try: vote_smart_politician_id = politician_on_stage.vote_smart_id rating_list_query = VoteSmartRatingOneCandidate.objects.order_by( '-timeSpan') # Desc order rating_list = rating_list_query.filter( candidateId=vote_smart_politician_id) except VotesmartApiError as error_instance: # Catch the error message coming back from Vote Smart and pass it in the status error_message = error_instance.args status = "EXCEPTION_RAISED: {error_message}".format( error_message=error_message) print_to_log(logger=logger, exception_message_optional=status) rating_list = [] # Working with We Vote Positions try: politician_position_list = PositionEntered.objects.order_by( 'stance') politician_position_list = politician_position_list.filter( politician_id=politician_id) except Exception as e: politician_position_list = [] # Working with Candidate "children" of this politician try: linked_candidate_list = CandidateCampaign.objects.all() linked_candidate_list = linked_candidate_list.filter( politician_id=politician_on_stage.id) except Exception as e: linked_candidate_list = [] # Finding Candidates that *might* be "children" of this politician try: related_candidate_list = CandidateCampaign.objects.all() related_candidate_list = related_candidate_list.exclude( politician_id=politician_on_stage.id) filters = [] new_filter = Q(candidate_name__icontains=politician_on_stage.first_name) & \ Q(candidate_name__icontains=politician_on_stage.last_name) filters.append(new_filter) if positive_value_exists( politician_on_stage.politician_twitter_handle): new_filter = Q( candidate_twitter_handle__iexact=politician_on_stage. politician_twitter_handle) filters.append(new_filter) if positive_value_exists(politician_on_stage.vote_smart_id): new_filter = Q(vote_smart_id=politician_on_stage.vote_smart_id) filters.append(new_filter) # Add the first query if len(filters): final_filters = filters.pop() # ...and "OR" the remaining items in the list for item in filters: final_filters |= item related_candidate_list = related_candidate_list.filter( final_filters) related_candidate_list = related_candidate_list.order_by( 'candidate_name')[:20] except Exception as e: related_candidate_list = [] # Find possible duplicate politicians try: duplicate_politician_list = Politician.objects.all() duplicate_politician_list = duplicate_politician_list.exclude( id=politician_on_stage.id) filters = [] new_filter = Q( politician_name__icontains=politician_on_stage.politician_name) filters.append(new_filter) if positive_value_exists(politician_on_stage.first_name) or \ positive_value_exists(politician_on_stage.last_name): new_filter = Q(first_name__icontains=politician_on_stage.first_name) & \ Q(last_name__icontains=politician_on_stage.last_name) filters.append(new_filter) if positive_value_exists( politician_on_stage.politician_twitter_handle): new_filter = Q( politician_twitter_handle__icontains=politician_on_stage. politician_twitter_handle) filters.append(new_filter) if positive_value_exists(politician_on_stage.vote_smart_id): new_filter = Q(vote_smart_id=politician_on_stage.vote_smart_id) filters.append(new_filter) # Add the first query if len(filters): final_filters = filters.pop() # ...and "OR" the remaining items in the list for item in filters: final_filters |= item duplicate_politician_list = duplicate_politician_list.filter( final_filters) duplicate_politician_list = duplicate_politician_list.order_by( 'politician_name')[:20] except ObjectDoesNotExist: # This is fine, create new pass template_values = { 'messages_on_stage': messages_on_stage, 'politician': politician_on_stage, 'rating_list': rating_list, 'politician_position_list': politician_position_list, 'linked_candidate_list': linked_candidate_list, 'related_candidate_list': related_candidate_list, 'duplicate_politician_list': duplicate_politician_list, # Incoming variables, not saved yet 'politician_name': politician_name, 'state_code': state_code, 'google_civic_candidate_name': google_civic_candidate_name, 'politician_twitter_handle': politician_twitter_handle, 'politician_url': politician_url, 'political_party': political_party, 'vote_smart_id': vote_smart_id, 'maplight_id': maplight_id, } else: template_values = { 'messages_on_stage': messages_on_stage, # Incoming variables 'vote_smart_id': vote_smart_id, } return render(request, 'politician/politician_edit.html', template_values)
def politician_edit_view(request, politician_id): authority_required = {'verified_volunteer'} # admin, verified_volunteer if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) # These variables are here because there was an error on the edit_process_view and the voter needs to try again politician_name = request.GET.get('politician_name', False) state_code = request.GET.get('state_code', False) google_civic_candidate_name = request.GET.get('google_civic_candidate_name', False) politician_twitter_handle = request.GET.get('politician_twitter_handle', False) politician_url = request.GET.get('politician_url', False) political_party = request.GET.get('political_party', False) vote_smart_id = request.GET.get('vote_smart_id', False) maplight_id = request.GET.get('maplight_id', False) messages_on_stage = get_messages(request) politician_id = convert_to_int(politician_id) politician_on_stage_found = False politician_on_stage = Politician() try: politician_on_stage = Politician.objects.get(id=politician_id) politician_on_stage_found = True except Politician.MultipleObjectsReturned as e: handle_record_found_more_than_one_exception(e, logger=logger) except Politician.DoesNotExist: # This is fine, create new below pass if politician_on_stage_found: # Working with Vote Smart data try: vote_smart_politician_id = politician_on_stage.vote_smart_id rating_list_query = VoteSmartRatingOneCandidate.objects.order_by('-timeSpan') # Desc order rating_list = rating_list_query.filter(candidateId=vote_smart_politician_id) except VotesmartApiError as error_instance: # Catch the error message coming back from Vote Smart and pass it in the status error_message = error_instance.args status = "EXCEPTION_RAISED: {error_message}".format(error_message=error_message) print_to_log(logger=logger, exception_message_optional=status) rating_list = [] # Working with We Vote Positions try: politician_position_list = PositionEntered.objects.order_by('stance') politician_position_list = politician_position_list.filter(politician_id=politician_id) except Exception as e: politician_position_list = [] # Working with Candidate "children" of this politician try: linked_candidate_list = CandidateCampaign.objects.all() linked_candidate_list = linked_candidate_list.filter(politician_id=politician_on_stage.id) except Exception as e: linked_candidate_list = [] # Finding Candidates that *might* be "children" of this politician try: related_candidate_list = CandidateCampaign.objects.all() related_candidate_list = related_candidate_list.exclude(politician_id=politician_on_stage.id) filters = [] new_filter = Q(candidate_name__icontains=politician_on_stage.first_name) & \ Q(candidate_name__icontains=politician_on_stage.last_name) filters.append(new_filter) if positive_value_exists(politician_on_stage.politician_twitter_handle): new_filter = Q(candidate_twitter_handle__iexact=politician_on_stage.politician_twitter_handle) filters.append(new_filter) if positive_value_exists(politician_on_stage.vote_smart_id): new_filter = Q(vote_smart_id=politician_on_stage.vote_smart_id) filters.append(new_filter) # Add the first query if len(filters): final_filters = filters.pop() # ...and "OR" the remaining items in the list for item in filters: final_filters |= item related_candidate_list = related_candidate_list.filter(final_filters) related_candidate_list = related_candidate_list.order_by('candidate_name')[:20] except Exception as e: related_candidate_list = [] # Find possible duplicate politicians try: duplicate_politician_list = Politician.objects.all() duplicate_politician_list = duplicate_politician_list.exclude(id=politician_on_stage.id) filters = [] new_filter = Q(politician_name__icontains=politician_on_stage.politician_name) filters.append(new_filter) if positive_value_exists(politician_on_stage.first_name) or \ positive_value_exists(politician_on_stage.last_name): new_filter = Q(first_name__icontains=politician_on_stage.first_name) & \ Q(last_name__icontains=politician_on_stage.last_name) filters.append(new_filter) if positive_value_exists(politician_on_stage.politician_twitter_handle): new_filter = Q(politician_twitter_handle__icontains=politician_on_stage.politician_twitter_handle) filters.append(new_filter) if positive_value_exists(politician_on_stage.vote_smart_id): new_filter = Q(vote_smart_id=politician_on_stage.vote_smart_id) filters.append(new_filter) # Add the first query if len(filters): final_filters = filters.pop() # ...and "OR" the remaining items in the list for item in filters: final_filters |= item duplicate_politician_list = duplicate_politician_list.filter(final_filters) duplicate_politician_list = duplicate_politician_list.order_by('politician_name')[:20] except ObjectDoesNotExist: # This is fine, create new pass template_values = { 'messages_on_stage': messages_on_stage, 'politician': politician_on_stage, 'rating_list': rating_list, 'politician_position_list': politician_position_list, 'linked_candidate_list': linked_candidate_list, 'related_candidate_list': related_candidate_list, 'duplicate_politician_list': duplicate_politician_list, # Incoming variables, not saved yet 'politician_name': politician_name, 'state_code': state_code, 'google_civic_candidate_name': google_civic_candidate_name, 'politician_twitter_handle': politician_twitter_handle, 'politician_url': politician_url, 'political_party': political_party, 'vote_smart_id': vote_smart_id, 'maplight_id': maplight_id, } else: template_values = { 'messages_on_stage': messages_on_stage, # Incoming variables 'vote_smart_id': vote_smart_id, } return render(request, 'politician/politician_edit.html', template_values)
def retrieve_positions_from_vote_smart_for_election_view(request): authority_required = {'admin'} # admin, verified_volunteer if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) google_civic_election_id = convert_to_int(request.GET.get('google_civic_election_id', 0)) try: candidate_list = CandidateCampaign.objects.all() if positive_value_exists(google_civic_election_id): candidate_list = candidate_list.filter(google_civic_election_id=google_civic_election_id) candidate_list = candidate_list.order_by('candidate_name')[:500] except CandidateCampaign.DoesNotExist: messages.add_message(request, messages.INFO, "Could not find any candidates for google_civic_election_id: " "{google_civic_election_id}." "".format(google_civic_election_id=google_civic_election_id)) return HttpResponseRedirect(reverse('position:position_list', args=())) message = "Entering retrieve_positions_from_vote_smart_for_election." print_to_log(logger, exception_message_optional=message) vote_smart_candidates_that_exist = 0 vote_smart_candidates_created = 0 vote_smart_candidates_not_found = 0 we_vote_organizations_created = 0 organization_positions_that_exist = 0 organization_positions_created = 0 # Do a first pass through where we get positions for candidates for whom we already have an id for we_vote_candidate in candidate_list: if we_vote_candidate.vote_smart_id: retrieve_results = retrieve_vote_smart_ratings_for_candidate_into_local_db(we_vote_candidate.vote_smart_id) transfer_results = transfer_vote_smart_ratings_to_positions_for_candidate(we_vote_candidate.id) if retrieve_results['rating_one_candidate_exists']: vote_smart_candidates_that_exist += 1 if retrieve_results['rating_one_candidate_created']: vote_smart_candidates_created += 1 if transfer_results['we_vote_organizations_created']: we_vote_organizations_created += 1 if transfer_results['organization_positions_that_exist']: organization_positions_that_exist += 1 if transfer_results['organization_positions_created']: organization_positions_created += 1 message = "About to cycle through candidates for whom we don't have Vote Smart IDs for." print_to_log(logger, exception_message_optional=message) # Then we cycle through again, reach out to Vote Smart to match the candidate if we did not have a vote_smart_id, # and if we find a new Vote Smart id, we get positions for that candidate for we_vote_candidate in candidate_list: if not we_vote_candidate.vote_smart_id: force_retrieve = False results = retrieve_and_match_candidate_from_vote_smart(we_vote_candidate, force_retrieve) if results['success'] and results['we_vote_candidate_id']: we_vote_candidate = results['we_vote_candidate'] if we_vote_candidate.vote_smart_id: retrieve_results = retrieve_vote_smart_ratings_for_candidate_into_local_db( we_vote_candidate.vote_smart_id) transfer_results = transfer_vote_smart_ratings_to_positions_for_candidate(we_vote_candidate.id) if retrieve_results['rating_one_candidate_exists']: vote_smart_candidates_that_exist += 1 if retrieve_results['rating_one_candidate_created']: vote_smart_candidates_created += 1 if transfer_results['we_vote_organizations_created']: we_vote_organizations_created += 1 if transfer_results['organization_positions_that_exist']: organization_positions_that_exist += 1 if transfer_results['organization_positions_created']: organization_positions_created += 1 else: vote_smart_candidates_not_found += 1 message = "Google Civic Election ID: {election_id}, " \ "{vote_smart_candidates_that_exist} candidates from Vote Smart looked at, " \ "{vote_smart_candidates_created} new candidates cached from Vote Smart, " \ "{vote_smart_candidates_not_found} candidates not found in Vote Smart, " \ "{we_vote_organizations_created} organizations created in We Vote, " \ "{organization_positions_that_exist} positions from Vote Smart already exist locally, and " \ "{organization_positions_created} positions from Vote Smart just created locally.".\ format(election_id=google_civic_election_id, vote_smart_candidates_that_exist=vote_smart_candidates_that_exist, vote_smart_candidates_created=vote_smart_candidates_created, vote_smart_candidates_not_found=vote_smart_candidates_not_found, we_vote_organizations_created=we_vote_organizations_created, organization_positions_that_exist=organization_positions_that_exist, organization_positions_created=organization_positions_created) print_to_log(logger, exception_message_optional=message) messages.add_message(request, messages.INFO, message) return HttpResponseRedirect(reverse('position:position_list', args=()) + "?google_civic_election_id=" + str(google_civic_election_id))
def politician_edit_view( request, politician_id): # TODO DALE Transition fully to politician authority_required = {'verified_volunteer'} # admin, verified_volunteer if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) # These variables are here because there was an error on the edit_process_view and the voter needs to try again politician_name = request.GET.get('politician_name', False) state_code = request.GET.get('state_code', False) google_civic_candidate_name = request.GET.get( 'google_civic_candidate_name', False) politician_twitter_handle = request.GET.get('politician_twitter_handle', False) politician_url = request.GET.get('politician_url', False) political_party = request.GET.get('political_party', False) vote_smart_id = request.GET.get('vote_smart_id', False) maplight_id = request.GET.get('maplight_id', False) messages_on_stage = get_messages(request) politician_id = convert_to_int(politician_id) politician_on_stage_found = False politician_on_stage = Politician() try: politician_on_stage = Politician.objects.get(id=politician_id) politician_on_stage_found = True except Politician.MultipleObjectsReturned as e: handle_record_found_more_than_one_exception(e, logger=logger) except Politician.DoesNotExist: # This is fine, create new below pass if politician_on_stage_found: # Working with Vote Smart data try: vote_smart_politician_id = politician_on_stage.vote_smart_id rating_list_query = VoteSmartRatingOneCandidate.objects.order_by( '-timeSpan') # Desc order rating_list = rating_list_query.filter( candidateId=vote_smart_politician_id) except VotesmartApiError as error_instance: # Catch the error message coming back from Vote Smart and pass it in the status error_message = error_instance.args status = "EXCEPTION_RAISED: {error_message}".format( error_message=error_message) print_to_log(logger=logger, exception_message_optional=status) rating_list = [] # Working with We Vote Positions try: politician_position_list = PositionEntered.objects.order_by( 'stance') politician_position_list = politician_position_list.filter( politician_id=politician_id) except Exception as e: politician_position_list = [] template_values = { 'messages_on_stage': messages_on_stage, 'politician': politician_on_stage, 'rating_list': rating_list, 'politician_position_list': politician_position_list, # Incoming variables, not saved yet 'politician_name': politician_name, 'state_code': state_code, 'google_civic_candidate_name': google_civic_candidate_name, 'politician_twitter_handle': politician_twitter_handle, 'politician_url': politician_url, 'political_party': political_party, 'vote_smart_id': vote_smart_id, 'maplight_id': maplight_id, } else: template_values = { 'messages_on_stage': messages_on_stage, # Incoming variables 'vote_smart_id': vote_smart_id, } return render(request, 'politician/politician_edit.html', template_values)
def retrieve_candidate_photos_for_election_view(request, election_id): authority_required = {'admin'} # admin, verified_volunteer if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) candidate_list = [] google_civic_election_id = convert_to_int(election_id) # We only want to process if a google_civic_election_id comes in if not positive_value_exists(google_civic_election_id): messages.add_message(request, messages.ERROR, "Google Civic Election ID required.") return HttpResponseRedirect(reverse('candidate:candidate_list', args=())) try: candidate_list = CandidateCampaign.objects.order_by('candidate_name') if positive_value_exists(google_civic_election_id): candidate_list = candidate_list.filter(google_civic_election_id=google_civic_election_id) except CandidateCampaign.DoesNotExist: pass display_messages_per_candidate = False force_retrieve = False num_candidates_reviewed = 0 num_with_vote_smart_ids = 0 num_candidates_just_retrieved = 0 num_with_vote_smart_photos = 0 num_candidate_photos_just_retrieved = 0 message = "About to loop through all of the candidates in this election and retrieve photos." print_to_log(logger, exception_message_optional=message) # Loop through all of the candidates in this election for we_vote_candidate in candidate_list: num_candidates_reviewed += 1 retrieve_candidate_results = retrieve_candidate_photos(we_vote_candidate, force_retrieve) if retrieve_candidate_results['vote_smart_candidate_exists']: num_with_vote_smart_ids += 1 if retrieve_candidate_results['vote_smart_candidate_just_retrieved']: num_candidates_just_retrieved += 1 if retrieve_candidate_results['vote_smart_candidate_photo_exists']: num_with_vote_smart_photos += 1 if retrieve_candidate_results['vote_smart_candidate_photo_just_retrieved']: num_candidate_photos_just_retrieved += 1 if retrieve_candidate_results['status'] and display_messages_per_candidate: messages.add_message(request, messages.INFO, retrieve_candidate_results['status']) message = "Google Civic Election ID: {election_id}, " \ "{num_candidates_reviewed} candidates reviewed, " \ "{num_with_vote_smart_ids} with Vote Smart Ids, " \ "{num_candidates_just_retrieved} candidates just retrieved, " \ "{num_with_vote_smart_photos} with Vote Smart Photos, and " \ "{num_candidate_photos_just_retrieved} photos just retrieved.".\ format(election_id=google_civic_election_id, num_candidates_reviewed=num_candidates_reviewed, num_with_vote_smart_ids=num_with_vote_smart_ids, num_candidates_just_retrieved=num_candidates_just_retrieved, num_with_vote_smart_photos=num_with_vote_smart_photos, num_candidate_photos_just_retrieved=num_candidate_photos_just_retrieved) print_to_log(logger, exception_message_optional=message) messages.add_message(request, messages.INFO, message) return HttpResponseRedirect(reverse('candidate:candidate_list', args=()) + "?google_civic_election_id={var}".format( var=google_civic_election_id))
def retrieve_positions_from_vote_smart_for_election_view(request): authority_required = {'admin'} # admin, verified_volunteer if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) google_civic_election_id = convert_to_int( request.GET.get('google_civic_election_id', 0)) try: candidate_list = CandidateCampaign.objects.all() if positive_value_exists(google_civic_election_id): candidate_list = candidate_list.filter( google_civic_election_id=google_civic_election_id) candidate_list = candidate_list.order_by('candidate_name')[:500] except CandidateCampaign.DoesNotExist: messages.add_message( request, messages.INFO, "Could not find any candidates for google_civic_election_id: " "{google_civic_election_id}." "".format(google_civic_election_id=google_civic_election_id)) return HttpResponseRedirect(reverse('position:position_list', args=())) message = "Entering retrieve_positions_from_vote_smart_for_election." print_to_log(logger, exception_message_optional=message) vote_smart_candidates_that_exist = 0 vote_smart_candidates_created = 0 vote_smart_candidates_not_found = 0 we_vote_organizations_created = 0 organization_positions_that_exist = 0 organization_positions_created = 0 # Do a first pass through where we get positions for candidates for whom we already have an id for we_vote_candidate in candidate_list: if we_vote_candidate.vote_smart_id: retrieve_results = retrieve_vote_smart_ratings_for_candidate_into_local_db( we_vote_candidate.vote_smart_id) transfer_results = transfer_vote_smart_ratings_to_positions_for_candidate( we_vote_candidate.id) if retrieve_results['rating_one_candidate_exists']: vote_smart_candidates_that_exist += 1 if retrieve_results['rating_one_candidate_created']: vote_smart_candidates_created += 1 if transfer_results['we_vote_organizations_created']: we_vote_organizations_created += 1 if transfer_results['organization_positions_that_exist']: organization_positions_that_exist += 1 if transfer_results['organization_positions_created']: organization_positions_created += 1 message = "About to cycle through candidates for whom we don't have Vote Smart IDs for." print_to_log(logger, exception_message_optional=message) # Then we cycle through again, reach out to Vote Smart to match the candidate if we did not have a vote_smart_id, # and if we find a new Vote Smart id, we get positions for that candidate for we_vote_candidate in candidate_list: if not we_vote_candidate.vote_smart_id: force_retrieve = False results = retrieve_and_match_candidate_from_vote_smart( we_vote_candidate, force_retrieve) if results['success'] and results['we_vote_candidate_id']: we_vote_candidate = results['we_vote_candidate'] if we_vote_candidate.vote_smart_id: retrieve_results = retrieve_vote_smart_ratings_for_candidate_into_local_db( we_vote_candidate.vote_smart_id) transfer_results = transfer_vote_smart_ratings_to_positions_for_candidate( we_vote_candidate.id) if retrieve_results['rating_one_candidate_exists']: vote_smart_candidates_that_exist += 1 if retrieve_results['rating_one_candidate_created']: vote_smart_candidates_created += 1 if transfer_results['we_vote_organizations_created']: we_vote_organizations_created += 1 if transfer_results['organization_positions_that_exist']: organization_positions_that_exist += 1 if transfer_results['organization_positions_created']: organization_positions_created += 1 else: vote_smart_candidates_not_found += 1 message = "Google Civic Election ID: {election_id}, " \ "{vote_smart_candidates_that_exist} candidates from Vote Smart looked at, " \ "{vote_smart_candidates_created} new candidates cached from Vote Smart, " \ "{vote_smart_candidates_not_found} candidates not found in Vote Smart, " \ "{we_vote_organizations_created} organizations created in We Vote, " \ "{organization_positions_that_exist} positions from Vote Smart already exist locally, and " \ "{organization_positions_created} positions from Vote Smart just created locally.".\ format(election_id=google_civic_election_id, vote_smart_candidates_that_exist=vote_smart_candidates_that_exist, vote_smart_candidates_created=vote_smart_candidates_created, vote_smart_candidates_not_found=vote_smart_candidates_not_found, we_vote_organizations_created=we_vote_organizations_created, organization_positions_that_exist=organization_positions_that_exist, organization_positions_created=organization_positions_created) print_to_log(logger, exception_message_optional=message) messages.add_message(request, messages.INFO, message) return HttpResponseRedirect( reverse('position:position_list', args=()) + "?google_civic_election_id=" + str(google_civic_election_id))
def retrieve_candidate_photos_for_election_view(request, election_id): authority_required = {'admin'} # admin, verified_volunteer if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) candidate_list = [] google_civic_election_id = convert_to_int(election_id) # We only want to process if a google_civic_election_id comes in if not positive_value_exists(google_civic_election_id): messages.add_message(request, messages.ERROR, "Google Civic Election ID required.") return HttpResponseRedirect( reverse('candidate:candidate_list', args=())) try: candidate_list = CandidateCampaign.objects.order_by('candidate_name') if positive_value_exists(google_civic_election_id): candidate_list = candidate_list.filter( google_civic_election_id=google_civic_election_id) except CandidateCampaign.DoesNotExist: pass display_messages_per_candidate = False force_retrieve = False num_candidates_reviewed = 0 num_with_vote_smart_ids = 0 num_candidates_just_retrieved = 0 num_with_vote_smart_photos = 0 num_candidate_photos_just_retrieved = 0 message = "About to loop through all of the candidates in this election and retrieve photos." print_to_log(logger, exception_message_optional=message) # Loop through all of the candidates in this election for we_vote_candidate in candidate_list: num_candidates_reviewed += 1 retrieve_candidate_results = retrieve_candidate_photos( we_vote_candidate, force_retrieve) if retrieve_candidate_results['vote_smart_candidate_exists']: num_with_vote_smart_ids += 1 if retrieve_candidate_results['vote_smart_candidate_just_retrieved']: num_candidates_just_retrieved += 1 if retrieve_candidate_results['vote_smart_candidate_photo_exists']: num_with_vote_smart_photos += 1 if retrieve_candidate_results[ 'vote_smart_candidate_photo_just_retrieved']: num_candidate_photos_just_retrieved += 1 if retrieve_candidate_results[ 'status'] and display_messages_per_candidate: messages.add_message(request, messages.INFO, retrieve_candidate_results['status']) message = "Google Civic Election ID: {election_id}, " \ "{num_candidates_reviewed} candidates reviewed, " \ "{num_with_vote_smart_ids} with Vote Smart Ids, " \ "{num_candidates_just_retrieved} candidates just retrieved, " \ "{num_with_vote_smart_photos} with Vote Smart Photos, and " \ "{num_candidate_photos_just_retrieved} photos just retrieved.".\ format(election_id=google_civic_election_id, num_candidates_reviewed=num_candidates_reviewed, num_with_vote_smart_ids=num_with_vote_smart_ids, num_candidates_just_retrieved=num_candidates_just_retrieved, num_with_vote_smart_photos=num_with_vote_smart_photos, num_candidate_photos_just_retrieved=num_candidate_photos_just_retrieved) print_to_log(logger, exception_message_optional=message) messages.add_message(request, messages.INFO, message) return HttpResponseRedirect( reverse('candidate:candidate_list', args=()) + "?google_civic_election_id={var}".format(var=google_civic_election_id))
def candidate_politician_match_for_this_election_view(request): authority_required = {'admin'} # admin, verified_volunteer if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) candidate_list = [] google_civic_election_id = request.GET.get('google_civic_election_id', 0) google_civic_election_id = convert_to_int(google_civic_election_id) # We only want to process if a google_civic_election_id comes in if not positive_value_exists(google_civic_election_id): messages.add_message(request, messages.ERROR, "Google Civic Election ID required.") return HttpResponseRedirect(reverse('candidate:candidate_list', args=())) try: candidate_list = CandidateCampaign.objects.order_by('candidate_name') candidate_list = candidate_list.filter(google_civic_election_id=google_civic_election_id) except CandidateCampaign.DoesNotExist: messages.add_message(request, messages.INFO, "No candidates found for this election: {id}.".format( id=google_civic_election_id)) return HttpResponseRedirect(reverse('candidate:candidate_list', args=()) + "?google_civic_election_id={var}" "".format( var=google_civic_election_id)) num_candidates_reviewed = 0 num_that_already_have_politician_we_vote_id = 0 new_politician_created = 0 existing_politician_found = 0 multiple_politicians_found = 0 other_results = 0 message = "About to loop through all of the candidates in this election to make sure we have a politician record." print_to_log(logger, exception_message_optional=message) # Loop through all of the candidates in this election for we_vote_candidate in candidate_list: num_candidates_reviewed += 1 if we_vote_candidate.politician_we_vote_id: num_that_already_have_politician_we_vote_id += 1 continue match_results = candidate_politician_match(we_vote_candidate) if match_results['politician_created']: new_politician_created += 1 elif match_results['politician_found']: existing_politician_found += 1 elif match_results['politician_list_found']: multiple_politicians_found += 1 else: other_results += 1 message = "Google Civic Election ID: {election_id}, " \ "{num_candidates_reviewed} candidates reviewed, " \ "{num_that_already_have_politician_we_vote_id} Candidates that already have Politician Ids, " \ "{new_politician_created} politicians just created, " \ "{existing_politician_found} politicians found that already exist, " \ "{multiple_politicians_found} times we found multiple politicians and could not link, " \ "{other_results} other results". \ format(election_id=google_civic_election_id, num_candidates_reviewed=num_candidates_reviewed, num_that_already_have_politician_we_vote_id=num_that_already_have_politician_we_vote_id, new_politician_created=new_politician_created, existing_politician_found=existing_politician_found, multiple_politicians_found=multiple_politicians_found, other_results=other_results) print_to_log(logger, exception_message_optional=message) messages.add_message(request, messages.INFO, message) return HttpResponseRedirect(reverse('candidate:candidate_list', args=()) + "?google_civic_election_id={var}".format( var=google_civic_election_id))