From 541a3e4641da5c860c3d2bf3401ae1b8d3170564 Mon Sep 17 00:00:00 2001
From: Dale John McGrew
Date: Tue, 19 May 2020 05:51:06 -0700
Subject: [PATCH] Added the ability to retrieve raw analytics. Added
"is_analytics_admin" to the voter record so we can grant certain account
access.
---
admin_tools/views.py | 24 ++--
analytics/views_admin.py | 116 +++++++++++++++---
.../analytics_action_sync_out_doc.py | 83 +++++++++++++
.../voter_retrieve_doc.py | 1 +
apis_v1/urls.py | 4 +
apis_v1/views/views_docs.py | 14 ++-
apis_v1/views/views_organization.py | 4 +-
ballot/views_admin.py | 17 ++-
candidate/views_admin.py | 10 +-
donate/views_admin.py | 2 +-
elected_office/views_admin.py | 4 +-
elected_official/views_admin.py | 4 +-
election/views_admin.py | 24 ++--
electoral_district/views_admin.py | 2 +-
import_export_ballotpedia/views_admin.py | 16 +--
import_export_batches/views_admin.py | 8 +-
import_export_google_civic/views_admin.py | 4 +-
import_export_twitter/views_admin.py | 28 ++---
issue/views_admin.py | 18 +--
measure/views_admin.py | 10 +-
office/views_admin.py | 18 +--
organization/views_admin.py | 30 ++---
politician/views_admin.py | 4 +-
polling_location/views_admin.py | 8 +-
position/views_admin.py | 6 +-
templates/apis_v1/apis_index.html | 10 ++
templates/registration/login_we_vote.html | 1 +
templates/voter/voter_edit.html | 8 ++
templates/voter/voter_list.html | 21 +++-
voter/controllers.py | 7 ++
voter/models.py | 14 +++
voter/views_admin.py | 20 ++-
voter_guide/views_admin.py | 28 ++---
33 files changed, 404 insertions(+), 164 deletions(-)
create mode 100644 apis_v1/documentation_source/analytics_action_sync_out_doc.py
diff --git a/admin_tools/views.py b/admin_tools/views.py
index c589fb898..885730fcb 100644
--- a/admin_tools/views.py
+++ b/admin_tools/views.py
@@ -58,7 +58,7 @@
@login_required
def admin_home_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'admin', 'partner_organization', 'political_data_manager', 'political_data_viewer',
'verified_volunteer'}
if not voter_has_authority(request, authority_required):
@@ -106,7 +106,7 @@ def admin_home_view(request):
@login_required
def data_cleanup_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'admin'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -125,7 +125,7 @@ def data_cleanup_organization_analysis_view(request):
:param request:
:return:
"""
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'admin'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -288,7 +288,7 @@ def data_cleanup_organization_list_analysis_view(request):
:param request:
:return:
"""
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'admin'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -536,7 +536,7 @@ def data_cleanup_organization_list_analysis_view(request):
@login_required
def data_cleanup_position_list_analysis_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'admin'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -952,7 +952,7 @@ def add_organization_to_position_owner_local(voter_id, one_position):
@login_required
def data_cleanup_voter_hanging_data_process_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'admin'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -1083,7 +1083,7 @@ def data_cleanup_voter_hanging_data_process_view(request):
@login_required
def data_cleanup_voter_list_analysis_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'admin'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -1335,7 +1335,7 @@ def data_cleanup_voter_list_analysis_view(request):
@login_required
def data_voter_statistics_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'admin'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -1543,7 +1543,7 @@ def data_voter_statistics_view(request):
@login_required
def delete_test_data_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'admin'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -1560,7 +1560,7 @@ def delete_test_data_view(request):
@login_required
def import_sample_data_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'admin'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -1818,7 +1818,7 @@ def redirect_to_sign_in_page(request, authority_required={}):
@login_required
def statistics_summary_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'verified_volunteer'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -1841,7 +1841,7 @@ def statistics_summary_view(request):
@login_required
def sync_data_with_master_servers_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'admin'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
diff --git a/analytics/views_admin.py b/analytics/views_admin.py
index 1cf0b74d6..3a0f4ca0a 100644
--- a/analytics/views_admin.py
+++ b/analytics/views_admin.py
@@ -6,32 +6,97 @@
augment_voter_analytics_action_entries_without_election_id, \
save_organization_daily_metrics, save_organization_election_metrics, \
save_sitewide_daily_metrics, save_sitewide_election_metrics, save_sitewide_voter_metrics
-from .models import ACTION_WELCOME_VISIT, AnalyticsAction, AnalyticsManager, \
+from .models import ACTION_WELCOME_VISIT, AnalyticsAction, AnalyticsManager, display_action_constant_human_readable, \
OrganizationDailyMetrics, OrganizationElectionMetrics, \
SitewideDailyMetrics, SitewideElectionMetrics, SitewideVoterMetrics
from admin_tools.views import redirect_to_sign_in_page
from config.base import get_environment_variable
-from django.http import HttpResponseRedirect
+from datetime import date, datetime, timedelta
+from django.http import HttpResponse, HttpResponseRedirect
from django.urls import reverse
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.contrib.messages import get_messages
from django.db.models import Q
from django.shortcuts import render
+from django.utils.timezone import now
from election.models import Election
from exception.models import print_to_log
+import json
from voter.models import voter_has_authority
import wevote_functions.admin
-from wevote_functions.functions import convert_date_as_integer_to_date, convert_to_int, positive_value_exists
+from wevote_functions.functions import convert_date_as_integer_to_date, convert_date_to_date_as_integer, \
+ convert_to_int, positive_value_exists
from wevote_settings.models import WeVoteSetting, WeVoteSettingsManager
+
logger = wevote_functions.admin.get_logger(__name__)
+ANALYTICS_ACTION_SYNC_URL = "https://api.wevoteusa.org/apis/v1/analyticsActionSyncOut/" # analyticsActionSyncOut
WEB_APP_ROOT_URL = get_environment_variable("WEB_APP_ROOT_URL")
+@login_required
+def analytics_action_sync_out_view(request): # analyticsActionSyncOut
+ status = ''
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ authority_required = {'analytics_admin'}
+ if not voter_has_authority(request, authority_required):
+ json_data = {
+ 'success': False,
+ 'status': 'ANALYTICS_ACTION_SYNC_OUT-NOT_ANALYTICS_ADMIN '
+ }
+ return HttpResponse(json.dumps(json_data), content_type='application/json')
+ starting_date_as_integer = convert_to_int(request.GET.get('starting_date_as_integer', 0))
+ ending_date_as_integer = convert_to_int(request.GET.get('ending_date_as_integer', 0))
+
+ try:
+ analytics_action_query = AnalyticsAction.objects.all().order_by('-id')
+ if positive_value_exists(starting_date_as_integer):
+ analytics_action_query = analytics_action_query.filter(date_as_integer__gte=starting_date_as_integer)
+ else:
+ three_months_ago = now() - timedelta(days=90)
+ generated_starting_date_as_integer = convert_date_to_date_as_integer(three_months_ago)
+ analytics_action_query = analytics_action_query.filter(
+ date_as_integer__gte=generated_starting_date_as_integer)
+ if positive_value_exists(ending_date_as_integer):
+ analytics_action_query = analytics_action_query.filter(date_as_integer__lte=ending_date_as_integer)
+ # else:
+ # # By default only return up to two days ago, so we are sure that the post-processing is done
+ # yesterday = now() - timedelta(days=1)
+ # generated_ending_date_as_integer = convert_date_to_date_as_integer(yesterday)
+ # analytics_action_query = analytics_action_query.filter(
+ # date_as_integer__lte=generated_ending_date_as_integer)
+
+ analytics_action_query = analytics_action_query.extra(
+ select={'exact_time': "to_char(exact_time, 'YYYY-MM-DD HH24:MI:SS')"})
+ analytics_action_list_dict = analytics_action_query.values(
+ 'id', 'action_constant', 'authentication_failed_twice',
+ 'ballot_item_we_vote_id', 'date_as_integer',
+ 'exact_time', 'first_visit_today', 'google_civic_election_id',
+ 'is_bot', 'is_desktop', 'is_mobile', 'is_signed_in', 'is_tablet',
+ 'organization_we_vote_id', 'state_code', 'user_agent', 'voter_we_vote_id')
+ if analytics_action_list_dict:
+ analytics_action_list_raw = list(analytics_action_list_dict)
+ analytics_action_list_json = []
+ for one_dict in analytics_action_list_raw:
+ one_dict['action_constant_text'] = display_action_constant_human_readable(one_dict['action_constant'])
+ analytics_action_list_json.append(one_dict)
+ return HttpResponse(json.dumps(analytics_action_list_json), content_type='application/json')
+ except Exception as e:
+ status += 'QUERY_FAILURE: ' + str(e) + ' '
+
+ status += 'ANALYTICS_ACTION_LIST_EMPTY '
+ json_data = {
+ 'success': False,
+ 'status': status,
+ }
+ return HttpResponse(json.dumps(json_data), content_type='application/json')
+
+
@login_required
def analytics_index_view(request):
- authority_required = {'verified_volunteer'} # admin, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ authority_required = {'verified_volunteer'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
voter_allowed_to_see_organization_analytics = True
@@ -115,7 +180,8 @@ def analytics_index_view(request):
@login_required
def analytics_index_process_view(request):
- authority_required = {'verified_volunteer'} # admin, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ authority_required = {'verified_volunteer'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -140,7 +206,8 @@ def analytics_index_process_view(request):
@login_required
def organization_analytics_index_view(request):
- authority_required = {'verified_volunteer'} # admin, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ authority_required = {'verified_volunteer'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -174,6 +241,7 @@ def organization_analytics_index_view(request):
messages_on_stage = get_messages(request)
+ voter_allowed_to_see_organization_analytics = False # To be implemented
template_values = {
'messages_on_stage': messages_on_stage,
'organization_election_metrics_list': organization_election_metrics_list,
@@ -192,7 +260,8 @@ def organization_daily_metrics_process_view(request):
:param request:
:return:
"""
- authority_required = {'political_data_manager'} # admin, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -227,7 +296,8 @@ def analytics_action_list_view(request, voter_we_vote_id=False, organization_we_
:param organization_we_vote_id:
:return:
"""
- authority_required = {'verified_volunteer'} # admin, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ authority_required = {'verified_volunteer'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -322,7 +392,8 @@ def analytics_action_list_view(request, voter_we_vote_id=False, organization_we_
@login_required
def augment_voter_analytics_process_view(request, voter_we_vote_id):
- authority_required = {'political_data_manager'} # admin, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -351,7 +422,8 @@ def organization_daily_metrics_view(request):
:param request:
:return:
"""
- authority_required = {'verified_volunteer'} # admin, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ authority_required = {'verified_volunteer'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -387,7 +459,8 @@ def organization_election_metrics_process_view(request):
:param request:
:return:
"""
- authority_required = {'political_data_manager'} # admin, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -425,7 +498,8 @@ def organization_election_metrics_view(request):
:param request:
:return:
"""
- authority_required = {'verified_volunteer'} # admin, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ authority_required = {'verified_volunteer'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -470,7 +544,8 @@ def sitewide_daily_metrics_process_view(request):
:param request:
:return:
"""
- authority_required = {'political_data_manager'} # admin, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -513,7 +588,8 @@ def sitewide_daily_metrics_view(request):
:param request:
:return:
"""
- authority_required = {'verified_volunteer'} # admin, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ authority_required = {'verified_volunteer'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -564,7 +640,8 @@ def sitewide_election_metrics_process_view(request):
:param request:
:return:
"""
- authority_required = {'political_data_manager'} # admin, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -592,7 +669,8 @@ def sitewide_election_metrics_view(request):
:param request:
:return:
"""
- authority_required = {'verified_volunteer'} # admin, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ authority_required = {'verified_volunteer'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -629,7 +707,8 @@ def sitewide_voter_metrics_process_view(request):
:param request:
:return:
"""
- authority_required = {'political_data_manager'} # admin, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -695,7 +774,8 @@ def sitewide_voter_metrics_view(request):
:param request:
:return:
"""
- authority_required = {'verified_volunteer'} # admin, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ authority_required = {'verified_volunteer'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
diff --git a/apis_v1/documentation_source/analytics_action_sync_out_doc.py b/apis_v1/documentation_source/analytics_action_sync_out_doc.py
new file mode 100644
index 000000000..f3335be56
--- /dev/null
+++ b/apis_v1/documentation_source/analytics_action_sync_out_doc.py
@@ -0,0 +1,83 @@
+# apis_v1/documentation_source/analytics_action_sync_out_doc.py
+# Brought to you by We Vote. Be good.
+# -*- coding: UTF-8 -*-
+
+
+def analytics_action_sync_out_doc_template_values(url_root):
+ """
+ Show documentation about analyticsActionSyncOut
+ """
+ required_query_parameter_list = [
+ {
+ 'name': 'api_key',
+ 'value': 'string (from post, cookie, or get (in that order))', # boolean, integer, long, string
+ 'description': 'The unique key provided to any organization using the WeVoteServer APIs',
+ },
+ {
+ 'name': 'voter_device_id',
+ 'value': 'string', # boolean, integer, long, string
+ 'description': 'An 88 character unique identifier linked to a voter record on the server. '
+ 'If not provided, a new voter_device_id (and voter entry) '
+ 'will be generated, and the voter_device_id will be returned.',
+ },
+ ]
+ optional_query_parameter_list = [
+ {
+ 'name': 'starting_date_as_integer',
+ 'value': 'integer', # boolean, integer, long, string
+ 'description': 'The earliest date for the batch we are retrieving. Format: YYYYMMDD (ex/ 20200131) '
+ '(Default is 3 months ago)',
+ },
+ {
+ 'name': 'ending_date_as_integer',
+ 'value': 'integer', # boolean, integer, long, string
+ 'description': 'Retrieve data through this date. Format: YYYYMMDD (ex/ 20200228) (Default is right now.)'
+ },
+ ]
+
+ potential_status_codes_list = [
+ ]
+
+ try_now_link_variables_dict = {
+ }
+
+ api_response = '[{\n' \
+ ' "id": integer,\n' \
+ ' "action_constant": string,\n' \
+ ' "action_constant_text": string,\n' \
+ ' "authentication_failed_twice": string,\n' \
+ ' "ballot_item_we_vote_id": string,\n' \
+ ' "date_as_integer": integer,\n' \
+ ' "exact_time": string,\n' \
+ ' "first_visit_today": boolean,\n' \
+ ' "google_civic_election_id": string,\n' \
+ ' "is_bot": boolean,\n' \
+ ' "is_desktop": boolean,\n' \
+ ' "is_mobile": boolean,\n' \
+ ' "is_signed_in": boolean,\n' \
+ ' "is_tablet": boolean,\n' \
+ ' "organization_we_vote_id": string,\n' \
+ ' "state_code": string,\n' \
+ ' "user_agent": string,\n' \
+ ' "voter_we_vote_id": string,\n' \
+ '}]'
+
+ template_values = {
+ 'api_name': 'analyticsActionSyncOut',
+ 'api_slug': 'analyticsActionSyncOut',
+ 'api_introduction':
+ "Allow people with Analytics Admin authority to retrieve raw Analytics Action information "
+ "for data analysis purposes. The definitions of the ACTION constants ('action_constant') are here: "
+ "https://github.com/wevote/WeVoteServer/blob/develop/analytics/models.py",
+ 'try_now_link': 'apis_v1:analyticsActionSyncOutView',
+ 'try_now_link_variables_dict': try_now_link_variables_dict,
+ 'url_root': url_root,
+ 'get_or_post': 'GET',
+ 'required_query_parameter_list': required_query_parameter_list,
+ 'optional_query_parameter_list': optional_query_parameter_list,
+ 'api_response': api_response,
+ 'api_response_notes':
+ "",
+ 'potential_status_codes_list': potential_status_codes_list,
+ }
+ return template_values
diff --git a/apis_v1/documentation_source/voter_retrieve_doc.py b/apis_v1/documentation_source/voter_retrieve_doc.py
index 5d9fbc53b..fa50175c4 100644
--- a/apis_v1/documentation_source/voter_retrieve_doc.py
+++ b/apis_v1/documentation_source/voter_retrieve_doc.py
@@ -59,6 +59,7 @@ def voter_retrieve_doc_template_values(url_root):
' "twitter_screen_name": string,\n' \
' "is_signed_in": boolean,\n' \
' "is_admin": boolean,\n' \
+ ' "is_analytics_admin": boolean,\n' \
' "is_partner_organization": boolean,\n' \
' "is_political_data_manager": boolean,\n' \
' "is_political_data_viewer": boolean,\n' \
diff --git a/apis_v1/urls.py b/apis_v1/urls.py
index bf5d2c798..7c2703b0d 100644
--- a/apis_v1/urls.py
+++ b/apis_v1/urls.py
@@ -14,6 +14,7 @@
views_election, views_extension, views_facebook, views_friend, \
views_issues, views_measure, views_misc, views_organization, \
views_pledge_to_vote, views_position, views_task, views_share, views_twitter, views_voter, views_voter_guide
+from analytics.views_admin import analytics_action_sync_out_view
from ballot.views_admin import ballot_items_sync_out_view, ballot_returned_sync_out_view
from candidate.views_admin import candidates_sync_out_view
from issue.views_admin import issue_descriptions_retrieve_view, issues_followed_retrieve_view,\
@@ -32,6 +33,7 @@
# Actual API Calls
url(r'^allBallotItemsRetrieve/', views_ballot.all_ballot_items_retrieve_view,
name='allBallotItemsRetrieveView'),
+ url(r'^analyticsActionSyncOut/', analytics_action_sync_out_view, name='analyticsActionSyncOutView'),
url(r'^ballotItemOptionsRetrieve/', views_ballot.ballot_item_options_retrieve_view,
name='ballotItemOptionsRetrieveView'),
url(r'^ballotItemRetrieve/', views_ballot.ballot_item_retrieve_view, name='ballotItemRetrieveView'),
@@ -287,6 +289,8 @@
url(r'^docs/$', views_docs.apis_index_doc_view, name='apisIndex'),
url(r'^docs/allBallotItemsRetrieve/$',
views_docs.all_ballot_items_retrieve_doc_view, name='allBallotItemsRetrieveDocs'),
+ url(r'^docs/analyticsActionSyncOut/$',
+ views_docs.analytics_action_sync_out_doc_view, name='analyticsActionSyncOutDocs'),
url(r'^docs/ballotItemOptionsRetrieve/$',
views_docs.ballot_item_options_retrieve_doc_view, name='ballotItemOptionsRetrieveDocs'),
url(r'^docs/ballotItemRetrieve/$', views_docs.ballot_item_retrieve_doc_view, name='ballotItemRetrieveDocs'),
diff --git a/apis_v1/views/views_docs.py b/apis_v1/views/views_docs.py
index 75305f3b6..afdeea684 100644
--- a/apis_v1/views/views_docs.py
+++ b/apis_v1/views/views_docs.py
@@ -2,8 +2,8 @@
# Brought to you by We Vote. Be good.
# -*- coding: UTF-8 -*-
-from apis_v1.documentation_source import all_ballot_items_retrieve_doc, ballot_item_options_retrieve_doc, \
- ballot_item_retrieve_doc, \
+from apis_v1.documentation_source import all_ballot_items_retrieve_doc, analytics_action_sync_out_doc, \
+ ballot_item_options_retrieve_doc, ballot_item_retrieve_doc, \
ballot_items_sync_out_doc, ballot_returned_sync_out_doc, candidate_retrieve_doc, \
candidates_retrieve_doc, candidate_list_for_upcoming_elections_retrieve_doc, \
candidates_sync_out_doc, device_id_generate_doc, donation_with_stripe_doc, \
@@ -104,6 +104,16 @@ def all_ballot_items_retrieve_doc_view(request):
return render(request, 'apis_v1/api_doc_page.html', template_values)
+def analytics_action_sync_out_doc_view(request):
+ """
+ Show documentation about analyticsActionSyncOut
+ """
+ url_root = WE_VOTE_SERVER_ROOT_URL
+ template_values = analytics_action_sync_out_doc.analytics_action_sync_out_doc_template_values(url_root)
+ template_values['voter_api_device_id'] = get_voter_api_device_id(request)
+ return render(request, 'apis_v1/api_doc_page.html', template_values)
+
+
def ballot_item_options_retrieve_doc_view(request):
"""
Show documentation about ballotItemOptionsRetrieve
diff --git a/apis_v1/views/views_organization.py b/apis_v1/views/views_organization.py
index 2eb879af7..33d2b9b14 100644
--- a/apis_v1/views/views_organization.py
+++ b/apis_v1/views/views_organization.py
@@ -276,7 +276,7 @@ def organization_photos_save_view(request): # organizationPhotosSave
delete_chosen_social_share_master_image = \
positive_value_exists(request.POST.get('delete_chosen_social_share_master_image', False))
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'admin', 'political_data_manager'}
voter_has_staff_authority_required = False
if voter_has_authority(request, authority_required):
@@ -399,7 +399,7 @@ def organization_save_view(request): # organizationSave
chosen_social_share_description = request.GET.get('chosen_social_share_description', False)
chosen_subscription_plan = request.GET.get('chosen_subscription_plan', False)
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'admin', 'political_data_manager', 'verified_volunteer'}
voter_has_staff_authority_required = False
if voter_has_authority(request, authority_required):
diff --git a/ballot/views_admin.py b/ballot/views_admin.py
index 4d32fb0eb..89be8db65 100644
--- a/ballot/views_admin.py
+++ b/ballot/views_admin.py
@@ -8,25 +8,24 @@
from admin_tools.views import redirect_to_sign_in_page
from candidate.models import CandidateCampaignListManager
from config.base import get_environment_variable
-from exception.models import handle_record_not_deleted_exception
-from office.models import ContestOffice, ContestOfficeManager
-from django.http import HttpResponseRedirect
-from django.urls import reverse
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.contrib.messages import get_messages
from django.db.models import Q
-from django.http import HttpResponse
+from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render
+from django.urls import reverse
from election.models import Election, ElectionManager
+from exception.models import handle_record_not_deleted_exception
from geopy.geocoders import get_geocoder_for_service
+import json
from measure.models import ContestMeasure, ContestMeasureManager
+from office.models import ContestOffice, ContestOfficeManager
from polling_location.models import PollingLocation, PollingLocationManager
import time
from voter.models import voter_has_authority
import wevote_functions.admin
from wevote_functions.functions import convert_to_int, positive_value_exists
-import json
BALLOT_ITEMS_SYNC_URL = get_environment_variable("BALLOT_ITEMS_SYNC_URL") # ballotItemsSyncOut
BALLOT_RETURNED_SYNC_URL = get_environment_variable("BALLOT_RETURNED_SYNC_URL") # ballotReturnedSyncOut
@@ -206,7 +205,7 @@ def ballot_items_import_from_master_server_view(request):
:param request:
:return:
"""
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'admin'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -239,7 +238,7 @@ def ballot_items_import_from_master_server_view(request):
@login_required
def ballot_returned_import_from_master_server_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'admin'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -834,7 +833,7 @@ def update_ballot_returned_with_latitude_and_longitude_view(request):
:param request:
:return:
"""
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
diff --git a/candidate/views_admin.py b/candidate/views_admin.py
index cda208273..0ba7e2f6b 100644
--- a/candidate/views_admin.py
+++ b/candidate/views_admin.py
@@ -152,7 +152,7 @@ def candidates_sync_out_view(request): # candidatesSyncOut
@login_required
def candidates_import_from_master_server_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'admin'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -206,7 +206,7 @@ def candidates_import_from_sample_file_view(request):
@login_required
def candidate_list_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'partner_organization', 'verified_volunteer'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -1950,7 +1950,7 @@ def remove_duplicate_candidate_view(request):
:param request:
:return:
"""
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -2071,7 +2071,7 @@ def retrieve_candidate_photos_for_election_view(request, election_id):
@login_required
def candidate_summary_view(request, candidate_id):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'partner_organization', 'verified_volunteer'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -2268,7 +2268,7 @@ def candidate_delete_process_view(request):
@login_required
def compare_two_candidates_for_merge_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
diff --git a/donate/views_admin.py b/donate/views_admin.py
index b8118c407..4744e33e0 100644
--- a/donate/views_admin.py
+++ b/donate/views_admin.py
@@ -18,7 +18,7 @@
@login_required
def organization_subscription_list_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'admin'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
diff --git a/elected_office/views_admin.py b/elected_office/views_admin.py
index 1d174ea7b..326882793 100644
--- a/elected_office/views_admin.py
+++ b/elected_office/views_admin.py
@@ -32,7 +32,7 @@
@login_required
def elected_office_list_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'partner_organization', 'verified_volunteer'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -228,7 +228,7 @@ def elected_office_edit_view(request, elected_office_id=0, elected_office_we_vot
@login_required
def elected_office_summary_view(request, elected_office_id):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'partner_organization', 'verified_volunteer'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
diff --git a/elected_official/views_admin.py b/elected_official/views_admin.py
index 905491fbf..004f63654 100644
--- a/elected_official/views_admin.py
+++ b/elected_official/views_admin.py
@@ -34,7 +34,7 @@
@login_required
def elected_official_list_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'partner_organization', 'verified_volunteer'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -452,7 +452,7 @@ def elected_official_edit_process_view(request):
@login_required
def elected_official_retrieve_photos_view(request, candidate_id): # TODO DALE Transition fully to elected_official
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'admin'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
diff --git a/election/views_admin.py b/election/views_admin.py
index 2fc1c328e..6577f8de1 100644
--- a/election/views_admin.py
+++ b/election/views_admin.py
@@ -82,7 +82,7 @@ def ballotpedia_election_delete_process_view(request):
:param request:
:return:
"""
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -143,7 +143,7 @@ def election_all_ballots_retrieve_view(request, election_local_id=0):
:param election_local_id:
:return:
"""
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -338,7 +338,7 @@ def election_one_ballot_retrieve_view(request, election_local_id=0):
:param election_local_id:
:return:
"""
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -506,7 +506,7 @@ def election_one_ballot_retrieve_view(request, election_local_id=0):
@login_required
def election_edit_view(request, election_local_id):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -559,7 +559,7 @@ def election_delete_process_view(request):
:param request:
:return:
"""
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -609,7 +609,7 @@ def election_edit_process_view(request):
:param request:
:return:
"""
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -759,7 +759,7 @@ def election_edit_process_view(request):
@login_required()
def election_list_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'partner_organization', 'political_data_manager', 'political_data_viewer',
'verified_volunteer'}
if not voter_has_authority(request, authority_required):
@@ -940,7 +940,7 @@ def election_list_view(request):
@login_required()
def nationwide_election_list_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'partner_organization', 'political_data_manager', 'political_data_viewer',
'verified_volunteer'}
if not voter_has_authority(request, authority_required):
@@ -1165,7 +1165,7 @@ def election_remote_retrieve_view(request):
:param request:
:return:
"""
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager', 'verified_volunteer'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -1181,7 +1181,7 @@ def election_remote_retrieve_view(request):
@login_required()
def election_summary_view(request, election_local_id=0, google_civic_election_id=''):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'partner_organization', 'political_data_manager', 'political_data_viewer',
'verified_volunteer'}
if not voter_has_authority(request, authority_required):
@@ -1492,7 +1492,7 @@ def election_summary_view(request, election_local_id=0, google_civic_election_id
@login_required
def elections_import_from_master_server_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'admin'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -1522,7 +1522,7 @@ def elections_import_from_master_server_view(request):
@login_required()
def election_migration_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
diff --git a/electoral_district/views_admin.py b/electoral_district/views_admin.py
index e1c1dbb5c..0769bb78c 100644
--- a/electoral_district/views_admin.py
+++ b/electoral_district/views_admin.py
@@ -106,7 +106,7 @@ def electoral_district_import_from_xml_view(request):
@login_required
def electoral_district_list_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'verified_volunteer'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
diff --git a/import_export_ballotpedia/views_admin.py b/import_export_ballotpedia/views_admin.py
index 1b7c4e792..02ae18bb6 100644
--- a/import_export_ballotpedia/views_admin.py
+++ b/import_export_ballotpedia/views_admin.py
@@ -52,7 +52,7 @@ def import_ballot_items_for_location_view(request):
status = ""
success = True
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -145,7 +145,7 @@ def attach_ballotpedia_election_view(request, election_local_id=0):
:param election_local_id:
:return:
"""
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -288,7 +288,7 @@ def refresh_ballotpedia_districts_for_polling_locations_view(request):
:param request:
:return:
"""
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -411,7 +411,7 @@ def retrieve_ballotpedia_candidates_by_district_from_api_view(request):
"""
Reach out to Ballotpedia API to retrieve candidates.
"""
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -483,7 +483,7 @@ def retrieve_ballotpedia_ballots_for_polling_locations_api_v4_view(request):
"""
status = ""
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -903,7 +903,7 @@ def refresh_ballotpedia_ballots_for_voters_api_v4_view(request):
:param request:
:return:
"""
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -1192,7 +1192,7 @@ def retrieve_ballotpedia_data_for_polling_locations_view(request, election_local
:param election_local_id:
:return:
"""
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -1478,7 +1478,7 @@ def retrieve_ballotpedia_data_for_polling_locations_view(request, election_local
# """
# Reach out to Ballotpedia API to retrieve offices.
# """
-# # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+# # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
# authority_required = {'political_data_manager'}
# if not voter_has_authority(request, authority_required):
# return redirect_to_sign_in_page(request, authority_required)
diff --git a/import_export_batches/views_admin.py b/import_export_batches/views_admin.py
index ce72e2dd6..3eb2d9752 100755
--- a/import_export_batches/views_admin.py
+++ b/import_export_batches/views_admin.py
@@ -1343,7 +1343,7 @@ def batch_set_list_process_view(request):
@login_required
def batch_process_system_toggle_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -1370,7 +1370,7 @@ def batch_process_system_toggle_view(request):
@login_required
def batch_process_list_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -1592,7 +1592,7 @@ def batch_process_next_steps_view(request):
@login_required
def batch_process_pause_toggle_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -1625,7 +1625,7 @@ def batch_process_pause_toggle_view(request):
@login_required
def batch_process_log_entry_list_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
diff --git a/import_export_google_civic/views_admin.py b/import_export_google_civic/views_admin.py
index ae5766047..756d4e65d 100644
--- a/import_export_google_civic/views_admin.py
+++ b/import_export_google_civic/views_admin.py
@@ -36,7 +36,7 @@ def retrieve_representatives_for_many_addresses_view(request): # THIS FUNCTION
:param request:
:return:
"""
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -218,7 +218,7 @@ def retrieve_representatives_for_one_address_view(request):
:param request:
:return:
"""
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
diff --git a/import_export_twitter/views_admin.py b/import_export_twitter/views_admin.py
index 99bd20361..7c32a95da 100644
--- a/import_export_twitter/views_admin.py
+++ b/import_export_twitter/views_admin.py
@@ -32,7 +32,7 @@
@login_required
def delete_possible_twitter_handles_view(request, candidate_campaign_we_vote_id):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -55,7 +55,7 @@ def delete_possible_twitter_handles_view(request, candidate_campaign_we_vote_id)
@login_required
def retrieve_possible_twitter_handles_view(request, candidate_campaign_we_vote_id):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -79,7 +79,7 @@ def retrieve_possible_twitter_handles_view(request, candidate_campaign_we_vote_i
@login_required
def bulk_retrieve_possible_twitter_handles_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -154,7 +154,7 @@ def bulk_retrieve_possible_twitter_handles_view(request):
@login_required
def delete_images_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -210,7 +210,7 @@ def delete_images_view(request):
@login_required
def refresh_twitter_candidate_details_view(request, candidate_id):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -231,7 +231,7 @@ def refresh_twitter_candidate_details_view(request, candidate_id):
@login_required
def refresh_twitter_organization_details_view(request, organization_id):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'verified_volunteer'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -256,7 +256,7 @@ def refresh_twitter_organization_details_view(request, organization_id):
@login_required
def refresh_twitter_politician_details_view(request, politician_id): # TODO DALE Get this working for politicians
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'verified_volunteer'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -278,7 +278,7 @@ def refresh_twitter_politician_details_view(request, politician_id): # TODO DAL
@login_required
def refresh_twitter_elected_official_details_view(request, elected_official_id):
# TODO DALE Get this working for politicians
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'verified_volunteer'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -299,7 +299,7 @@ def refresh_twitter_elected_official_details_view(request, elected_official_id):
@login_required
def scrape_website_for_social_media_view(request, organization_id, force_retrieve=False):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -361,7 +361,7 @@ def scrape_website_for_social_media_view(request, organization_id, force_retriev
@login_required
def refresh_twitter_data_for_organizations_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -396,7 +396,7 @@ def refresh_twitter_data_for_organizations_view(request):
@login_required
def scrape_social_media_from_all_organizations_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'admin'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -421,7 +421,7 @@ def scrape_social_media_from_all_organizations_view(request):
@login_required
def scrape_social_media_for_candidates_in_one_election_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -445,7 +445,7 @@ def scrape_social_media_for_candidates_in_one_election_view(request):
@login_required
def refresh_twitter_candidate_details_for_election_view(request, election_id):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -474,7 +474,7 @@ def refresh_twitter_candidate_details_for_election_view(request, election_id):
@login_required
def transfer_candidate_twitter_handles_from_google_civic_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
diff --git a/issue/views_admin.py b/issue/views_admin.py
index e3c92e7d9..78b79f24f 100644
--- a/issue/views_admin.py
+++ b/issue/views_admin.py
@@ -124,7 +124,7 @@ def retrieve_issues_to_follow_view(request): # retrieveIssuesToFollow
@login_required
def issues_import_from_master_server_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'admin'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -154,7 +154,7 @@ def issues_import_from_master_server_view(request):
@login_required
def issue_list_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'partner_organization', 'political_data_manager', 'political_data_viewer',
'verified_volunteer'}
if not voter_has_authority(request, authority_required):
@@ -330,7 +330,7 @@ def issue_list_view(request):
@login_required
def issue_new_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -369,7 +369,7 @@ def issue_new_view(request):
@login_required
def issue_edit_view(request, issue_we_vote_id):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager', 'verified_volunteer'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -447,7 +447,7 @@ def issue_edit_process_view(request):
:param request:
:return:
"""
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager', 'verified_volunteer'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -594,7 +594,7 @@ def issue_edit_process_view(request):
@login_required
def issue_summary_view(request, issue_id):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'partner_organization', 'political_data_manager', 'political_data_viewer',
'verified_volunteer'}
if not voter_has_authority(request, authority_required):
@@ -627,7 +627,7 @@ def issue_summary_view(request, issue_id):
@login_required
def issue_delete_images_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -668,7 +668,7 @@ def issue_delete_process_view(request):
:param request:
:return:
"""
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'admin'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -727,7 +727,7 @@ def issue_delete_process_view(request):
@login_required
def organization_link_to_issue_import_from_master_server_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'admin'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
diff --git a/measure/views_admin.py b/measure/views_admin.py
index 98261032b..8f4c761f3 100644
--- a/measure/views_admin.py
+++ b/measure/views_admin.py
@@ -38,7 +38,7 @@
@login_required
def compare_two_measures_for_merge_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -81,7 +81,7 @@ def compare_two_measures_for_merge_view(request):
@login_required
def find_and_merge_duplicate_measures_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -208,7 +208,7 @@ def measures_sync_out_view(request): # measuresSyncOut
@login_required
def measures_import_from_master_server_view(request): # GET '/m/import/?google_civic_election_id=nnn&state_code=xx'
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'admin'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -416,7 +416,7 @@ def add_contest_measure_title_to_next_spot(contest_measure_to_update, google_civ
@login_required
def measure_list_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'partner_organization', 'verified_volunteer'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -752,7 +752,7 @@ def measure_edit_process_view(request):
@login_required
def measure_summary_view(request, measure_id):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'partner_organization', 'verified_volunteer'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
diff --git a/office/views_admin.py b/office/views_admin.py
index dadcec04d..64b2b1794 100644
--- a/office/views_admin.py
+++ b/office/views_admin.py
@@ -39,7 +39,7 @@
@login_required
def compare_two_offices_for_merge_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -150,7 +150,7 @@ def offices_visiting_sync_out_view(request): # officesVisitingSyncOut
@login_required
def offices_import_from_master_server_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'admin'}
status = ""
if not voter_has_authority(request, authority_required):
@@ -196,7 +196,7 @@ def offices_import_from_master_server_view(request):
@login_required
def office_list_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'partner_organization', 'verified_volunteer'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -365,7 +365,7 @@ def office_list_view(request):
@login_required
def office_list_process_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'verified_volunteer', 'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -643,7 +643,7 @@ def office_edit_process_view(request):
@login_required
def office_summary_view(request, office_id):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'partner_organization', 'verified_volunteer'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -797,7 +797,7 @@ def office_summary_view(request, office_id):
@login_required
def delete_office_visiting_process_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -819,7 +819,7 @@ def delete_office_visiting_process_view(request):
@login_required
def office_delete_process_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -869,7 +869,7 @@ def office_delete_process_view(request):
@login_required
def find_duplicate_office_view(request, office_id=0):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -932,7 +932,7 @@ def find_duplicate_office_view(request, office_id=0):
@login_required
def find_and_merge_duplicate_offices_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
diff --git a/organization/views_admin.py b/organization/views_admin.py
index f088b1092..ec30f837a 100644
--- a/organization/views_admin.py
+++ b/organization/views_admin.py
@@ -151,7 +151,7 @@ def organizations_sync_out_view(request): # organizationsSyncOut
@login_required
def organizations_import_from_master_server_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'admin'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -184,7 +184,7 @@ def organizations_import_from_master_server_view(request):
@login_required
def organization_list_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'partner_organization', 'political_data_manager', 'political_data_viewer',
'verified_volunteer'}
if not voter_has_authority(request, authority_required):
@@ -371,7 +371,7 @@ def organization_list_view(request):
@login_required
def organization_new_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager', 'verified_volunteer'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -400,7 +400,7 @@ def organization_new_view(request):
@login_required
def organization_edit_view(request, organization_id=0, organization_we_vote_id=""):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager', 'verified_volunteer'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -474,7 +474,7 @@ def organization_edit_view(request, organization_id=0, organization_we_vote_id="
@login_required
def organization_edit_account_view(request, organization_id=0, organization_we_vote_id=""):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager', 'verified_volunteer'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -618,7 +618,7 @@ def organization_edit_process_view(request):
:param request:
:return:
"""
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager', 'verified_volunteer'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -886,7 +886,7 @@ def organization_edit_account_process_view(request):
:param request:
:return:
"""
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -1001,7 +1001,7 @@ def organization_edit_account_process_view(request):
@login_required
def organization_position_list_view(request, organization_id=0, organization_we_vote_id="", incorrect_integer=0):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'partner_organization', 'political_data_manager', 'political_data_viewer',
'verified_volunteer'}
if not voter_has_authority(request, authority_required):
@@ -1183,7 +1183,7 @@ def organization_position_list_view(request, organization_id=0, organization_we_
@login_required
def organization_position_new_view(request, organization_id):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager', 'verified_volunteer'}
authority_results = retrieve_voter_authority(request)
if not voter_has_authority(request, authority_required, authority_results):
@@ -1335,7 +1335,7 @@ def organization_delete_existing_position_process_form_view(request, organizatio
:param position_we_vote_id:
:return:
"""
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'admin', 'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -1380,7 +1380,7 @@ def organization_position_edit_view(request, organization_id=0, organization_we_
:param position_we_vote_id:
:return:
"""
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager', 'verified_volunteer'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -1467,7 +1467,7 @@ def organization_position_edit_process_view(request):
:param request:
:return:
"""
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager', 'verified_volunteer'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -1766,7 +1766,7 @@ def reserved_domain_edit_view(request):
:param request:
:return:
"""
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -1815,7 +1815,7 @@ def reserved_domain_edit_process_view(request):
:param request:
:return:
"""
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -1958,7 +1958,7 @@ def reserved_domain_edit_process_view(request):
@login_required
def reserved_domain_list_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
diff --git a/politician/views_admin.py b/politician/views_admin.py
index f210af0b4..39237b75d 100644
--- a/politician/views_admin.py
+++ b/politician/views_admin.py
@@ -40,7 +40,7 @@
@login_required
def politicians_import_from_master_server_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'admin'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -73,7 +73,7 @@ def politicians_import_from_master_server_view(request):
@login_required
def politician_list_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'partner_organization', 'verified_volunteer'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
diff --git a/polling_location/views_admin.py b/polling_location/views_admin.py
index 594f87237..bd7bd635f 100644
--- a/polling_location/views_admin.py
+++ b/polling_location/views_admin.py
@@ -132,7 +132,7 @@ def polling_locations_import_from_master_server_view(request):
:param request:
:return:
"""
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'admin'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -425,7 +425,7 @@ def polling_location_visualize_view(request, polling_location_local_id=0, pollin
@login_required
def polling_location_list_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'partner_organization', 'verified_volunteer'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -602,7 +602,7 @@ def polling_locations_add_latitude_and_longitude_view(request):
@login_required
def polling_location_statistics_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'partner_organization', 'verified_volunteer'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -654,7 +654,7 @@ def polling_location_statistics_view(request):
@login_required
def polling_location_summary_view(request, polling_location_local_id):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'partner_organization', 'verified_volunteer'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
diff --git a/position/views_admin.py b/position/views_admin.py
index 5e5832771..bbff89385 100644
--- a/position/views_admin.py
+++ b/position/views_admin.py
@@ -98,7 +98,7 @@ def positions_sync_out_view(request): # positionsSyncOut
@login_required
def positions_import_from_master_server_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'admin'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -234,7 +234,7 @@ def position_list_view(request):
:param request:
:return:
"""
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'partner_organization', 'verified_volunteer'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -610,7 +610,7 @@ def position_edit_process_view(request): # TODO DALE I don't think this is in u
@login_required
def position_summary_view(request, position_we_vote_id):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'partner_organization', 'verified_volunteer'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
diff --git a/templates/apis_v1/apis_index.html b/templates/apis_v1/apis_index.html
index d722b7fd0..80afdbc4a 100644
--- a/templates/apis_v1/apis_index.html
+++ b/templates/apis_v1/apis_index.html
@@ -910,6 +910,16 @@
reports.
+
+ analyticsActionSyncOut
+
+ Allow people with Analytics Admin authority to retrieve raw Analytics Action information
+ for data analysis purposes. The definitions of the ACTION constants are here:
+
+ ACTION constants on Github
+
+
+
{### ###}
diff --git a/templates/registration/login_we_vote.html b/templates/registration/login_we_vote.html
index d3d0692d5..90fc0dbf9 100644
--- a/templates/registration/login_we_vote.html
+++ b/templates/registration/login_we_vote.html
@@ -71,6 +71,7 @@ Welcome {{ request.user.first_name }} {{ request.user.last_name }}
twitter {{ request.user.twitter_screen_name }}
facebook {{ request.user.fb_username }}
admin {{ request.user.is_admin }}
+ analytics_admin {{ request.user.is_analytics_admin }}
partner_organization {{ request.user.is_partner_organization }}
political_data_manager {{ request.user.is_political_data_manager }}
political_data_viewer {{ request.user.is_political_data_viewer }}
diff --git a/templates/voter/voter_edit.html b/templates/voter/voter_edit.html
index 0ea6e5149..d0913a577 100644
--- a/templates/voter/voter_edit.html
+++ b/templates/voter/voter_edit.html
@@ -88,6 +88,14 @@ {% if voter %}Edit Voter: {{ voter.first_name|default_if_none:"" }} {{ voter
Grant Admin Rights
{% endif %}
+ {% if voter.is_analytics_admin %}
+
+ Remove Analytics Admin Rights
+ {% else %}
+
+ Grant Analytics Admin Rights
+ {% endif %}
+
{% if voter.is_partner_organization %}
Remove Partner Organization Rights
diff --git a/templates/voter/voter_list.html b/templates/voter/voter_list.html
index 79c3d423b..a728f71b6 100644
--- a/templates/voter/voter_list.html
+++ b/templates/voter/voter_list.html
@@ -31,6 +31,12 @@ Voters
{% if is_admin %}checked{% endif %} /> Is Admin
+
+
+ Is Analytics Admin
+
+
Voters
- {% if voter.is_opt_in_newsletter %}Y{% else %}{% endif %}
+ {% if voter.is_opt_in_newsletter %}Yes{% else %}{% endif %}
@@ -127,11 +133,12 @@ Voters
- {% if voter.is_admin %}Y{% else %}{% endif %}
+ {% if voter.is_admin %}Yes{% else %}{% endif %}
+ {% if voter.is_analytics_admin %}Analytics Yes{% else %}{% endif %}
- {% if voter.is_partner_organization %}Y{% else %}{% endif %}
+ {% if voter.is_partner_organization %}Yes{% else %}{% endif %}
@@ -139,7 +146,7 @@ Voters
- {% if voter.is_verified_volunteer %}Y{% else %}{% endif %}
+ {% if voter.is_verified_volunteer %}Yes{% else %}{% endif %}
@@ -162,6 +169,12 @@ Voters
this.form.submit();
});
});
+ $(function() {
+ $('#is_analytics_admin_id').change(function() {
+ {#this.form.show_candidates_with_best_twitter_options_id.value = '0';#}
+ this.form.submit();
+ });
+ });
$(function() {
$('#is_partner_organization_id').change(function() {
{#this.form.show_candidates_with_best_twitter_options_id.value = '0';#}
diff --git a/voter/controllers.py b/voter/controllers.py
index 0793c039a..c42b26eed 100644
--- a/voter/controllers.py
+++ b/voter/controllers.py
@@ -279,6 +279,7 @@ def merge_voter_accounts(from_voter, to_voter):
# last_name
# interface_status_flags
# is_admin
+ # is_analytics_admin
# is_partner_organization
# is_political_data_manager
# is_political_data_viewer
@@ -290,6 +291,7 @@ def merge_voter_accounts(from_voter, to_voter):
or positive_value_exists(from_voter.interface_status_flags) \
or positive_value_exists(from_voter.notification_settings_flags) \
or positive_value_exists(from_voter.is_admin) \
+ or positive_value_exists(from_voter.is_analytics_admin) \
or positive_value_exists(from_voter.is_partner_organization) \
or positive_value_exists(from_voter.is_political_data_manager) \
or positive_value_exists(from_voter.is_political_data_viewer) \
@@ -313,6 +315,9 @@ def merge_voter_accounts(from_voter, to_voter):
to_voter.notification_settings_flags | from_voter.notification_settings_flags
if positive_value_exists(from_voter.is_admin) and not positive_value_exists(to_voter.is_admin):
to_voter.is_admin = from_voter.is_admin
+ if positive_value_exists(from_voter.is_analytics_admin) \
+ and not positive_value_exists(to_voter.is_analytics_admin):
+ to_voter.is_analytics_admin = from_voter.is_analytics_admin
if positive_value_exists(from_voter.is_partner_organization) \
and not positive_value_exists(to_voter.is_partner_organization):
to_voter.is_partner_organization = from_voter.is_partner_organization
@@ -2299,6 +2304,7 @@ def voter_retrieve_for_api(voter_device_id, state_code_from_ip_address='',
'twitter_screen_name': voter.twitter_screen_name,
'is_signed_in': voter.is_signed_in(),
'is_admin': voter.is_admin,
+ 'is_analytics_admin': voter.is_analytics_admin,
'is_partner_organization': voter.is_partner_organization,
'is_political_data_manager': voter.is_political_data_manager,
'is_political_data_viewer': voter.is_political_data_viewer,
@@ -2340,6 +2346,7 @@ def voter_retrieve_for_api(voter_device_id, state_code_from_ip_address='',
'twitter_screen_name': '',
'is_signed_in': False,
'is_admin': False,
+ 'is_analytics_admin': False,
'is_partner_organization': False,
'is_political_data_manager': False,
'is_political_data_viewer': False,
diff --git a/voter/models.py b/voter/models.py
index 00ae92fcc..2909dce5d 100644
--- a/voter/models.py
+++ b/voter/models.py
@@ -919,6 +919,7 @@ def retrieve_voter_list_with_emails(self):
def retrieve_voter_list_by_permissions(
self,
is_admin=False,
+ is_analytics_admin=False,
is_partner_organization=False,
is_political_data_manager=False,
is_political_data_viewer=False,
@@ -933,6 +934,7 @@ def retrieve_voter_list_by_permissions(
status = ''
if not positive_value_exists(is_admin) \
+ and not positive_value_exists(is_analytics_admin) \
and not positive_value_exists(is_partner_organization) \
and not positive_value_exists(is_political_data_manager) \
and not positive_value_exists(is_political_data_viewer) \
@@ -951,6 +953,9 @@ def retrieve_voter_list_by_permissions(
if positive_value_exists(is_admin):
new_voter_filter = Q(is_admin=True)
voter_raw_filters.append(new_voter_filter)
+ if positive_value_exists(is_analytics_admin):
+ new_voter_filter = Q(is_analytics_admin=True)
+ voter_raw_filters.append(new_voter_filter)
if positive_value_exists(is_partner_organization):
new_voter_filter = Q(is_partner_organization=True)
voter_raw_filters.append(new_voter_filter)
@@ -1906,6 +1911,7 @@ class Voter(AbstractBaseUser):
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
+ is_analytics_admin = models.BooleanField(default=False)
is_partner_organization = models.BooleanField(default=False)
is_political_data_manager = models.BooleanField(default=False)
is_political_data_viewer = models.BooleanField(default=False)
@@ -2793,6 +2799,7 @@ def retrieve_voter_authority(request):
'voter_found': True,
'is_active': positive_value_exists(voter.is_active),
'is_admin': positive_value_exists(voter.is_admin),
+ 'is_analytics_admin': positive_value_exists(voter.is_analytics_admin),
'is_partner_organization': positive_value_exists(voter.is_partner_organization),
'is_political_data_manager': positive_value_exists(voter.is_political_data_manager),
'is_political_data_viewer': positive_value_exists(voter.is_political_data_viewer),
@@ -2804,6 +2811,7 @@ def retrieve_voter_authority(request):
'voter_found': False,
'is_active': False,
'is_admin': False,
+ 'is_analytics_admin': False,
'is_partner_organization': False,
'is_political_data_manager': False,
'is_political_data_viewer': False,
@@ -2820,6 +2828,10 @@ def voter_has_authority(request, authority_required, authority_results=None):
if 'admin' in authority_required:
if positive_value_exists(authority_results['is_admin']):
return True
+ if 'analytics_admin' in authority_required:
+ if positive_value_exists(authority_results['is_analytics_admin']) or \
+ positive_value_exists(authority_results['is_admin']):
+ return True
if 'partner_organization' in authority_required:
if positive_value_exists(authority_results['is_partner_organization']) or \
positive_value_exists(authority_results['is_political_data_manager']) or \
@@ -2831,12 +2843,14 @@ def voter_has_authority(request, authority_required, authority_results=None):
return True
if 'political_data_viewer' in authority_required:
if positive_value_exists(authority_results['is_political_data_viewer']) or \
+ positive_value_exists(authority_results['is_analytics_admin']) or \
positive_value_exists(authority_results['is_verified_volunteer']) or \
positive_value_exists(authority_results['is_political_data_manager']) or \
positive_value_exists(authority_results['is_admin']):
return True
if 'verified_volunteer' in authority_required:
if positive_value_exists(authority_results['is_verified_volunteer']) or \
+ positive_value_exists(authority_results['is_analytics_admin']) or \
positive_value_exists(authority_results['is_political_data_manager']) or \
positive_value_exists(authority_results['is_admin']):
return True
diff --git a/voter/views_admin.py b/voter/views_admin.py
index d1292247d..073cfab01 100644
--- a/voter/views_admin.py
+++ b/voter/views_admin.py
@@ -178,7 +178,7 @@ def voter_edit_process_view(request):
:param request:
:return:
"""
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -266,7 +266,7 @@ def voter_edit_process_view(request):
@login_required
def voter_edit_view(request, voter_id=0, voter_we_vote_id=""):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -707,7 +707,7 @@ def voter_change_authority_process_view(request):
:param request:
:return:
"""
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'admin'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -735,6 +735,9 @@ def voter_change_authority_process_view(request):
if authority_granted == 'admin':
voter_on_stage.is_admin = True
authority_changed = True
+ elif authority_granted == 'analytics_admin':
+ voter_on_stage.is_analytics_admin = True
+ authority_changed = True
elif authority_granted == 'partner_organization':
voter_on_stage.is_partner_organization = True
authority_changed = True
@@ -751,6 +754,9 @@ def voter_change_authority_process_view(request):
if authority_removed == 'admin':
voter_on_stage.is_admin = False
authority_changed = True
+ elif authority_removed == 'analytics_admin':
+ voter_on_stage.is_analytics_admin = False
+ authority_changed = True
elif authority_removed == 'partner_organization':
voter_on_stage.is_partner_organization = False
authority_changed = True
@@ -816,13 +822,14 @@ def voter_remove_facebook_auth_process_view(request, voter_id=0, voter_we_vote_i
@login_required
def voter_list_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
voter_search = request.GET.get('voter_search', '')
is_admin = request.GET.get('is_admin', '')
+ is_analytics_admin = request.GET.get('is_analytics_admin', '')
is_partner_organization = request.GET.get('is_partner_organization', '')
is_political_data_manager = request.GET.get('is_political_data_manager', '')
is_political_data_viewer = request.GET.get('is_political_data_viewer', '')
@@ -884,6 +891,8 @@ def voter_list_view(request):
if positive_value_exists(is_admin):
voter_query = voter_query.filter(is_admin=True)
+ if positive_value_exists(is_analytics_admin):
+ voter_query = voter_query.filter(is_analytics_admin=True)
if positive_value_exists(is_partner_organization):
voter_query = voter_query.filter(is_partner_organization=True)
if positive_value_exists(is_political_data_manager):
@@ -905,6 +914,7 @@ def voter_list_view(request):
template_values = {
'is_admin': is_admin,
+ 'is_analytics_admin': is_analytics_admin,
'is_partner_organization': is_partner_organization,
'is_political_data_manager': is_political_data_manager,
'is_political_data_viewer': is_political_data_viewer,
@@ -919,7 +929,7 @@ def voter_list_view(request):
@login_required
def voter_summary_view(request, voter_id):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
diff --git a/voter_guide/views_admin.py b/voter_guide/views_admin.py
index bd846afed..9c5faf81f 100644
--- a/voter_guide/views_admin.py
+++ b/voter_guide/views_admin.py
@@ -58,7 +58,7 @@
@login_required
def create_possible_voter_guides_from_prior_elections_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -1406,7 +1406,7 @@ def voter_guides_sync_out_view(request): # voterGuidesSyncOut
@login_required
def voter_guides_import_from_master_server_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'admin'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -1444,7 +1444,7 @@ def generate_voter_guide_possibility_batch_view(request):
:param request:
:return:
"""
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'verified_volunteer'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -1582,7 +1582,7 @@ def generate_voter_guides_view(request):
@login_required
def label_vote_smart_voter_guides_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -1628,7 +1628,7 @@ def label_vote_smart_voter_guides_view(request):
@login_required
def generate_voter_guides_for_one_election_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'verified_volunteer'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -1684,7 +1684,7 @@ def generate_voter_guides_for_one_election_view(request):
@login_required
def refresh_existing_voter_guides_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'verified_volunteer'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -1712,7 +1712,7 @@ def refresh_existing_voter_guides_view(request):
@login_required
def voter_guide_edit_view(request, voter_guide_id=0, voter_guide_we_vote_id=""):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'verified_volunteer'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -1773,7 +1773,7 @@ def voter_guide_edit_process_view(request): # NOTE: THIS FORM DOESN'T SAVE YET
:param request:
:return:
"""
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'verified_volunteer'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -1886,7 +1886,7 @@ def voter_guide_edit_process_view(request): # NOTE: THIS FORM DOESN'T SAVE YET
@login_required
def voter_guide_list_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'partner_organization', 'verified_volunteer'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -2040,7 +2040,7 @@ def voter_guide_list_view(request):
@login_required
def voter_guide_possibility_list_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'verified_volunteer'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -2316,7 +2316,7 @@ def voter_guide_possibility_list_view(request):
@login_required
def voter_guide_possibility_list_process_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'political_data_manager'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -2464,7 +2464,7 @@ def voter_guide_possibility_list_process_view(request):
@login_required
def voter_guide_possibility_list_migration_view(request):
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'admin'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -2518,7 +2518,7 @@ def voter_guide_search_view(request):
:param request:
:return:
"""
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'verified_volunteer'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)
@@ -2568,7 +2568,7 @@ def voter_guide_search_process_view(request):
:param request:
:return:
"""
- # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
+ # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer
authority_required = {'verified_volunteer'}
if not voter_has_authority(request, authority_required):
return redirect_to_sign_in_page(request, authority_required)