class TestCountryMethods(TestCase):
    def setUp(self):
        with patch('everypolitician.lib.requests.get',
                   side_effect=fake_requests_get):
            self.ep = EveryPolitician()
            self.country_aland = self.ep.country('Aland')
            self.country_argentina = self.ep.country('Argentina')
            self.country_bv = self.ep.country('British-Virgin-Islands')

    def test_country_repr(self):
        if six.PY2:
            assert repr(self.country_aland) == b'<Country: \xc3\x85land>'
        else:
            assert repr(self.country_aland) == '<Country: \xc5land>'

    def test_get_legislatures(self):
        ls = self.country_aland.legislatures()
        assert len(ls) == 1

    def test_most_recent_house_no_house_matches(self):
        with pytest.raises(NotFound):
            print(self.country_argentina.house_most_recent('random_house'))

    def test_most_recent_house_where_multiple_match_lower_house(self):
        assert self.country_bv.house_most_recent(
            'lower_house').name == 'House of Assembly'

    def test_lower_house_shortcut(self):
        assert self.country_argentina.lower_house(
        ).name == 'Cámara de Diputados'

    def test_upper_house_shortcut(self):
        assert self.country_argentina.upper_house(
        ).name == 'Cámara de Senadores'
 def test_no_matches_for_unknown_house_type(self):
     with patch('everypolitician.lib.requests.get',
                side_effect=fake_requests_get):
         ep = EveryPolitician()
         country = ep.country('Argentina')
         houses = country.houses('quiet area')
         assert len(houses) == 0
示例#3
0
def getlegislators():
    housecounts = defaultdict(lambda: 0)
    senatecounts = defaultdict(lambda: 0)
    nonvoting = [
        'American Samoa', 'District of Columbia', 'Guam',
        'Northern Mariana Islands', 'Puerto Rico', 'US Virgin Islands'
    ]
    ep = EveryPolitician()
    epusa = ep.country('United-States-of-America')
    epussenate = epusa.legislature('Senate')
    epushouse = epusa.legislature('House')
    housedata = epushouse.latest_legislative_period().csv()
    senatedata = epussenate.latest_legislative_period().csv()
    housedata[:] = [
        entry for entry in housedata
        if entry.get('end_date') == '' and entry.get('area') not in nonvoting
    ]
    senatedata[:] = [
        entry for entry in senatedata if entry.get('end_date') == ''
    ]
    for entry in housedata:
        housecounts[entry['group']] = housecounts[entry['group']] + 1
    for entry in senatedata:
        senatecounts[entry['group']] = senatecounts[entry['group']] + 1
    housecounts = dict(housecounts)
    senatecounts = dict(senatecounts)
    return housedata, senatedata, housecounts, senatecounts
class TestLeglislatureMethods(TestCase):
    def setUp(self):
        with patch('everypolitician.lib.requests.get',
                   side_effect=fake_requests_get):
            self.ep = EveryPolitician()
            self.country = self.ep.country('Argentina')
        self.legislatures = self.country.legislatures()

    def test_legislature_repr(self):
        if six.PY2:
            assert repr(
                self.legislatures[0]
            ) == b'<Legislature: C\xc3\xa1mara de Diputados in Argentina>'
        else:
            assert repr(self.legislatures[1]
                        ) == '<Legislature: Cámara de Senadores in Argentina>'

    def test_legislature_str(self):
        assert text_type(self.legislatures[1]
                         ) == '<Legislature: Cámara de Senadores in Argentina>'

    def test_legislature_popolo_url(self):
        l = self.legislatures[1]
        assert l.popolo_url == 'https://cdn.rawgit.com/everypolitician/' \
            'everypolitician-data/c323b935f2dce83fcdfcbb5c2f94614a25207d98/' \
            'data/Argentina/Senado/ep-popolo-v1.0.json'

    def test_directory(self):
        l = self.legislatures[0]
        assert l.directory() == 'Argentina/Diputados'

    @patch('everypolitician.lib.Popolo')
    def test_popolo_call(self, mocked_popolo_class):
        mocked_popolo_class.from_url.return_value = Popolo(
            {'persons': [{
                'name': 'Joe Bloggs'
            }]})
        l = self.legislatures[0]
        popolo = l.popolo()
        mocked_popolo_class.from_url.assert_called_with(
            u'https://cdn.rawgit.com/everypolitician/everypolitician-data/'
            u'd3afadff7d5a08e1745b7e48782a869ec4979e78/data/Argentina/'
            u'Diputados/ep-popolo-v1.0.json')
        assert len(popolo.persons) == 1
        assert popolo.persons.first.name == 'Joe Bloggs'

    @patch('everypolitician.lib.Popolo')
    def test_popolo_data_only_fetched_once(self, mocked_popolo_class):
        mocked_popolo_class.from_url.return_value = Popolo(
            {'persons': [{
                'name': 'Joe Bloggs'
            }]})
        l = self.legislatures[0]
        l.popolo()
        l.popolo()
        mocked_popolo_class.from_url.assert_called_once_with(
            u'https://cdn.rawgit.com/everypolitician/everypolitician-data/'
            u'd3afadff7d5a08e1745b7e48782a869ec4979e78/data/Argentina/'
            u'Diputados/ep-popolo-v1.0.json')
 def test_finds_upper_house_if_present(self):
     with patch('everypolitician.lib.requests.get',
                side_effect=fake_requests_get):
         ep = EveryPolitician()
         country = ep.country('Argentina')
         houses = country.houses('upper house')
         assert len(houses) == 1
         assert houses[0].name == 'Cámara de Senadores'
 def test_finds_unicameral_legislature_for_lower_house(self):
     with patch('everypolitician.lib.requests.get',
                side_effect=fake_requests_get):
         ep = EveryPolitician()
         country = ep.country('Aland')
         houses = country.houses('lower house')
         assert len(houses) == 1
         assert houses[0].name == 'Lagting'
示例#7
0
def build_rep_lookup():
    result = defaultdict(set)
    ep = EveryPolitician()
    nigeria = ep.country('Nigeria')
    for lname in ('Senate', 'Representatives'):
        popolo = nigeria.legislature(lname).popolo()
        term = popolo.latest_term
        for membership in term.memberships:
            result[membership.area_id] = membership
    return result
class TestLegislativePeriod(TestCase):
    def setUp(self):
        with patch('everypolitician.lib.requests.get',
                   side_effect=fake_requests_get):
            self.ep = EveryPolitician()
            self.country = self.ep.country('Argentina')
            self.legislature = self.country.legislature('Diputados')
            self.period = self.legislature.legislative_periods()[0]

    def test_start_date(self, patched_requests_get):
        assert self.period.start_date == "2015"

    def test_end_date(self, patched_requests_get):
        assert self.period.end_date is None

    def test_csv(self, patched_requests_get):
        assert self.period.csv() == \
            [{u'area': u'BUENOS AIRES',
              u'area_id': u'area/buenos_aires',
              u'chamber': u'C\xe1mara de Diputados',
              u'email': u'*****@*****.**',
              u'end_date': u'2015-12-09',
              u'facebook': u'',
              u'gender': u'female',
              u'group': u'FRENTE PARA LA VICTORIA - PJ',
              u'group_id': u'frente_para_la_victoria_-_pj',
              u'id': u'b882751f-4014-4f6f-b3cf-e0a5d6d3c605',
              u'image': u'http://www4.hcdn.gob.ar/fotos/asegarra.jpg',
              u'name': u'ADELA ROSA SEGARRA',
              u'sort_name': u'SEGARRA, ADELA ROSA',
              u'start_date': u'',
              u'term': u'133',
              u'twitter': u''},
             {u'area': u'BUENOS AIRES',
              u'area_id': u'area/buenos_aires',
              u'chamber': u'C\xe1mara de Diputados',
              u'email': u'*****@*****.**',
              u'end_date': u'',
              u'facebook': u'',
              u'gender': u'male',
              u'group': u'FRENTE RENOVADOR',
              u'group_id': u'frente_renovador',
              u'id': u'8efb1e0e-8454-4c6b-9f87-0d4fef875fd2',
              u'image': u'http://www4.hcdn.gob.ar/fotos/aperez.jpg',
              u'name': u'ADRIAN PEREZ',
              u'sort_name': u'PEREZ, ADRIAN',
              u'start_date': u'',
              u'term': u'133',
              u'twitter': u'adrianperezARG'}]
示例#9
0
class TestCountryMethods(TestCase):
    def setUp(self):
        with patch('everypolitician.lib.requests.get',
                   side_effect=fake_requests_get):
            self.ep = EveryPolitician()
            self.country = self.ep.country('Aland')

    def test_country_repr(self):
        if six.PY2:
            assert repr(self.country) == b'<Country: \xc3\x85land>'
        else:
            assert repr(self.country) == '<Country: \xc5land>'

    def test_get_legislatures(self):
        ls = self.country.legislatures()
        assert len(ls) == 1
示例#10
0
    def handle(self, **options):
        verbose_level = options['verbosity']

        url_template = (
            'https://cdn.rawgit.com/everypolitician/everypolitician-data/'
            '{git_ref}/countries.json')

        url = url_template.format(
            git_ref=options['everypolitician_countries_json_git_ref'])

        ep = EveryPolitician(countries_json_url=url)
        south_africa_assembly = ep.country('South-Africa').legislature(
            'Assembly').popolo()

        id_lookup = {}
        for popolo_person in south_africa_assembly.persons:
            id_lookup[popolo_person.identifier_value(
                'peoples_assembly')] = popolo_person.identifier_value(
                    'wikidata')

        error_msg = u"No EveryPolitician UUID found for {0.id} {0.name} https://www.pa.org.za/person/{0.slug}/\n"
        for person in Person.objects.filter(hidden=False):
            wikidata_id = id_lookup.get(str(person.id))
            if wikidata_id is None:
                verbose_level > 1 and self.stderr.write(
                    error_msg.format(person))
                continue
            identifier, created = person.identifiers.get_or_create(
                scheme='wikidata',
                identifier=wikidata_id,
            )
            if verbose_level > 0:
                if created:
                    msg = u"Created new identifier for {name}: {identifier}"
                else:
                    msg = u"Existing identifier found for {name}: {identifier}"
                self.stdout.write(
                    msg.format(name=person.name,
                               identifier=identifier.identifier))
 def test_get_a_single_country_bad_case(self, patched_requests_get):
     ep = EveryPolitician()
     with pytest.raises(NotFound):
         ep.country('argentina')
 def test_get_a_single_country(self, patched_requests_get):
     ep = EveryPolitician()
     country = ep.country('Argentina')
     assert country.name == 'Argentina'