Skip to content

Commit

Permalink
Fixed django#18039 -- Changed geometry transform without a SRID raise…
Browse files Browse the repository at this point in the history
… 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
  • Loading branch information
claudep committed Apr 12, 2012
1 parent cbc4115 commit 844e56e
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 62 deletions.
7 changes: 1 addition & 6 deletions django/contrib/gis/geos/geometry.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -507,11 +506,7 @@ def transform(self, ct, clone=False):
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.")
Expand Down
62 changes: 9 additions & 53 deletions django/contrib/gis/geos/tests/test_geos.py
Original file line number Diff line number Diff line change
Expand Up @@ -891,63 +891,19 @@ def test23_transform_noop(self):
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)
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)
g = GEOSGeometry('POINT (-104.609 38.255)', srid=None)
self.assertRaises(GEOSException, g.transform, 2774)

print "\nEND - expecting Warnings; safe to ignore.\n"
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=-1)
self.assertRaises(GEOSException, g.transform, 2774)

# 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):
""" Testing `transform` method (GDAL not available) """
Expand Down
5 changes: 2 additions & 3 deletions docs/ref/contrib/gis/geos.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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``
Expand Down

0 comments on commit 844e56e

Please sign in to comment.