def handle(self, *args, **options): if len(args) != 2: raise CommandError, "You must provide a filename prefix and the Pombola instance URL" output_directory, pombola_url = args if not (exists(output_directory) and isdir(output_directory)): message = "'{0}' was not a directory" raise CommandError(message.format(output_directory)) parsed_url = urlparse.urlparse(pombola_url) if not parsed_url.netloc: message = "The Pombola URL must begin http:// or https://" raise CommandError(message) primary_id_scheme = '.'.join(reversed(parsed_url.netloc.split('.'))) if options['pombola']: for inline_memberships, leafname in ( (True, 'pombola.json'), (False, 'pombola-no-inline-memberships.json'), ): popolo_data = get_popolo_data( primary_id_scheme, pombola_url, inline_memberships=inline_memberships ) output_filename = join(output_directory, leafname) with open(output_filename, 'w') as f: json.dump(popolo_data, f, indent=4, sort_keys=True) else: popolo_data = get_popolo_data( primary_id_scheme, pombola_url, inline_memberships=False ) for collection, data in popolo_data.items(): for mongoexport_format in (True, False): if mongoexport_format: output_basename = 'mongo-' + collection + '.dump' else: output_basename = collection + ".json" output_filename = join(output_directory, output_basename) with open(output_filename, 'w') as f: if mongoexport_format: for item in data: item['_id'] = item['id'] json.dump(item, f, sort_keys=True) f.write("\n") else: json.dump(data, f, indent=4, sort_keys=True)
def test_popolo_place_no_session(self): self.position.place = self.place self.position.save() data = get_popolo_data('org.example', 'http://pombola.example.org/', inline_memberships=False) membership = data['memberships'][0] self.assertTrue(membership['area']) area = membership['area'] self.assertEqual( set(area.keys()), set(['area_type', 'id', 'identifier', 'name']) ) self.assertEqual(area['area_type'], 'PRV') self.assertEqual(area['name'], 'Test Province') self.assertEqual( area['id'], 'mapit:{0}'.format(self.mapit_test_province.id) ) self.assertEqual( area['identifier'], "http://pombola.example.org/mapit/area/{0}".format( self.mapit_test_province.id ) )
def test_popolo_representation_distinct(self): data = get_popolo_data("org.example", "http://pombola.example.org/", inline_memberships=False) self.rewrite_expected_data() self.assertEqual(data["persons"], self.expected_persons) self.assertEqual(data["organizations"], self.expected_organizations) self.assertEqual(data["memberships"], self.expected_memberships)
def test_popolo_representation_distinct(self): data = get_popolo_data('org.example', 'http://pombola.example.org/', inline_memberships=False) self.rewrite_expected_data() self.assertEqual(data['persons'], self.expected_persons) self.assertEqual(data['organizations'], self.expected_organizations) self.assertEqual(data['memberships'], self.expected_memberships)
def test_popolo_place_with_session(self): example_assembly = models.Organisation.objects.create( name='Example Assembly', slug='example-assembly', kind=models.OrganisationKind.objects.create( name='Chamber', slug='chamber' ), started=ApproximateDate(2009), ended=ApproximateDate(2011, 3, 20), ) example_session = models.ParliamentarySession.objects.create( name='Example Session', start_date=date(1970, 7, 1), end_date=date(1975, 12, 31), mapit_generation=self.generation.id, house=example_assembly, ) self.place.parliamentary_session = example_session self.place.save() self.position.place = self.place self.position.save() data = get_popolo_data('org.example', 'http://pombola.example.org/', inline_memberships=False) membership = data['memberships'][0] self.assertTrue(membership['area']) area = membership['area'] self.assertEqual( set(area.keys()), set(['area_type', 'id', 'identifier', 'name', 'session']) ) self.assertEqual(area['area_type'], 'PRV') self.assertEqual(area['name'], 'Test Province') self.assertEqual( area['id'], 'mapit:{0}'.format(self.mapit_test_province.id) ) self.assertEqual( area['identifier'], "http://pombola.example.org/mapit/area/{0}".format( self.mapit_test_province.id ) ) self.assertTrue(area['session']) session = area['session'] self.assertEqual(session['start_date'], '1970-07-01') self.assertEqual(session['end_date'], '1975-12-31') self.assertEqual(session['house_name'], 'Example Assembly') self.assertEqual(session['name'], 'Example Session') self.assertEqual(session['house_id'], example_assembly.id) self.assertEqual(session['id'], example_session.id) self.assertEqual(session['mapit_generation'], self.generation.id)
def test_popolo_representation_inline(self): data = get_popolo_data("org.example", "http://pombola.example.org/", inline_memberships=True) self.rewrite_expected_data() self.assertEqual(1, len(data["persons"])) self.assertEqual(1, len(data["persons"][0]["memberships"])) expected_membership = self.expected_memberships[0].copy() expected_person = self.expected_persons[0].copy() expected_person["memberships"] = [expected_membership] self.assertEqual(data["persons"], [expected_person]) self.assertEqual(data["organizations"], self.expected_organizations) self.assertNotIn("memberships", data)
def test_popolo_representation_inline(self): data = get_popolo_data('org.example', 'http://pombola.example.org/', inline_memberships=True) self.rewrite_expected_data() self.assertEqual(1, len(data['persons'])) self.assertEqual(1, len(data['persons'][0]['memberships'])) expected_membership = self.expected_memberships[0].copy() expected_person = self.expected_persons[0].copy() expected_person['memberships'] = [expected_membership] self.assertEqual(data['persons'], [expected_person]) self.assertEqual(data['organizations'], self.expected_organizations) self.assertNotIn('memberships', data)
def test_popolo_place_no_session(self): self.position.place = self.place self.position.save() data = get_popolo_data("org.example", "http://pombola.example.org/", inline_memberships=False) membership = data["memberships"][0] self.assertTrue(membership["area"]) area = membership["area"] self.assertEqual(set(area.keys()), set(["area_type", "id", "identifier", "name"])) self.assertEqual(area["area_type"], "PRV") self.assertEqual(area["name"], "Test Province") self.assertEqual(area["id"], "mapit:{0}".format(self.mapit_test_province.id)) self.assertEqual( area["identifier"], "http://pombola.example.org/mapit/area/{0}".format(self.mapit_test_province.id) )
def handle(self, *args, **options): if len(args) != 2: raise CommandError, "You must provide a filename prefix and the Pombola instance URL" filename_prefix, pombola_url = args parsed_url = urlparse.urlparse(pombola_url) primary_id_scheme = '.'.join(reversed(parsed_url.netloc.split('.'))) for collection, data in get_popolo_data( primary_id_scheme, pombola_url, inline_memberships=False).items(): output_filename = filename_prefix + '-' + collection + ".json" with open(output_filename, 'w') as f: json.dump(data, f, indent=4, sort_keys=True)
def test_popolo_place_with_session(self): example_assembly = models.Organisation.objects.create( name="Example Assembly", slug="example-assembly", kind=models.OrganisationKind.objects.create(name="Chamber", slug="chamber"), started=ApproximateDate(2009), ended=ApproximateDate(2011, 3, 20), ) example_session = models.ParliamentarySession.objects.create( name="Example Session", start_date=date(1970, 7, 1), end_date=date(1975, 12, 31), mapit_generation=self.generation.id, house=example_assembly, ) self.place.parliamentary_session = example_session self.place.save() self.position.place = self.place self.position.save() data = get_popolo_data("org.example", "http://pombola.example.org/", inline_memberships=False) membership = data["memberships"][0] self.assertTrue(membership["area"]) area = membership["area"] self.assertEqual(set(area.keys()), set(["area_type", "id", "identifier", "name", "session"])) self.assertEqual(area["area_type"], "PRV") self.assertEqual(area["name"], "Test Province") self.assertEqual(area["id"], "mapit:{0}".format(self.mapit_test_province.id)) self.assertEqual( area["identifier"], "http://pombola.example.org/mapit/area/{0}".format(self.mapit_test_province.id) ) self.assertTrue(area["session"]) session = area["session"] self.assertEqual(session["start_date"], "1970-07-01") self.assertEqual(session["end_date"], "1975-12-31") self.assertEqual(session["house_name"], "Example Assembly") self.assertEqual(session["name"], "Example Session") self.assertEqual(session["house_id"], example_assembly.id) self.assertEqual(session["id"], example_session.id) self.assertEqual(session["mapit_generation"], self.generation.id)
def handle(self, *args, **options): if len(args) != 2: raise CommandError, "You must provide a filename prefix and the Pombola instance URL" filename_prefix, pombola_url = args parsed_url = urlparse.urlparse(pombola_url) primary_id_scheme = '.'.join(reversed(parsed_url.netloc.split('.'))) inline_memberships = options['pombola'] popolo_data = get_popolo_data( primary_id_scheme, pombola_url, inline_memberships=inline_memberships ) if options['pombola']: output_filename = filename_prefix + '-pombola.json' with open(output_filename, 'w') as f: json.dump(popolo_data, f, indent=4, sort_keys=True) else: for collection, data in popolo_data.items(): for mongoexport_format in (True, False): output_filename = filename_prefix + '-' if mongoexport_format: output_filename += 'mongo-' output_filename += collection + ".json" with open(output_filename, 'w') as f: if mongoexport_format: for item in data: item['_id'] = item['id'] json.dump(item, f, sort_keys=True) f.write("\n") else: json.dump(data, f, indent=4, sort_keys=True)