Esempio n. 1
0
    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()
Esempio n. 2
0
 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)))
Esempio n. 3
0
    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)))
Esempio n. 4
0
    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)
Esempio n. 5
0
    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
        )
Esempio n. 6
0
    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)