def get_post_data(api, json_election_id, json_election_id_to_name):
    from candidates.cache import get_post_cached
    from candidates.election_specific import AREA_DATA, AREA_POST_DATA
    json_election_name = json_election_id_to_name[json_election_id]
    ynr_election_id = {
        'Pre-candidatos a Presidente':
        'presidentes-argentina-paso-2015',
        'Pre-candidatos a Gobernador de Buenos Aires':
        'gobernadores-argentina-paso-2015',
        'Pre-candidatos a Gobernador de Tucumán':
        'gobernadores-argentina-paso-2015',
        'Pre-candidatos a Gobernador de Entre Ríos':
        'gobernadores-argentina-paso-2015',
        'Pre-Candidatos a Gobernador de San Juan':
        'gobernadores-argentina-paso-2015',
    }[json_election_name]
    ynr_election_data = Election.objects.get_by_slug(ynr_election_id)
    province = None
    m = re.search(r'a Gobernador de (?P<province>.*)', json_election_name)
    if m:
        province = m.group('province')
        areas_by_name = AREA_DATA.areas_by_name[('PRV', '1')]
        area = areas_by_name[strip_accents(province).upper()]
        post_id = AREA_POST_DATA.get_post_id(
            ynr_election_id, area['type'], area['id']
        )
    else:
        # It must be the presidential election:
        post_id = 'presidente'
    post_data = get_post_cached(api, post_id)['result']
    return ynr_election_data, post_data
예제 #2
0
def get_post_data(api, json_election_id, json_election_id_to_name):
    from candidates.cache import get_post_cached
    from candidates.election_specific import AREA_DATA, AREA_POST_DATA
    json_election_name = json_election_id_to_name[json_election_id]
    ynr_election_id = {
        'Pre-candidatos a Presidente':
        'presidentes-argentina-paso-2015',
        'Pre-candidatos a Gobernador de Buenos Aires':
        'gobernadores-argentina-paso-2015',
        'Pre-candidatos a Gobernador de Tucumán':
        'gobernadores-argentina-paso-2015',
        'Pre-candidatos a Gobernador de Entre Ríos':
        'gobernadores-argentina-paso-2015',
        'Pre-Candidatos a Gobernador de San Juan':
        'gobernadores-argentina-paso-2015',
    }[json_election_name]
    ynr_election_data = Election.objects.get_by_slug(ynr_election_id)
    province = None
    m = re.search(r'a Gobernador de (?P<province>.*)', json_election_name)
    if m:
        province = m.group('province')
        areas_by_name = AREA_DATA.areas_by_name[('PRV', '1')]
        area = areas_by_name[strip_accents(province).upper()]
        post_id = AREA_POST_DATA.get_post_id(ynr_election_id, area['type'],
                                             area['id'])
    else:
        # It must be the presidential election:
        post_id = 'presidente'
    post_data = get_post_cached(api, post_id)['result']
    return ynr_election_data, post_data
def get_post_data(api, json_election_id, json_election_id_to_name):
    json_election_name = json_election_id_to_name[json_election_id]
    ynr_election_id = {
        u'Pre-candidatos a Presidente':
        'presidentes-argentina-paso-2015',
        u'Pre-candidatos a Gobernador de Buenos Aires':
        'gobernadores-argentina-paso-2015',
        u'Pre-candidatos a Gobernador de Tucumán':
        'gobernadores-argentina-paso-2015',
        u'Pre-candidatos a Gobernador de Entre Ríos':
        'gobernadores-argentina-paso-2015',
        u'Pre-Candidatos a Gobernador de San Juan':
        'gobernadores-argentina-paso-2015',
    }[json_election_name]
    ynr_election_data = settings.ELECTIONS[ynr_election_id]
    ynr_election_data['id'] = ynr_election_id
    province = None
    m = re.search(r'a Gobernador de (?P<province>.*)', json_election_name)
    if m:
        province = m.group('province')
        mapit_areas_by_name = MAPIT_DATA.areas_by_name[('PRV', 1)]
        mapit_area = mapit_areas_by_name[strip_accents(province).upper()]
        post_id = AREA_POST_DATA.get_post_id(
            ynr_election_id, mapit_area['type'], mapit_area['id']
        )
    else:
        # It must be the presidential election:
        post_id = 'presidente'
    post_data = get_post_cached(api, post_id)['result']
    return ynr_election_data, post_data
예제 #4
0
def get_post_data(api, json_election_id, json_election_id_to_name):
    json_election_name = json_election_id_to_name[json_election_id]
    ynr_election_id = {
        u'Pre-candidatos a Presidente':
        'presidentes-argentina-paso-2015',
        u'Pre-candidatos a Gobernador de Buenos Aires':
        'gobernadores-argentina-paso-2015',
        u'Pre-candidatos a Gobernador de Tucumán':
        'gobernadores-argentina-paso-2015',
        u'Pre-candidatos a Gobernador de Entre Ríos':
        'gobernadores-argentina-paso-2015',
        u'Pre-Candidatos a Gobernador de San Juan':
        'gobernadores-argentina-paso-2015',
    }[json_election_name]
    ynr_election_data = settings.ELECTIONS[ynr_election_id]
    ynr_election_data['id'] = ynr_election_id
    province = None
    m = re.search(r'a Gobernador de (?P<province>.*)', json_election_name)
    if m:
        province = m.group('province')
        mapit_areas_by_name = MAPIT_DATA.areas_by_name[('PRV', 1)]
        mapit_area = mapit_areas_by_name[strip_accents(province).upper()]
        post_id = AREA_POST_DATA.get_post_id(ynr_election_id,
                                             mapit_area['type'],
                                             mapit_area['id'])
    else:
        # It must be the presidential election:
        post_id = 'presidente'
    post_data = get_post_cached(api, post_id)['result']
    return ynr_election_data, post_data
def get_post_data(api, election_id, province):
    ynr_election_data = Election.objects.get_by_slug(election_id)
    area_key = (ynr_election_data.area_types.first().name,
                 ynr_election_data.area_generation)
    areas_by_name = AREA_DATA.areas_by_name[area_key]
    if province != 'Burkina Faso':
        province = strip_accents(province).upper()
    area = areas_by_name[province]
    post_id = AREA_POST_DATA.get_post_id(
        election_id, area['type'], area['id']
    )
    post_data = get_post_cached(api, post_id)['result']
    return ynr_election_data, post_data
예제 #6
0
def get_post_data(api, election_id, province):
    from candidates.cache import get_post_cached
    from candidates.election_specific import AREA_DATA, AREA_POST_DATA
    ynr_election_data = Election.objects.get_by_slug(election_id)
    area_key = (ynr_election_data.area_types.first().name,
                ynr_election_data.area_generation)
    areas_by_name = AREA_DATA.areas_by_name[area_key]
    if province != 'Burkina Faso':
        province = strip_accents(province).upper()
    area = areas_by_name[province]
    post_id = AREA_POST_DATA.get_post_id(election_id, area['type'], area['id'])
    post_data = get_post_cached(api, post_id)['result']
    return ynr_election_data, post_data
def get_electionleaflets_url(mapit_area_id, constituency_name):
    """Generate an electionleaflets.org URL from a constituency name

    >>> get_electionleaflets_url(u"66115", u"Ynys M\u00F4n")
    u'http://electionleaflets.org/constituencies/66115/ynys_mon/'
    >>> get_electionleaflets_url(u"66056", u"Ashton-under-Lyne")
    u'http://electionleaflets.org/constituencies/66056/ashton_under_lyne/'
    >>> get_electionleaflets_url(u"14403", u"Ayr, Carrick and Cumnock")
    u'http://electionleaflets.org/constituencies/14403/ayr_carrick_and_cumnock/'
    """
    result = strip_accents(constituency_name)
    result = result.lower()
    result = re.sub(r'[^a-z]+', ' ', result)
    result = re.sub(r'\s+', ' ', result).strip()
    slug = result.replace(' ', '_')
    url_format = u'http://electionleaflets.org/constituencies/{area_id}/{slug}/'
    return url_format.format(area_id=mapit_area_id, slug=slug)
예제 #8
0
def get_electionleaflets_url(mapit_area_id, constituency_name):
    """Generate an electionleaflets.org URL from a constituency name

    >>> (get_electionleaflets_url("66115", "Ynys M\u00F4n") ==
    ...  'http://electionleaflets.org/constituencies/66115/ynys_mon/')
    True
    >>> (get_electionleaflets_url("66056", "Ashton-under-Lyne") ==
    ...  'http://electionleaflets.org/constituencies/66056/ashton_under_lyne/')
    True
    >>> (get_electionleaflets_url("14403", "Ayr, Carrick and Cumnock") ==
    ...  'http://electionleaflets.org/constituencies/14403/ayr_carrick_and_cumnock/')
    True
    """
    result = strip_accents(constituency_name)
    result = result.lower()
    result = re.sub(r"[^a-z]+", " ", result)
    result = re.sub(r"\s+", " ", result).strip()
    slug = result.replace(" ", "_")
    url_format = "http://electionleaflets.org/constituencies/{area_id}/{slug}/"
    return url_format.format(area_id=mapit_area_id, slug=slug)
    def handle(self, username=None, **options):

        election_data = {
            'prv-2015': 'listedescandidatsauxelectionslegislativeslisteprovincialeanptic.csv',
            'nat-2015': 'listedescandidatsauxelectionslegislativesanptic.csv'
            }

        field_map = {
            'prv-2015': {
                'region': 1,
                'party': 4,
                'list_order': 5,
                'first_name': 7,
                'last_name': 6,
                'gender': 8,
                'birth_date': 9,
                'party_short': 3
            },
            'nat-2015': {
                'region': 0,
                'party': 2,
                'list_order': 3,
                'first_name': 5,
                'last_name': 4,
                'gender': 6,
                'birth_date': 7,
                'party_short': 2
            }
        }

        api = create_popit_api_object()

        party_id_missing = {}
        party_name_to_id = {}
        for party_id, party_name in PARTY_DATA.party_id_to_name.items():
            party_name_to_id[party_name] = party_id

        for election_id, filename in election_data.items():
            csv_filename = join(
                dirname(__file__), '..', '..', 'data', filename
            )

            fields = field_map[election_id]

            with codecs.open(csv_filename, 'r', encoding='windows-1252') as f:

                initial = True
                for candidate in unicode_csv_reader(f):
                    # skip header line
                    if initial:
                        initial = False
                        continue

                    region = candidate[fields['region']]
                    party = candidate[fields['party']]
                    party_list_order = candidate[fields['list_order']]
                    first_name = string.capwords(candidate[fields['first_name']])
                    last_name = string.capwords(candidate[fields['last_name']])
                    gender = candidate[fields['gender']]
                    birth_date = None

                    if candidate[fields['birth_date']] is not None:
                        birth_date = str(dateutil.parser.parse(
                            candidate[fields['birth_date']], dayfirst=True
                        ).date())

                    name = first_name + ' ' + last_name

                    id = '-'.join([
                        re.sub('[^\w]*', '', re.sub(r' ', '-', strip_accents(name.lower()))),
                        re.sub('[^\w]*', '', candidate[fields['party_short']].lower()),
                        birth_date
                    ])

                    # national candidate
                    if region == 'PAYS':
                        region = 'Burkina Faso'
                    election_data, post_data = get_post_data(
                        api, election_id, region
                    )

                    # debug
                    # tmp = '%s %s %s (%s) - %s (%s)' % ( id, first_name, last_name, party, region, post_data['label'] )
                    # print tmp

                    person = get_existing_popit_person(id)
                    if person:
                        # print "Found an existing person:", person.get_absolute_url()
                        pass
                    else:
                        print "No existing person, creating a new one:", name
                        person = PopItPerson()

                    person.set_identifier('import-id', id)
                    person.family_name = last_name
                    person.given_name = first_name
                    person.name = name
                    person.gender = gender
                    if birth_date:
                        person.birth_date = str(birth_date)
                    else:
                        person.birth_date = None

                    standing_in_election = {
                        'post_id': post_data['id'],
                        'name': AREA_POST_DATA.shorten_post_label(
                            election_data.slug,
                            post_data['label'],
                        ),
                        'party_list_position': party_list_order,
                    }

                    if 'area' in post_data:
                        standing_in_election['mapit_url'] = post_data['area']['identifier']

                    person.standing_in = {
                        election_data.slug: standing_in_election
                    }

                    change_metadata = get_change_metadata(
                        None,
                        'Imported candidate from CSV',
                    )

                    party_comp = re.sub(' +', ' ', party)
                    party_id = UNKNOWN_PARTY_ID
                    if party_comp in party_name_to_id.keys():
                        party_id = party_name_to_id[party_comp]
                        party = party_comp
                    else:
                        party_id = party_name_to_id['Unknown Party']
                        party = 'Unknown Party'

                    if party_id == UNKNOWN_PARTY_ID and party_comp not in party_id_missing.keys():
                        party_id_missing[party_comp] = 1

                    person.party_memberships = {
                        election_data.slug: {
                            'id': party_id,
                            'name': party,
                            'imported_name': party_comp
                        }
                    }

                    person.record_version(change_metadata)
                    try:
                        person.save_to_popit(api)
                    except HttpClientError as hce:
                        print "Got an HttpClientError:", hce.content
                        raise

        if len(party_id_missing) > 0:
            print "Unmatched party names:"
            for name in party_id_missing.keys():
                print name
예제 #10
0
    def handle(self, username=None, **options):
        from slumber.exceptions import HttpClientError
        from candidates.election_specific import PARTY_DATA, shorten_post_label
        from candidates.models import PopItPerson
        from candidates.popit import create_popit_api_object

        election_data = {
            'prv-2015':
            'listedescandidatsauxelectionslegislativeslisteprovincialeanptic.csv',
            'nat-2015': 'listedescandidatsauxelectionslegislativesanptic.csv'
        }

        field_map = {
            'prv-2015': {
                'region': 1,
                'party': 4,
                'list_order': 5,
                'first_name': 7,
                'last_name': 6,
                'gender': 8,
                'birth_date': 9,
                'party_short': 3
            },
            'nat-2015': {
                'region': 0,
                'party': 2,
                'list_order': 3,
                'first_name': 5,
                'last_name': 4,
                'gender': 6,
                'birth_date': 7,
                'party_short': 2
            }
        }

        api = create_popit_api_object()

        party_id_missing = {}
        party_name_to_id = {}
        for party_id, party_name in PARTY_DATA.party_id_to_name.items():
            party_name_to_id[party_name] = party_id

        for election_id, filename in election_data.items():
            csv_filename = join(dirname(__file__), '..', '..', 'data',
                                filename)

            fields = field_map[election_id]

            with codecs.open(csv_filename, 'r', encoding='windows-1252') as f:

                initial = True
                for candidate in unicode_csv_reader(f):
                    # skip header line
                    if initial:
                        initial = False
                        continue

                    region = candidate[fields['region']]
                    party = candidate[fields['party']]
                    party_list_order = candidate[fields['list_order']]
                    first_name = string.capwords(
                        candidate[fields['first_name']])
                    last_name = string.capwords(candidate[fields['last_name']])
                    gender = candidate[fields['gender']]
                    birth_date = None

                    if candidate[fields['birth_date']] is not None:
                        birth_date = str(
                            dateutil.parser.parse(
                                candidate[fields['birth_date']],
                                dayfirst=True).date())

                    name = first_name + ' ' + last_name

                    id = '-'.join([
                        re.sub('[^\w]*', '',
                               re.sub(r' ', '-', strip_accents(name.lower()))),
                        re.sub('[^\w]*', '',
                               candidate[fields['party_short']].lower()),
                        birth_date
                    ])

                    # national candidate
                    if region == 'PAYS':
                        region = 'Burkina Faso'
                    election_data, post_data = get_post_data(
                        api, election_id, region)

                    # debug
                    # tmp = '%s %s %s (%s) - %s (%s)' % ( id, first_name, last_name, party, region, post_data['label'] )
                    # print(tmp)

                    person = get_existing_popit_person(id)
                    if person:
                        # print("Found an existing person:", person.get_absolute_url())
                        pass
                    else:
                        print("No existing person, creating a new one:", name)
                        person = PopItPerson()

                    person.set_identifier('import-id', id)
                    person.family_name = last_name
                    person.given_name = first_name
                    person.name = name
                    person.gender = gender
                    if birth_date:
                        person.birth_date = str(birth_date)
                    else:
                        person.birth_date = None

                    standing_in_election = {
                        'post_id': post_data['id'],
                        'name': shorten_post_label(post_data['label']),
                        'party_list_position': party_list_order,
                    }

                    if 'area' in post_data:
                        standing_in_election['mapit_url'] = post_data['area'][
                            'identifier']

                    person.standing_in = {
                        election_data.slug: standing_in_election
                    }

                    change_metadata = get_change_metadata(
                        None,
                        'Imported candidate from CSV',
                    )

                    party_comp = re.sub(' +', ' ', party)
                    party_id = UNKNOWN_PARTY_ID
                    if party_comp in party_name_to_id.keys():
                        party_id = party_name_to_id[party_comp]
                        party = party_comp
                    else:
                        party_id = party_name_to_id['Unknown Party']
                        party = 'Unknown Party'

                    if party_id == UNKNOWN_PARTY_ID and party_comp not in party_id_missing.keys(
                    ):
                        party_id_missing[party_comp] = 1

                    person.party_memberships = {
                        election_data.slug: {
                            'id': party_id,
                            'name': party,
                            'imported_name': party_comp
                        }
                    }

                    person.record_version(change_metadata)
                    try:
                        person.save_to_popit(api)
                    except HttpClientError as hce:
                        print("Got an HttpClientError:", hce.content)
                        raise

        if len(party_id_missing) > 0:
            print("Unmatched party names:")
            for name in party_id_missing.keys():
                print(name)