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
This commit is contained in:
Claude Paroz 2012-04-12 16:35:28 +00:00
parent cbc411571a
commit 844e56e21a
3 changed files with 12 additions and 62 deletions

View File

@ -3,7 +3,6 @@
inherit from this object. inherit from this object.
""" """
# Python, ctypes and types dependencies. # Python, ctypes and types dependencies.
import warnings
from ctypes import addressof, byref, c_double from ctypes import addressof, byref, c_double
# super-class for mutable list behavior # super-class for mutable list behavior
@ -507,11 +506,7 @@ class GEOSGeometry(GEOSBase, ListMixin):
return return
if (srid is None) or (srid < 0): if (srid is None) or (srid < 0):
warnings.warn("Calling transform() with no SRID set does no transformation!", raise GEOSException("Calling transform() with no SRID set is not supported")
stacklevel=2)
warnings.warn("Calling transform() with no SRID will raise GEOSException in v1.5",
FutureWarning, stacklevel=2)
return
if not gdal.HAS_GDAL: if not gdal.HAS_GDAL:
raise GEOSException("GDAL library is not available to transform() geometry.") raise GEOSException("GDAL library is not available to transform() geometry.")

View File

@ -891,63 +891,19 @@ class GEOSTest(unittest.TestCase, TestDataMixin):
gdal.HAS_GDAL = old_has_gdal gdal.HAS_GDAL = old_has_gdal
def test23_transform_nosrid(self): def test23_transform_nosrid(self):
""" Testing `transform` method (no SRID) """ """ Testing `transform` method (no SRID or negative SRID) """
# Raise a warning if SRID <0/None.
import warnings
print "\nBEGIN - expecting Warnings; safe to ignore.\n"
# Test for do-nothing behavior. g = GEOSGeometry('POINT (-104.609 38.255)', srid=None)
try: self.assertRaises(GEOSException, g.transform, 2774)
# 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 = GEOSGeometry('POINT (-104.609 38.255)', srid=None)
g.transform(2774) self.assertRaises(GEOSException, g.transform, 2774, clone=True)
self.assertEqual(g.tuple, (-104.609, 38.255))
self.assertEqual(g.srid, None)
g = GEOSGeometry('POINT (-104.609 38.255)', srid=None) g = GEOSGeometry('POINT (-104.609 38.255)', srid=-1)
g1 = g.transform(2774, clone=True) self.assertRaises(GEOSException, g.transform, 2774)
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)
g = GEOSGeometry('POINT (-104.609 38.255)', srid=None)
self.assertRaises(FutureWarning, g.transform, 2774)
g = GEOSGeometry('POINT (-104.609 38.255)', srid=None)
self.assertRaises(FutureWarning, g.transform, 2774, clone=True)
g = GEOSGeometry('POINT (-104.609 38.255)', srid=-1)
self.assertRaises(FutureWarning, 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)
g = GEOSGeometry('POINT (-104.609 38.255)', srid=-1)
self.assertRaises(GEOSException, g.transform, 2774, clone=True)
def test23_transform_nogdal(self): def test23_transform_nogdal(self):
""" Testing `transform` method (GDAL not available) """ """ Testing `transform` method (GDAL not available) """

View File

@ -542,9 +542,8 @@ is returned instead.
Prior to 1.3, this method would silently no-op if GDAL was not available. 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 Now, a :class:`~django.contrib.gis.geos.GEOSException` is raised as
application code relying on this behavior is in error. In addition, 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 use of this method when the SRID is ``None`` or less than 0 now also generates
a warning because a :class:`~django.contrib.gis.geos.GEOSException` will a :class:`~django.contrib.gis.geos.GEOSException`.
be raised instead in version 1.5.
``Point`` ``Point``