Fixed #25865 -- Made OSMGeoAdmin require GDAL only if transformation is needed.
This commit is contained in:
parent
4f0cd0fd16
commit
1f035e6283
|
@ -59,6 +59,12 @@ class GeoModelAdmin(ModelAdmin):
|
||||||
3D editing).
|
3D editing).
|
||||||
"""
|
"""
|
||||||
if isinstance(db_field, models.GeometryField) and db_field.dim < 3:
|
if isinstance(db_field, models.GeometryField) and db_field.dim < 3:
|
||||||
|
if not HAS_GDAL and db_field.srid != self.map_srid:
|
||||||
|
raise ImproperlyConfigured(
|
||||||
|
"Map SRID is %s and SRID of `%s` is %s. GDAL must be "
|
||||||
|
"installed to perform the transformation."
|
||||||
|
% (self.map_srid, db_field, db_field.srid)
|
||||||
|
)
|
||||||
# Setting the widget with the newly defined widget.
|
# Setting the widget with the newly defined widget.
|
||||||
kwargs['widget'] = self.get_map_widget(db_field)
|
kwargs['widget'] = self.get_map_widget(db_field)
|
||||||
return db_field.formfield(**kwargs)
|
return db_field.formfield(**kwargs)
|
||||||
|
@ -134,8 +140,3 @@ class OSMGeoAdmin(GeoModelAdmin):
|
||||||
max_resolution = '156543.0339'
|
max_resolution = '156543.0339'
|
||||||
point_zoom = num_zoom - 6
|
point_zoom = num_zoom - 6
|
||||||
units = 'm'
|
units = 'm'
|
||||||
|
|
||||||
def __init__(self, *args):
|
|
||||||
if not HAS_GDAL:
|
|
||||||
raise ImproperlyConfigured("OSMGeoAdmin is not usable without GDAL libs installed")
|
|
||||||
super(OSMGeoAdmin, self).__init__(*args)
|
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
from django.contrib.gis.gdal import HAS_GDAL
|
|
||||||
from django.utils.encoding import python_2_unicode_compatible
|
from django.utils.encoding import python_2_unicode_compatible
|
||||||
|
|
||||||
from ..admin import admin
|
from ..admin import admin
|
||||||
|
@ -19,6 +18,18 @@ class City(models.Model):
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
|
class CityMercator(models.Model):
|
||||||
|
name = models.CharField(max_length=30)
|
||||||
|
point = models.PointField(srid=3857)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
required_db_features = ['gis_enabled']
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return self.name
|
||||||
|
|
||||||
site = admin.AdminSite(name='admin_gis')
|
site = admin.AdminSite(name='admin_gis')
|
||||||
if HAS_GDAL:
|
site.register(City, admin.OSMGeoAdmin)
|
||||||
site.register(City, admin.OSMGeoAdmin)
|
site.register(CityMercator, admin.OSMGeoAdmin)
|
||||||
|
|
|
@ -1,11 +1,15 @@
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from unittest import skipUnless
|
||||||
|
|
||||||
from django.contrib.gis import admin
|
from django.contrib.gis import admin
|
||||||
|
from django.contrib.gis.gdal import HAS_GDAL
|
||||||
from django.contrib.gis.geos import Point
|
from django.contrib.gis.geos import Point
|
||||||
from django.test import TestCase, override_settings, skipUnlessDBFeature
|
from django.core.exceptions import ImproperlyConfigured
|
||||||
|
from django.test import TestCase, mock, override_settings, skipUnlessDBFeature
|
||||||
|
|
||||||
from .admin import UnmodifiableAdmin
|
from .admin import UnmodifiableAdmin
|
||||||
from .models import City, site
|
from .models import City, CityMercator, site
|
||||||
|
|
||||||
|
|
||||||
@skipUnlessDBFeature("gis_enabled")
|
@skipUnlessDBFeature("gis_enabled")
|
||||||
|
@ -52,6 +56,22 @@ class GeoAdminTest(TestCase):
|
||||||
""""http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic', format: 'image/jpeg'});""",
|
""""http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic', format: 'image/jpeg'});""",
|
||||||
result)
|
result)
|
||||||
|
|
||||||
|
@mock.patch('django.contrib.gis.admin.options.HAS_GDAL', False)
|
||||||
|
def test_no_gdal_admin_model_diffent_srid(self):
|
||||||
|
msg = (
|
||||||
|
'Map SRID is 3857 and SRID of `geoadmin.City.point` is 4326. '
|
||||||
|
'GDAL must be installed to perform the transformation.'
|
||||||
|
)
|
||||||
|
with self.assertRaisesMessage(ImproperlyConfigured, msg):
|
||||||
|
geoadmin = site._registry[City]
|
||||||
|
geoadmin.get_changelist_form(None)()
|
||||||
|
|
||||||
|
@mock.patch('django.contrib.gis.admin.options.HAS_GDAL', False)
|
||||||
|
def test_no_gdal_admin_model_same_srid(self):
|
||||||
|
geoadmin = site._registry[CityMercator]
|
||||||
|
geoadmin.get_changelist_form(None)()
|
||||||
|
|
||||||
|
@skipUnless(HAS_GDAL, "GDAL is required.")
|
||||||
def test_olwidget_has_changed(self):
|
def test_olwidget_has_changed(self):
|
||||||
"""
|
"""
|
||||||
Check that changes are accurately noticed by OpenLayersWidget.
|
Check that changes are accurately noticed by OpenLayersWidget.
|
||||||
|
|
Loading…
Reference in New Issue