Commit 1fdbcadd authored by Justin Bronn's avatar Justin Bronn
Browse files

Fixed #15378 -- Now properly handle OGR layers that have features with invalid...

Fixed #15378 -- Now properly handle OGR layers that have features with invalid geometries.  Thanks, kunitoki for bug report and initial patch.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@15813 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent dd3313bf
Loading
Loading
Loading
Loading
+77 B

File added.

No diff preview for this file type.

+112 B

File added.

No diff preview for this file type.

+108 B

File added.

No diff preview for this file type.

+3 −0
Original line number Diff line number Diff line
@@ -43,6 +43,9 @@ class ICity1(CityBase):
class ICity2(ICity1):
    dt_time = models.DateTimeField(auto_now=True)

class Invalid(models.Model):
    point = models.PointField()

# Mapping dictionaries for the models above.
co_mapping = {'name' : 'Name',
              'state' : {'name' : 'State'}, # ForeignKey's use another mapping dictionary for the _related_ Model (State in this case).
+12 −2
Original line number Diff line number Diff line
@@ -4,16 +4,19 @@ from decimal import Decimal
from django.utils.copycompat import copy
from django.utils.unittest import TestCase

from django.contrib.gis.gdal import DataSource
from django.contrib.gis.gdal import DataSource, OGRException
from django.contrib.gis.tests.utils import mysql
from django.contrib.gis.utils.layermapping import LayerMapping, LayerMapError, InvalidDecimal, MissingForeignKey

from models import City, County, CountyFeat, Interstate, ICity1, ICity2, State, city_mapping, co_mapping, cofeat_mapping, inter_mapping
from models import \
    City, County, CountyFeat, Interstate, ICity1, ICity2, Invalid, State, \
    city_mapping, co_mapping, cofeat_mapping, inter_mapping

shp_path = os.path.realpath(os.path.join(os.path.dirname(__file__), os.pardir, 'data'))
city_shp = os.path.join(shp_path, 'cities', 'cities.shp')
co_shp = os.path.join(shp_path, 'counties', 'counties.shp')
inter_shp = os.path.join(shp_path, 'interstates', 'interstates.shp')
invalid_shp = os.path.join(shp_path, 'invalid', 'emptypoints.shp')

# Dictionaries to hold what's expected in the county shapefile.
NAMES  = ['Bexar', 'Galveston', 'Harris', 'Honolulu', 'Pueblo']
@@ -265,3 +268,10 @@ class LayerMapTest(TestCase):

        self.assertEqual(6, ICity1.objects.count())
        self.assertEqual(3, ICity2.objects.count())

    def test07_invalid_layer(self):
        "Tests LayerMapping on invalid geometries.  See #15378."
        invalid_mapping = {'point': 'POINT'}
        lm = LayerMapping(Invalid, invalid_shp, invalid_mapping,
                          source_srs=4326)
        lm.save(silent=True)
Loading