def import_from_divisionset_to_file_map(self, divisionset_to_file_map, data_type="json", name_field="Name"): for div_set, data_path in divisionset_to_file_map.items(): print(data_path) self.fix_divisions(div_set) if data_type == "json": self.check_json(div_set, data_path) if data_type == "shp": self.check_shp(div_set, data_path, name_field=name_field) try: geo_data = DataSource(data_path) except: geo_data = DataSource(data_path) for feat in geo_data[0]: name = feat.get(name_field) if name == "Eilean a' Cheo": name = "Eilean a′ Chéo" div = div_set.divisions.get(name=name) try: geog = div.geography except DivisionGeography.DoesNotExist: geog = DivisionGeography(division=div) new_geog = feat.geom.clone() new_geog.coord_dim = 2 geog.geography = self.clean_poly(new_geog.geos) geog.save() div.save()
def import_div_geography(self, div, feature): try: div.geography.geography = feature["geometry"].ewkb div.geography.source = self.source div.geography.save() except DivisionGeography.DoesNotExist: dg = DivisionGeography( division_id=div.id, geography=feature["geometry"].ewkb, source=self.source, ) dg.save() self.stdout.write("Importing boundary for area {}...saved".format(str(div)))
def import_div_geography(self, div): area_type = div.division_type bl = self.open_boundaryline(area_type) code_type, code = split_code(div.official_identifier) fieldname = "code" if code_type == "gss" else code_type geom = self.get_geography_from_feature(bl.get_feature_by_field(fieldname, code)) try: div.geography.geography = geom.ewkb div.geography.source = self.source div.geography.save() except DivisionGeography.DoesNotExist: dg = DivisionGeography( division_id=div.id, geography=geom.ewkb, source=self.source ) dg.save() self.stdout.write("..saved {}".format(str(div)))
def test_election_with_division_geography(self): all_data = self.base_data geog = DivisionGeography() geog.division = self.org_div_2 geog.geography = self.test_polygon geog.save() all_data.update({ self.make_div_id(): 'contested', self.make_div_id(div=self.org_div_2): 'contested', }) expected_ids = [ 'local.'+self.date_str, 'local.test.'+self.date_str, 'local.test.test-div.'+self.date_str, 'local.test.test-div-2.'+self.date_str, ] self.run_test_with_data( all_data, expected_ids ) for election in Election.objects.all(): if election.election_id == 'local.test.test-div-2.'+self.date_str: self.assertTrue(election.geography != None) else: self.assertTrue(election.geography == None) result = Election.objects.for_lat_lng( 51.50124158773981, -0.13715744018554688) self.assertEqual(1, len(result)) self.assertEqual('local.test.test-div-2.'+self.date_str, result[0].election_id)
def test_election_with_division_geography(self): all_data = self.base_data geog = DivisionGeography() geog.division = self.org_div_2 geog.geography = self.test_polygon geog.save() all_data.update( { self.make_div_id(): "contested", self.make_div_id(div=self.org_div_2): "contested", } ) expected_ids = [ "local." + self.date_str, "local.test." + self.date_str, "local.test.test-div." + self.date_str, "local.test.test-div-2." + self.date_str, ] expected_titles = [ "Local elections", "Test Council local elections", "Test Council local elections Test Div 1", "Test Council local elections Test Div 2", ] self.run_test_with_data(all_data, expected_ids, expected_titles) for election in Election.private_objects.all(): if election.election_id == "local.test.test-div-2." + self.date_str: self.assertTrue(election.geography != None) else: self.assertTrue(election.geography == None) result = Election.private_objects.for_lat_lng( 51.50124158773981, -0.13715744018554688 ) self.assertEqual(1, len(result)) self.assertEqual( "local.test.test-div-2." + self.date_str, result[0].election_id )
def test_election_with_organisation_geography(self): all_data = self.base_data geog = DivisionGeography() geog.organisation = all_data['election_organisation'][0] geog.geography = self.test_polygon geog.save() all_data.update({ self.make_div_id(): 'contested', self.make_div_id(div=self.org_div_2): 'contested', }) expected_ids = [ 'local.' + self.date_str, 'local.test.' + self.date_str, 'local.test.test-div.' + self.date_str, 'local.test.test-div-2.' + self.date_str, ] expected_titles = [ 'Local elections', 'Test Council local elections', 'Test Council local elections Test Div 1', 'Test Council local elections Test Div 2', ] self.run_test_with_data(all_data, expected_ids, expected_titles) for election in Election.objects.all(): if election.group_type == 'organisation': self.assertTrue(election.geography != None) else: self.assertTrue(election.geography == None) result = Election.objects.for_lat_lng(51.50124158773981, -0.13715744018554688) self.assertEqual(1, len(result)) self.assertEqual('local.test.' + self.date_str, result[0].election_id)