Skip to content

Commit

Permalink
Add management command to sync EveryPolitician UUID
Browse files Browse the repository at this point in the history
  • Loading branch information
chrismytton committed Jan 31, 2018
1 parent 7c2a06d commit 159156d
Showing 1 changed file with 54 additions and 0 deletions.
54 changes: 54 additions & 0 deletions pombola/core/management/commands/core_sync_everypolitician_uuid.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
from everypolitician import EveryPolitician

from django.core.management.base import BaseCommand

from pombola.core.models import Person


class Command(BaseCommand):
help = 'Sync EveryPolitician UUID to Person.everypolitician_uuid field'

def add_arguments(self, parser):
parser.add_argument('everypolitician_countries_json_git_ref',
help="A git ref from the everypolitician-data repo")

def handle(self, **options):
verbose_level = options['verbosity']

# FIXME: This SHA is currently pointing at a branch which has the
# `peoples_assembly` identifier, but this isn't on master because
# South Africa is broken in EveryPolitician at the moment.
#
# TODO: Make this SHA configurable.
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:
pa_ids = [i for i in popolo_person.identifiers if i['scheme'] == 'peoples_assembly']
if pa_ids == []:
continue
id_lookup[pa_ids[0]['identifier']] = popolo_person.id

error_msg = u"No EveryPolitician UUID found for {} {} https://www.pa.org.za/person/{}/\n"
for person in Person.objects.filter(hidden=False):
uuid = id_lookup.get(str(person.id))
if uuid is None:
if verbose_level > 1:
self.stderr.write(error_msg.format(person.id, person.name, person.slug))
continue
identifier, created = person.identifiers.get_or_create(
scheme='everypolitician',
identifier=uuid,
)
if verbose_level > 0:
if created:
msg = u"Created new identifier for {}: {}"
else:
msg = u"Existing identifier found for {}: {}"
self.stdout.write(msg.format(person.name, identifier.identifier))

0 comments on commit 159156d

Please sign in to comment.