def test_get_cycles(self, current_cycle): # Mock out the current_cycle so it doesn't change in the future current_cycle.return_value = 2016 # Check that it returns the correct default when no arg supplied assert utils.get_cycles() == range(2016, 1979, -2) # Check that it returns the correct range when an arg is supplied assert utils.get_cycles(2020) == range(2020, 1979, -2)
def elections(request, office, cycle, state=None, district=None): cycle = int(cycle) # Get all cycles up until the cycle from the URL if it's beyond the current cycle # this fixes the issue of an election page not showing user-provided cycle # in the cycle select max_cycle = cycle if cycle > utils.current_cycle( ) else utils.current_cycle() cycles = utils.get_cycles(max_cycle) if office.lower() == 'president': cycles = [each for each in cycles if each % 4 == 0] elif office.lower() == 'senate': cycles = api_caller.get_all_senate_cycles(state) if office.lower() not in ['president', 'senate', 'house']: raise Http404() if state and state.upper() not in constants.states: raise Http404() return render( request, 'elections.jinja', { 'office': office, 'office_code': office[0], 'parent': 'data', 'cycle': cycle, 'cycles': cycles, 'state': state, 'state_full': constants.states[state.upper()] if state else None, 'district': district, 'title': utils.election_title(cycle, office, state, district), })
def elections_lookup(request): cycles = utils.get_cycles(utils.current_cycle()) return render(request, 'election-lookup.jinja', { 'parent': 'data', 'cycles': cycles })
def elections_lookup(request): cycle = constants.DEFAULT_ELECTION_YEAR cycles = utils.get_cycles(cycle + 4) FEATURES = settings.FEATURES states = constants.states return {'parent': 'data', 'cycles': cycles, 'cycle': cycle, 'states':states, 'FEATURES': FEATURES}
def elections(request, office, cycle, state=None, district=None): cycle = int(cycle) # Get all cycles up until the cycle from the URL if it's beyond the current cycle # this fixes the issue of an election page not showing user-provided cycle # in the cycle select max_cycle = cycle if cycle > utils.current_cycle( ) else utils.current_cycle() cycles = utils.get_cycles(max_cycle) if office.lower() == 'president': cycles = [each for each in cycles if each % 4 == 0] elif office.lower() == 'senate': cycles = api_caller.get_all_senate_cycles(state) if office.lower() not in ['president', 'senate', 'house']: raise Http404() if (state is not None) and (state and state.upper() not in constants.states): raise Http404() #map/redirect legacy tab names to correct anchor tab = request.GET.get('tab', '').replace('/', '') legacy_tabs = { 'contributions': '#individual-contributions', 'totals': '#candidate-financial-totals', 'spending-by-others': '#independent-expenditures' } if tab in legacy_tabs.keys(): if office == 'senate' or office == 'house': return redirect( reverse('elections-state-district', args=(office, state, district, cycle)) + legacy_tabs[tab]) if office == 'president': return redirect( reverse('elections-president', args=(office, cycle)) + legacy_tabs[tab]) return render( request, 'elections.jinja', { 'office': office, 'office_code': office[0], 'parent': 'data', 'cycle': cycle, 'cycles': cycles, 'state': state, 'state_full': constants.states[state.upper()] if state else None, 'district': district, 'title': utils.election_title(cycle, office, state, district), })
def elections_lookup(request): cycle = constants.DEFAULT_ELECTION_YEAR cycles = utils.get_cycles(cycle + 4) return render( request, "election-lookup.jinja", { "parent": "data", "cycles": cycles, "cycle": cycle, "social_image_identifier": "data", }, )
def raising_spending(request): office = request.GET.get('office', 'P') election_year = int(request.GET.get('election_year', constants.DEFAULT_ELECTION_YEAR)) max_election_year = utils.current_cycle() + 4 election_years = utils.get_cycles(max_election_year) FEATURES = settings.FEATURES return { 'name_field': 'name', 'id_field:': 'candidate_id', 'candidate': 'candidate_id', 'action': 'raised', 'title': 'Raising: by the numbers', 'election_years': election_years, 'election_year': election_year, 'office': office, 'FEATURES': FEATURES }
def spending(request): office = request.GET.get("office", "P") election_year = int( request.GET.get("election_year", constants.DEFAULT_ELECTION_YEAR)) max_election_year = utils.current_cycle() + 4 election_years = utils.get_cycles(max_election_year) return render( request, "spending-bythenumbers.jinja", { "parent": "data", "title": "Spending: by the numbers", "election_years": election_years, "election_year": election_year, "office": office, "social_image_identifier": "data", }, )
def raising(request): top_category = request.GET.get('top_category', 'P') cycles = utils.get_cycles(utils.current_cycle()) cycle = request.GET.get('cycle', constants.DEFAULT_TIME_PERIOD) if top_category in ['pac']: top_raisers = api_caller.load_top_pacs('-receipts', cycle=cycle, per_page=10) elif top_category in ['party']: top_raisers = api_caller.load_top_parties('-receipts', cycle=cycle, per_page=10) else: top_raisers = api_caller.load_top_candidates('-receipts', office=top_category, cycle=cycle, per_page=10) if cycle == datetime.datetime.today().year: coverage_end_date = datetime.datetime.today() else: coverage_end_date = datetime.date(cycle, 12, 31) page_info = top_raisers['pagination'] return render( request, 'raising-breakdown.jinja', { 'parent': 'data', 'title': 'Raising breakdown', 'top_category': top_category, 'coverage_start_date': datetime.date(cycle - 1, 1, 1), 'coverage_end_date': coverage_end_date, 'cycles': cycles, 'cycle': cycle, 'top_raisers': top_raisers['results'], 'page_info': utils.page_info(top_raisers['pagination']) })
def aggregate_totals(request): office = request.GET.get("office", "P") election_year = int( request.GET.get("election_year", constants.DEFAULT_ELECTION_YEAR)) max_election_year = utils.current_cycle() + 4 election_years = utils.get_cycles(max_election_year) FEATURES = settings.FEATURES return render( request, "widgets/aggregate-totals.jinja", { "title": "Aggregate Totals", "election_years": election_years, "election_year": election_year, "office": office, "FEATURES": FEATURES, "social_image_identifier": "data", }, )
def elections(request, office, cycle, state=None, district=None): cycle = int(cycle) max_cycle = utils.current_cycle() + 4 cycles = utils.get_cycles(max_cycle) if office.lower() == "president": cycles = [each for each in cycles if each % 4 == 0] elif office.lower() == "senate": cycles = api_caller.get_all_senate_cycles(state) if office.lower() not in ["president", "senate", "house"]: raise Http404() if (state is not None) and (state and state.upper() not in constants.states): raise Http404() election_duration = election_durations.get(office[0].upper(), 2) # Puerto Rico house/resident commissioners have 4-year cycles if state and state.upper() == "PR": election_duration = 4 # map/redirect legacy tab names to correct anchor tab = request.GET.get("tab", "").replace("/", "") legacy_tabs = { "contributions": "#individual-contributions", "totals": "#candidate-financial-totals", "spending-by-others": "#independent-expenditures", } if tab in legacy_tabs: if office == "house": return redirect( reverse("elections-house", args=(office, state, district, cycle)) + legacy_tabs[tab]) elif office == "senate": return redirect( reverse("elections-senate", args=(office, state, cycle)) + legacy_tabs[tab]) elif office == "president": return redirect( reverse("elections-president", args=(office, cycle)) + legacy_tabs[tab]) return render( request, "elections.jinja", { "office": office, "office_code": office[0], "parent": "data", "cycle": cycle, "election_duration": election_duration, "cycles": cycles, "state": state, "state_full": constants.states[state.upper()] if state else None, "district": district, "title": utils.election_title(cycle, office, state, district), "social_image_identifier": "data", }, )