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:
parent
cbc411571a
commit
844e56e21a
|
@ -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.")
|
||||||
|
|
|
@ -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) """
|
||||||
|
|
|
@ -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``
|
||||||
|
|
Loading…
Reference in New Issue