From 844e56e21aa45a4bf1c549129e46f7d7959c74d8 Mon Sep 17 00:00:00 2001 From: Claude Paroz Date: Thu, 12 Apr 2012 16:35:28 +0000 Subject: [PATCH] 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 --- django/contrib/gis/geos/geometry.py | 7 +-- django/contrib/gis/geos/tests/test_geos.py | 62 ++++------------------ docs/ref/contrib/gis/geos.txt | 5 +- 3 files changed, 12 insertions(+), 62 deletions(-) diff --git a/django/contrib/gis/geos/geometry.py b/django/contrib/gis/geos/geometry.py index c56eeb345b..f411d5a353 100644 --- a/django/contrib/gis/geos/geometry.py +++ b/django/contrib/gis/geos/geometry.py @@ -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.") diff --git a/django/contrib/gis/geos/tests/test_geos.py b/django/contrib/gis/geos/tests/test_geos.py index a8372b4f69..a6b50df635 100644 --- a/django/contrib/gis/geos/tests/test_geos.py +++ b/django/contrib/gis/geos/tests/test_geos.py @@ -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" + """ Testing `transform` method (no SRID or negative SRID) """ - # 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) + self.assertRaises(GEOSException, g.transform, 2774) - 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) + self.assertRaises(GEOSException, g.transform, 2774, clone=True) - 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) - - 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) + g = GEOSGeometry('POINT (-104.609 38.255)', srid=-1) + self.assertRaises(GEOSException, g.transform, 2774, clone=True) def test23_transform_nogdal(self): """ Testing `transform` method (GDAL not available) """ diff --git a/docs/ref/contrib/gis/geos.txt b/docs/ref/contrib/gis/geos.txt index a82ac87acf..9fceda32d0 100644 --- a/docs/ref/contrib/gis/geos.txt +++ b/docs/ref/contrib/gis/geos.txt @@ -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``