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 -~----------~----~----~----~------~----~------~--~---