#31162: GIS error logging when using WKT string as input to filter() query
-----------------------------------------+------------------------
               Reporter:  Arno           |          Owner:  nobody
                   Type:  Uncategorized  |         Status:  new
              Component:  GIS            |        Version:  2.2
               Severity:  Normal         |       Keywords:
           Triage Stage:  Unreviewed     |      Has patch:  0
    Needs documentation:  0              |    Needs tests:  0
Patch needs improvement:  0              |  Easy pickings:  0
                  UI/UX:  0              |
-----------------------------------------+------------------------
 When executing a geometry lookup like
 `my_geo_model.objects.filter(my_geom__intersects=wkt_string)` (i.e. using
 a WKT string as value)  django.contrib.gis emits the following errors:

 {{{
 2020-01-13 10:16:07,145 - django.contrib.gis - ERROR - GDAL_ERROR 4:
 b'POLYGON ((1 1, 1 0, 0 0, 0 1, 1 1)): No such file or directory'
 2020-01-13 10:16:08,403 - django.contrib.gis - ERROR - GDAL_ERROR 10:
 b"Pointer 'hObject' is NULL in 'GDALGetDescription'.\n"
 }}}

 The reason is that if passed a string, the string is first treated as a
 potential filename which GDAL tries to open and fails ("no such file").
 Only then it is tried to open the string as WKT/GeoJSON etc. Older Django
 versions did not emit these errors. However, in commit 6f44f714c9 a check
 in django/contrib/gis/gdal/raster/source.py:69 whether the file exists was
 removed.

 Silencing all errors from django.contrib.gis is not really a feasable
 workaround, as it would mean silcencing interesting GIS errors too.

 According to https://docs.djangoproject.com/en/2.2/ref/contrib/gis/db-api
 /#geometry-lookups passing WKT strings is allowed, but there's no mention
 of being able to pass a filename as parameter.

 It's a bit unexpected that Django first tries to open a file before it
 checks whether the passed string is valid WKT/GeoJSON, and that using WKT
 results in error messages. Or am I misunderstanding the documentation and
 calling the API wrongly?

 Relevant parts of example source:

 {{{
 models.py:

 class Area(models.Model):
     area = models.PolygonField()

 settings.py:

 LOGGING = {
     'version': 1,
     'handlers': {
         'console': {
             'level': 'INFO',
             'class': 'logging.StreamHandler',
         },
     },
     'root': {
         'handlers': ['console'],
         'level': 'INFO',
     }
 }

 main.py:

 from app.models import Area
 Area.objects.filter(area__intersects='POLYGON ((1 1, 1 0, 0 0, 0 1, 1
 1))')
 }}}

-- 
Ticket URL: <https://code.djangoproject.com/ticket/31162>
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 view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/049.618494632e9eed8f642e233b11000108%40djangoproject.com.

Reply via email to