def twitter_identity_retrieve_for_api(twitter_handle, voter_device_id=''): status = "TWITTER_HANDLE_DOES_NOT_EXIST" # Default to this success = True kind_of_owner = "TWITTER_HANDLE_DOES_NOT_EXIST" owner_we_vote_id = '' owner_id = 0 google_civic_election_id = 0 google_civic_election_id_voter_is_watching = 0 twitter_description = '' twitter_followers_count = '' twitter_photo_url = '' twitter_user_website = '' twitter_name = '' owner_found = False # Check Politician table for Twitter Handle # NOTE: It would be better to retrieve from the Politician, and then bring "up" information we need from the # CandidateCampaign table. 2016-05-11 We haven't implemented Politician's yet though. # Check Candidate table if not positive_value_exists(owner_found): candidate_list_manager = CandidateCampaignListManager() candidate_results = candidate_list_manager.retrieve_candidates_from_non_unique_identifiers(twitter_handle) if candidate_results['candidate_list_found']: candidate_list = candidate_results['candidate_list'] # Find out the election the voter is looking at results = figure_out_google_civic_election_id_voter_is_watching(voter_device_id) if positive_value_exists(results['google_civic_election_id']): google_civic_election_id_voter_is_watching = results['google_civic_election_id'] # ...and then find the candidate entry for that election most_recent_candidate = candidate_list[0] for one_candidate in candidate_list: if google_civic_election_id_voter_is_watching == convert_to_int(one_candidate.google_civic_election_id): kind_of_owner = "CANDIDATE" owner_we_vote_id = one_candidate.we_vote_id owner_id = one_candidate.id google_civic_election_id = one_candidate.google_civic_election_id owner_found = True status = "OWNER_OF_THIS_TWITTER_HANDLE_FOUND-CANDIDATE" # Now that we have candidate, break out of for-loop break if not owner_found: kind_of_owner = "CANDIDATE" owner_we_vote_id = most_recent_candidate.we_vote_id owner_id = most_recent_candidate.id google_civic_election_id = most_recent_candidate.google_civic_election_id owner_found = True status = "OWNER_OF_THIS_TWITTER_HANDLE_FOUND-CANDIDATE" # Check Organization table if not positive_value_exists(owner_found): organization_list_manager = OrganizationListManager() organization_results = organization_list_manager.retrieve_organizations_from_non_unique_identifiers( twitter_handle) if organization_results['organization_list_found']: organization_list = organization_results['organization_list'] one_organization = organization_list[0] kind_of_owner = "ORGANIZATION" owner_we_vote_id = one_organization.we_vote_id owner_id = one_organization.id google_civic_election_id = 0 owner_found = True status = "OWNER_OF_THIS_TWITTER_HANDLE_FOUND-ORGANIZATION" twitter_description = one_organization.twitter_description twitter_followers_count = one_organization.twitter_followers_count twitter_photo_url = one_organization.twitter_profile_image_url_https twitter_user_website = one_organization.organization_website twitter_name = one_organization.twitter_name # Reach out to Twitter (or our Twitter account cache) to retrieve some information we can display if not positive_value_exists(owner_found): twitter_user_manager = TwitterUserManager() twitter_results = twitter_user_manager.retrieve_twitter_user_locally_or_remotely(twitter_handle) if twitter_results['twitter_user_found']: twitter_user = twitter_results['twitter_user'] twitter_description = twitter_user.twitter_description twitter_followers_count = twitter_user.twitter_followers_count twitter_photo_url = twitter_user.twitter_profile_image_url_https twitter_user_website = twitter_user.twitter_url twitter_name = twitter_user.twitter_name kind_of_owner = "TWITTER_HANDLE_NOT_FOUND_IN_WE_VOTE" status = "TWITTER_HANDLE_NOT_FOUND_IN_WE_VOTE" results = { 'status': status, 'success': success, 'twitter_handle': twitter_handle, 'kind_of_owner': kind_of_owner, 'owner_found': owner_found, 'owner_we_vote_id': owner_we_vote_id, 'owner_id': owner_id, 'google_civic_election_id': google_civic_election_id, 'twitter_description': twitter_description, 'twitter_followers_count': twitter_followers_count, 'twitter_photo_url': twitter_photo_url, 'twitter_user_website': twitter_user_website, 'twitter_name': twitter_name, } return results
def organization_edit_process_view(request): """ Process the new or edit organization forms :param request: :return: """ authority_required = {'verified_volunteer'} # admin, verified_volunteer if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) organization_id = convert_to_int(request.POST.get('organization_id', 0)) organization_name = request.POST.get('organization_name', '') organization_twitter_handle = request.POST.get('organization_twitter_handle', False) organization_facebook = request.POST.get('organization_facebook', False) organization_website = request.POST.get('organization_website', False) wikipedia_page_title = request.POST.get('wikipedia_page_title', False) wikipedia_photo_url = request.POST.get('wikipedia_photo_url', False) state_served_code = request.POST.get('state_served_code', False) # A positive value in google_civic_election_id or add_organization_button means we want to create a voter guide # for this org for this election google_civic_election_id = request.POST.get('google_civic_election_id', 0) # add_organization_button = request.POST.get('add_organization_button', False) # Filter incoming data organization_twitter_handle = extract_twitter_handle_from_text_string(organization_twitter_handle) # Check to see if this organization is already being used anywhere organization_on_stage_found = False try: organization_query = Organization.objects.filter(id=organization_id) if organization_query.count(): organization_on_stage = organization_query[0] organization_on_stage_found = True except Exception as e: handle_record_not_found_exception(e, logger=logger) try: if organization_on_stage_found: # Update if organization_name is not False: organization_on_stage.organization_name = organization_name if organization_twitter_handle is not False: organization_on_stage.organization_twitter_handle = organization_twitter_handle if organization_facebook is not False: organization_on_stage.organization_facebook = organization_facebook if organization_website is not False: organization_on_stage.organization_website = organization_website if wikipedia_page_title is not False: organization_on_stage.wikipedia_page_title = wikipedia_page_title if wikipedia_photo_url is not False: organization_on_stage.wikipedia_photo_url = wikipedia_photo_url if state_served_code is not False: organization_on_stage.state_served_code = state_served_code organization_on_stage.save() organization_id = organization_on_stage.id organization_we_vote_id = organization_on_stage.we_vote_id messages.add_message(request, messages.INFO, 'Organization updated.') else: # Create new # But first double-check that we don't have an org entry already organization_email = '' organization_list_manager = OrganizationListManager() results = organization_list_manager.organization_search_find_any_possibilities( organization_name, organization_twitter_handle, organization_website, organization_email) if results['organizations_found']: organizations_list = results['organizations_list'] organizations_count = len(organizations_list) messages.add_message(request, messages.INFO, 'We found {count} existing organizations ' 'that might match.'.format(count=organizations_count)) messages_on_stage = get_messages(request) template_values = { 'messages_on_stage': messages_on_stage, 'organizations_list': organizations_list, 'organization_name': organization_name, 'organization_twitter_handle': organization_twitter_handle, 'organization_facebook': organization_facebook, 'organization_website': organization_website, 'wikipedia_page_title': wikipedia_page_title, 'wikipedia_photo_url': wikipedia_photo_url, } return render(request, 'organization/organization_edit.html', template_values) minimum_required_variables_exist = positive_value_exists(organization_name) if not minimum_required_variables_exist: messages.add_message(request, messages.INFO, 'Missing name, which is required.') messages_on_stage = get_messages(request) template_values = { 'messages_on_stage': messages_on_stage, 'organization_name': organization_name, 'organization_twitter_handle': organization_twitter_handle, 'organization_facebook': organization_facebook, 'organization_website': organization_website, 'wikipedia_page_title': wikipedia_page_title, 'wikipedia_photo_url': wikipedia_photo_url, } return render(request, 'voter_guide/voter_guide_search.html', template_values) organization_on_stage = Organization( organization_name=organization_name, ) if organization_twitter_handle is not False: organization_on_stage.organization_twitter_handle = organization_twitter_handle if organization_facebook is not False: organization_on_stage.organization_facebook = organization_facebook if organization_website is not False: organization_on_stage.organization_website = organization_website if wikipedia_page_title is not False: organization_on_stage.wikipedia_page_title = wikipedia_page_title if wikipedia_photo_url is not False: organization_on_stage.wikipedia_photo_url = wikipedia_photo_url if state_served_code is not False: organization_on_stage.state_served_code = state_served_code organization_on_stage.save() organization_id = organization_on_stage.id organization_we_vote_id = organization_on_stage.we_vote_id messages.add_message(request, messages.INFO, 'New organization saved.') except Exception as e: messages.add_message(request, messages.ERROR, 'Could not save organization.' ' {error} [type: {error_type}]'.format(error=e, error_type=type(e))) return HttpResponseRedirect(reverse('organization:organization_list', args=())) # Create voter_guide for this election? if positive_value_exists(google_civic_election_id) and positive_value_exists(organization_we_vote_id): election_manager = ElectionManager() results = election_manager.retrieve_election(google_civic_election_id) if results['election_found']: election = results['election'] voter_guide_manager = VoterGuideManager() results = voter_guide_manager.update_or_create_organization_voter_guide_by_election_id( organization_we_vote_id, google_civic_election_id) if results['voter_guide_saved']: messages.add_message(request, messages.INFO, 'Voter guide for {election_name} election saved.' ''.format(election_name=election.election_name)) return HttpResponseRedirect(reverse('organization:organization_position_list', args=(organization_id,)) + "?google_civic_election_id=" + str(google_civic_election_id))
def voter_guide_search_process_view(request): """ Process the new or edit organization forms :param request: :return: """ authority_required = {'verified_volunteer'} # admin, verified_volunteer if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) add_organization_button = request.POST.get('add_organization_button', False) if add_organization_button: return organization_edit_process_view(request) organization_name = request.POST.get('organization_name', '') organization_twitter_handle = request.POST.get( 'organization_twitter_handle', '') organization_facebook = request.POST.get('organization_facebook', '') organization_website = request.POST.get('organization_website', '') # state_served_code = request.POST.get('state_served_code', False) # Save this variable so we have it on the "Add New Position" page google_civic_election_id = request.POST.get('google_civic_election_id', 0) # Filter incoming data organization_twitter_handle = extract_twitter_handle_from_text_string( organization_twitter_handle) # Search for organizations that match organization_email = '' organization_list_manager = OrganizationListManager() results = organization_list_manager.organization_search_find_any_possibilities( organization_name, organization_twitter_handle, organization_website, organization_email, organization_facebook) if results['organizations_found']: organizations_list = results['organizations_list'] organizations_count = len(organizations_list) messages.add_message( request, messages.INFO, 'We found {count} existing organization(s) ' 'that might match.'.format(count=organizations_count)) else: organizations_list = [] messages.add_message( request, messages.INFO, 'No voter guides found with those search terms. ' 'Please try again. ') election_manager = ElectionManager() upcoming_election_list = [] results = election_manager.retrieve_upcoming_elections() if results['success']: upcoming_election_list = results['election_list'] messages_on_stage = get_messages(request) template_values = { 'messages_on_stage': messages_on_stage, 'organizations_list': organizations_list, 'organization_name': organization_name, 'organization_twitter_handle': organization_twitter_handle, 'organization_facebook': organization_facebook, 'organization_website': organization_website, 'upcoming_election_list': upcoming_election_list, 'google_civic_election_id': google_civic_election_id, } return render(request, 'voter_guide/voter_guide_search.html', template_values)
def voter_guide_search_process_view(request): """ Process the new or edit organization forms :param request: :return: """ authority_required = {'verified_volunteer'} # admin, verified_volunteer if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) add_organization_button = request.POST.get('add_organization_button', False) if add_organization_button: return organization_edit_process_view(request) organization_name = request.POST.get('organization_name', '') organization_twitter_handle = request.POST.get('organization_twitter_handle', '') organization_facebook = request.POST.get('organization_facebook', '') organization_website = request.POST.get('organization_website', '') # state_served_code = request.POST.get('state_served_code', False) # Save this variable so we have it on the "Add New Position" page google_civic_election_id = request.POST.get('google_civic_election_id', 0) # Filter incoming data organization_twitter_handle = extract_twitter_handle_from_text_string(organization_twitter_handle) # Search for organizations that match organization_email = '' organization_list_manager = OrganizationListManager() results = organization_list_manager.organization_search_find_any_possibilities( organization_name, organization_twitter_handle, organization_website, organization_email, organization_facebook) if results['organizations_found']: organizations_list = results['organizations_list'] organizations_count = len(organizations_list) messages.add_message(request, messages.INFO, 'We found {count} existing organization(s) ' 'that might match.'.format(count=organizations_count)) else: organizations_list = [] messages.add_message(request, messages.INFO, 'No voter guides found with those search terms. ' 'Please try again. ') election_manager = ElectionManager() upcoming_election_list = [] results = election_manager.retrieve_upcoming_elections() if results['success']: upcoming_election_list = results['election_list'] messages_on_stage = get_messages(request) template_values = { 'messages_on_stage': messages_on_stage, 'organizations_list': organizations_list, 'organization_name': organization_name, 'organization_twitter_handle': organization_twitter_handle, 'organization_facebook': organization_facebook, 'organization_website': organization_website, 'upcoming_election_list': upcoming_election_list, 'google_civic_election_id': google_civic_election_id, } return render(request, 'voter_guide/voter_guide_search.html', template_values)