Code

Ticket #13670: 13670.1.patch

File 13670.1.patch, 2.3 KB (added by jpaulett, 3 years ago)

Fix for other backends, move to unittest, & distill test to core example using existing models.

  • django/contrib/gis/db/backends/adapter.py

    diff --git django/contrib/gis/db/backends/adapter.py django/contrib/gis/db/backends/adapter.py
    index 9766ef0..ca77124 100644
    class WKTAdapter(object): 
    88        self.srid = geom.srid 
    99 
    1010    def __eq__(self, other): 
     11        if not isinstance(other, WKTAdapter): 
     12            return False 
    1113        return self.wkt == other.wkt and self.srid == other.srid 
    1214 
    1315    def __str__(self): 
  • django/contrib/gis/db/backends/postgis/adapter.py

    diff --git django/contrib/gis/db/backends/postgis/adapter.py django/contrib/gis/db/backends/postgis/adapter.py
    index 3f8603e..c9b9841 100644
    class PostGISAdapter(object): 
    2121            raise Exception('Error implementing psycopg2 protocol. Is psycopg2 installed?') 
    2222 
    2323    def __eq__(self, other): 
     24        if not isinstance(other, PostGISAdapter): 
     25            return False 
    2426        return (self.ewkb == other.ewkb) and (self.srid == other.srid) 
    2527 
    2628    def __str__(self): 
  • django/contrib/gis/tests/geoapp/test_regress.py

    diff --git django/contrib/gis/tests/geoapp/test_regress.py django/contrib/gis/tests/geoapp/test_regress.py
    index 6b914da..454596e 100644
     
    11import unittest 
    22from django.contrib.gis.tests.utils import no_mysql, no_spatialite 
    33from django.contrib.gis.shortcuts import render_to_kmz 
    4 from models import City 
     4from models import City, State 
    55 
    66class GeoRegressionTests(unittest.TestCase): 
    77 
    class GeoRegressionTests(unittest.TestCase): 
    3535        extent = City.objects.filter(name='Pueblo').extent() 
    3636        for ref_val, val in zip(ref_ext, extent): 
    3737            self.assertAlmostEqual(ref_val, val, 4) 
     38 
     39    def test04_empty_count(self): 
     40        "Testing that PostGISAdapter.__eq__ does check empty strings, see #13670" 
     41        # contrived example, but need a geo lookup paired with an id__in lookup 
     42        pueblo = City.objects.get(name='Pueblo') 
     43        state = State.objects.filter(poly__contains=pueblo.point) 
     44        cities_within_state = City.objects.filter(id__in=state) 
     45 
     46        # .count() should not throw TypeError in __eq__ 
     47        self.assertEqual(cities_within_state.count(), 1)