Commit 844e56e2 authored by Claude Paroz's avatar Claude Paroz
Browse files

Fixed #18039 -- Changed geometry transform without a SRID raise a GEOSException.

This was planned in the official deprecation timeline for 1.5.


git-svn-id: http://code.djangoproject.com/svn/django/trunk@17903 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent cbc41157
Loading
Loading
Loading
Loading
+1 −6
Original line number Diff line number Diff line
@@ -3,7 +3,6 @@
 inherit from this object.
"""
# Python, ctypes and types dependencies.
import warnings
from ctypes import addressof, byref, c_double

# super-class for mutable list behavior
@@ -507,11 +506,7 @@ class GEOSGeometry(GEOSBase, ListMixin):
                return

        if (srid is None) or (srid < 0):
            warnings.warn("Calling transform() with no SRID set does no transformation!",
                          stacklevel=2)
            warnings.warn("Calling transform() with no SRID will raise GEOSException in v1.5",
                          FutureWarning, stacklevel=2)
            return
            raise GEOSException("Calling transform() with no SRID set is not supported")

        if not gdal.HAS_GDAL:
            raise GEOSException("GDAL library is not available to transform() geometry.")
+9 −53
Original line number Diff line number Diff line
@@ -891,63 +891,19 @@ class GEOSTest(unittest.TestCase, TestDataMixin):
            gdal.HAS_GDAL = old_has_gdal

    def test23_transform_nosrid(self):
        """ Testing `transform` method (no SRID) """
        # Raise a warning if SRID <0/None.
        import warnings
        print "\nBEGIN - expecting Warnings; safe to ignore.\n"

        # Test for do-nothing behavior.
        try:
            # Keeping line-noise down by only printing the relevant
            # warnings once.
            warnings.simplefilter('once', UserWarning)
            warnings.simplefilter('once', FutureWarning)

            g = GEOSGeometry('POINT (-104.609 38.255)', srid=None)
            g.transform(2774)
            self.assertEqual(g.tuple, (-104.609, 38.255))
            self.assertEqual(g.srid, None)

            g = GEOSGeometry('POINT (-104.609 38.255)', srid=None)
            g1 = g.transform(2774, clone=True)
            self.assertTrue(g1 is None)

            g = GEOSGeometry('POINT (-104.609 38.255)', srid=-1)
            g.transform(2774)
            self.assertEqual(g.tuple, (-104.609, 38.255))
            self.assertEqual(g.srid, -1)

            g = GEOSGeometry('POINT (-104.609 38.255)', srid=-1)
            g1 = g.transform(2774, clone=True)
            self.assertTrue(g1 is None)

        finally:
            warnings.simplefilter('default', UserWarning)
            warnings.simplefilter('default', FutureWarning)

        print "\nEND - expecting Warnings; safe to ignore.\n"


        # test warning is raised
        try:
            warnings.simplefilter('error', FutureWarning)
            warnings.simplefilter('ignore', UserWarning)
        """ Testing `transform` method (no SRID or negative SRID) """

        g = GEOSGeometry('POINT (-104.609 38.255)', srid=None)
            self.assertRaises(FutureWarning, g.transform, 2774)
        self.assertRaises(GEOSException, g.transform, 2774)

        g = GEOSGeometry('POINT (-104.609 38.255)', srid=None)
            self.assertRaises(FutureWarning, g.transform, 2774, clone=True)
        self.assertRaises(GEOSException, g.transform, 2774, clone=True)

        g = GEOSGeometry('POINT (-104.609 38.255)', srid=-1)
            self.assertRaises(FutureWarning, g.transform, 2774)
        self.assertRaises(GEOSException, g.transform, 2774)

        g = GEOSGeometry('POINT (-104.609 38.255)', srid=-1)
            self.assertRaises(FutureWarning, g.transform, 2774, clone=True)
        finally:
            warnings.simplefilter('default', FutureWarning)
            warnings.simplefilter('default', UserWarning)

        self.assertRaises(GEOSException, g.transform, 2774, clone=True)

    def test23_transform_nogdal(self):
        """ Testing `transform` method (GDAL not available) """
+2 −3
Original line number Diff line number Diff line
@@ -542,9 +542,8 @@ is returned instead.
   Prior to 1.3, this method would silently no-op if GDAL was not available.
   Now, a :class:`~django.contrib.gis.geos.GEOSException` is raised as
   application code relying on this behavior is in error. In addition,
   use of this method when the SRID is ``None`` or less than 0 now generates
   a warning because a :class:`~django.contrib.gis.geos.GEOSException` will
   be raised instead in version 1.5.
   use of this method when the SRID is ``None`` or less than 0 now also generates
   a :class:`~django.contrib.gis.geos.GEOSException`.


``Point``