Author: jbronn
Date: 2008-12-26 14:07:36 -0600 (Fri, 26 Dec 2008)
New Revision: 9689

Added:
   
django/branches/releases/1.0.X/django/contrib/gis/tests/layermap/tests_mysql.py
Modified:
   django/branches/releases/1.0.X/django/contrib/gis/tests/__init__.py
   django/branches/releases/1.0.X/django/contrib/gis/tests/layermap/tests.py
   django/branches/releases/1.0.X/django/contrib/gis/utils/layermapping.py
Log:
[1.0.X] Fixed #9664 -- `LayerMapping` now works with MySQL spatial backends.

Backport of r9688 from trunk.


Modified: django/branches/releases/1.0.X/django/contrib/gis/tests/__init__.py
===================================================================
--- django/branches/releases/1.0.X/django/contrib/gis/tests/__init__.py 
2008-12-26 20:04:11 UTC (rev 9688)
+++ django/branches/releases/1.0.X/django/contrib/gis/tests/__init__.py 
2008-12-26 20:07:36 UTC (rev 9689)
@@ -29,7 +29,7 @@
         elif postgis:
             test_models += ['distapp', 'layermap', 'relatedapp']
         elif mysql:
-            test_models += ['relatedapp']
+            test_models += ['relatedapp', 'layermap']
 
         test_suite_names += [
             'test_gdal_driver',

Modified: 
django/branches/releases/1.0.X/django/contrib/gis/tests/layermap/tests.py
===================================================================
--- django/branches/releases/1.0.X/django/contrib/gis/tests/layermap/tests.py   
2008-12-26 20:04:11 UTC (rev 9688)
+++ django/branches/releases/1.0.X/django/contrib/gis/tests/layermap/tests.py   
2008-12-26 20:07:36 UTC (rev 9689)
@@ -1,8 +1,8 @@
 import os, unittest
 from copy import copy
-from datetime import date
 from decimal import Decimal
 from models import City, County, CountyFeat, Interstate, State, city_mapping, 
co_mapping, cofeat_mapping, inter_mapping
+from django.contrib.gis.db.backend import SpatialBackend
 from django.contrib.gis.utils.layermapping import LayerMapping, LayerMapError, 
InvalidDecimal, MissingForeignKey
 from django.contrib.gis.gdal import DataSource
 
@@ -85,7 +85,8 @@
             lm = LayerMapping(Interstate, inter_shp, inter_mapping)
             lm.save(silent=True, strict=True)
         except InvalidDecimal:
-            pass
+            # No transactions for geoms on MySQL; delete added features.
+            if SpatialBackend.mysql: Interstate.objects.all().delete()
         else:
             self.fail('Should have failed on strict import with invalid 
decimal values.')
 
@@ -151,7 +152,8 @@
             self.assertRaises(e, LayerMapping, County, co_shp, co_mapping, 
transform=False, unique=arg)
 
         # No source reference system defined in the shapefile, should raise an 
error.
-        self.assertRaises(LayerMapError, LayerMapping, County, co_shp, 
co_mapping)
+        if not SpatialBackend.mysql:
+            self.assertRaises(LayerMapError, LayerMapping, County, co_shp, 
co_mapping)
 
         # Passing in invalid ForeignKey mapping parameters -- must be a 
dictionary
         # mapping for the model the ForeignKey points to.
@@ -227,8 +229,9 @@
         lm.save(fid_range=slice(None, 1), silent=True, strict=True) # layer[:1]
 
         # Only Pueblo & Honolulu counties should be present because of
-        # the `unique` keyword.
-        qs = County.objects.all()
+        # the `unique` keyword.  Have to set `order_by` on this QuerySet 
+        # or else MySQL will return a different ordering than the other dbs.
+        qs = County.objects.order_by('name') 
         self.assertEqual(2, qs.count())
         hi, co = tuple(qs)
         hi_idx, co_idx = tuple(map(NAMES.index, ('Honolulu', 'Pueblo')))

Added: 
django/branches/releases/1.0.X/django/contrib/gis/tests/layermap/tests_mysql.py
===================================================================
--- 
django/branches/releases/1.0.X/django/contrib/gis/tests/layermap/tests_mysql.py 
                            (rev 0)
+++ 
django/branches/releases/1.0.X/django/contrib/gis/tests/layermap/tests_mysql.py 
    2008-12-26 20:07:36 UTC (rev 9689)
@@ -0,0 +1 @@
+from tests import *

Modified: 
django/branches/releases/1.0.X/django/contrib/gis/utils/layermapping.py
===================================================================
--- django/branches/releases/1.0.X/django/contrib/gis/utils/layermapping.py     
2008-12-26 20:04:11 UTC (rev 9688)
+++ django/branches/releases/1.0.X/django/contrib/gis/utils/layermapping.py     
2008-12-26 20:07:36 UTC (rev 9689)
@@ -116,7 +116,6 @@
     OGRException, OGRGeometry, OGRGeomType, SpatialReference
 from django.contrib.gis.gdal.field import \
     OFTDate, OFTDateTime, OFTInteger, OFTReal, OFTString, OFTTime
-from django.contrib.gis.models import GeometryColumns, SpatialRefSys
 from django.db import models, transaction
 from django.contrib.localflavor.us.models import USStateField
 
@@ -189,7 +188,10 @@
 
         # Getting the geometry column associated with the model (an 
         # exception will be raised if there is no geometry column).
-        self.geo_col = self.geometry_column()
+        if SpatialBackend.mysql:
+            transform = False
+        else:
+            self.geo_col = self.geometry_column()
 
         # Checking the source spatial reference system, and getting
         # the coordinate transformation object (unless the `transform`
@@ -327,6 +329,7 @@
 
     def check_srs(self, source_srs):
         "Checks the compatibility of the given spatial reference object."
+        from django.contrib.gis.models import SpatialRefSys
         if isinstance(source_srs, SpatialReference):
             sr = source_srs
         elif isinstance(source_srs, SpatialRefSys):
@@ -498,6 +501,7 @@
     #### Other model methods ####
     def coord_transform(self):
         "Returns the coordinate transformation object."
+        from django.contrib.gis.models import SpatialRefSys
         try:
             # Getting the target spatial reference system
             target_srs = SpatialRefSys.objects.get(srid=self.geo_col.srid).srs
@@ -509,11 +513,12 @@
 
     def geometry_column(self):
         "Returns the GeometryColumn model associated with the geographic 
column."
+        from django.contrib.gis.models import GeometryColumns
         # Getting the GeometryColumn object.
         try:
             db_table = self.model._meta.db_table
             geo_col = self.geom_field
-            if SpatialBackend.name == 'oracle':
+            if SpatialBackend.oracle:
                 # Making upper case for Oracle.
                 db_table = db_table.upper()
                 geo_col = geo_col.upper()


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to django-updates@googlegroups.com
To unsubscribe from this group, send email to 
django-updates+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to