Esempio n. 1
0
 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)
Esempio n. 2
0
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),
        })
Esempio n. 3
0
def elections_lookup(request):
    cycles = utils.get_cycles(utils.current_cycle())

    return render(request, 'election-lookup.jinja', {
        'parent': 'data',
        'cycles': cycles
    })
Esempio n. 4
0
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}
Esempio n. 5
0
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),
        })
Esempio n. 6
0
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",
        },
    )
Esempio n. 7
0
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
    }
Esempio n. 8
0
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",
        },
    )
Esempio n. 9
0
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'])
        })
Esempio n. 10
0
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",
        },
    )
Esempio n. 11
0
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",
        },
    )