#28160: Can't start with django.contrib.gis.gdal.HAS_GDAL = False due to
ImportError of GDALRaster
-------------------------------------+-------------------------------------
               Reporter:  Tom        |          Owner:  nobody
  Kazimiers                          |
                   Type:  Bug        |         Status:  new
              Component:  GIS        |        Version:  1.10
               Severity:  Normal     |       Keywords:  GIS, GDAL, Contrib,
           Triage Stage:             |  Bug
  Unreviewed                         |      Has patch:  0
    Needs documentation:  0          |    Needs tests:  0
Patch needs improvement:  0          |  Easy pickings:  0
                  UI/UX:  0          |
-------------------------------------+-------------------------------------
 Under some circumstances `django.contrib.gis.gdal.HAS_GDAL` is `False`.
 This can be due to not having GDAL installed in the first place or by
 overriding one's OS name (and thereby causing the test in
 `django.contrib.gis.gdal.__init__.py` to result in an exception which in
 turns causes `HAS_GDAL = False`).¹


 Now with `HAS_GDAL = False`, I can't start Django anymore (neither the
 shell or any other command), because I get the following error:
 {{{
 django.core.exceptions.ImproperlyConfigured: 'postgresql' isn't an
 available database backend.
 Try using 'django.db.backends.XXX', where XXX is one of:
     'mysql', 'oracle', 'postgresql', 'sqlite3'
 Error was: No module named postgresql.base
 }}}

 Digging a bit deeper into this reveals this is actually an ImportError:
 `Error was: cannot import name GDALRaster`. Using other
 `django.contrib.gis` functionality should also work without GDAL (and did
 so in the past).

 The problem seems to be that in commit
 `bbfad84dd980a97174c3b061a3d1b5f1373c380d`
 
([https://github.com/django/django/commit/bbfad84dd980a97174c3b061a3d1b5f1373c380d
 #diff-9501b5a77c1985430f52d03aedb3e434R7 here]) a new import has been
 added to `django/contrib/gis/db/backends/postgis/operations.py`, which
 tries to import `GDALRaster`: `from django.contrib.gis.gdal import
 GDALRaster`. This of course fails with `HAS_GDAL = False`, because
 `GDALRaster` has never been defined when `HAS_GDAL` was set false due to
 an (expected) exception in `django/django/contrib/gis/gdal/libgdal.py`,
 which is imported before `from django.contrib.gis.gdal.raster.source
 import GDALRaster` in `django/django/contrib/gis/gdal/__init__.py`.

 So maybe the import in
 `django/contrib/gis/db/backends/postgis/operations.py` and the use of
 `GDALRaster` should be conditional and only run if `HAS_GDAL = True`. I
 can provide a patch if wanted.

 This is a problem in both Django 1.10 and 1.11.

 ¹ In my project I need to do the latter to disable GDAL support
 completely, because loading the library conflicts with `pgmagick` on
 Ubuntu and there is no other way to disable GDAL, but this shouldn't
 matter here. It would be nice though to have a way to force `HAS_GDAL =
 False`, because unlike said in
 `django/django/contrib/gis/gdal/__init__.py`, setting
 `GDAL_LIBRARY_PATH='/null/path'` doesn't work (the automatic OS checks
 override this).

--
Ticket URL: <https://code.djangoproject.com/ticket/28160>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/048.8c553e48891ed29b0fc020ce214521ac%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to