Skip to content

Commit c15694b

Browse files
committed
fix polygon initialization, use serialized type for geom_class
1 parent 1a8fa24 commit c15694b

File tree

3 files changed

+17
-18
lines changed

3 files changed

+17
-18
lines changed

django_mongodb_backend_gis/adapter.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,5 @@ def __init__(self, obj, geography=False):
88
"""
99
self.data = {
1010
"type": obj.__class__.__name__,
11-
"coordinates": obj.coords,
11+
"coordinates": obj.coords[0] if obj.__class__.__name__ == "Polygon" else obj.coords,
1212
}

django_mongodb_backend_gis/features.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,26 +13,26 @@ def django_test_expected_failures(self):
1313
expected_failures = super().django_test_expected_failures
1414
expected_failures.update(
1515
{
16-
# SRIDs aren't supported.
17-
"gis_tests.geogapp.tests.GeographyTest.test05_geography_layermapping",
16+
# SRIDs aren't populated: AssertionError: 4326 != None
17+
# self.assertEqual(4326, nullcity.point.srid)
1818
"gis_tests.geoapp.tests.GeoModelTest.test_proxy",
1919
# GEOSException: Calling transform() with no SRID set is not supported
2020
"gis_tests.relatedapp.tests.RelatedGeoModelTest.test06_f_expressions",
2121
# 'Adapter' object has no attribute 'srid'
2222
"gis_tests.geoapp.test_expressions.GeoExpressionsTests.test_geometry_value_annotation",
2323
# Object of type ObjectId is not JSON serializable
2424
"gis_tests.geoapp.test_serializers.GeoJSONSerializerTests.test_fields_option",
25-
# LinearRing requires at least 4 points, got 1.
26-
"gis_tests.geoapp.test_serializers.GeoJSONSerializerTests.test_geometry_field_option",
27-
"gis_tests.geoapp.tests.GeoLookupTest.test_null_geometries",
2825
# source and target must be of type SpatialReference
26+
"gis_tests.geoapp.test_serializers.GeoJSONSerializerTests.test_geometry_field_option",
2927
"gis_tests.geoapp.test_serializers.GeoJSONSerializerTests.test_id_field_option",
3028
"gis_tests.geoapp.test_serializers.GeoJSONSerializerTests.test_serialization_base",
3129
"gis_tests.geoapp.test_serializers.GeoJSONSerializerTests.test_srid_option",
32-
# GeometryField is not supported (the type of Geometry isn't
33-
# stored so that it can be initialized by the database converter).
34-
# Error in database converter: issubclass() arg 1 must be a class
30+
# GeometryCollection not supported
3531
"gis_tests.geoapp.tests.GeoModelTest.test_geometryfield",
32+
"gis_tests.geogapp.tests.GeographyTest.test05_geography_layermapping",
33+
"gis_tests.layermap.tests.LayerMapTest.test_layermap_unique_multigeometry_fk",
34+
"gis_tests.layermap.tests.LayerMapTest.test_null_geom_with_unique",
35+
"gis_tests.layermap.tests.LayerMapTest.test_test_fid_range_step",
3636
# KeyError: 'within' connection.ops.gis_operators[self.lookup_name]
3737
"gis_tests.geoapp.tests.GeoModelTest.test_gis_query_as_string",
3838
# Point object != Point object

django_mongodb_backend_gis/operations.py

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -68,18 +68,17 @@ def geo_db_type(self, f):
6868
return "object"
6969

7070
def get_geometry_converter(self, expression):
71-
geom_class = expression.output_field.geom_class
72-
7371
def converter(value, expression, connection): # noqa: ARG001
7472
if value is None:
7573
return None
74+
geom_class = getattr(geos, value["type"])
7675
if issubclass(geom_class, geos.GeometryCollection):
77-
init_val = [
78-
geom_class._allowed(value["coordinates"][x][0])
79-
for x in range(len(value["coordinates"]))
80-
]
81-
else:
82-
init_val = value["coordinates"]
83-
return geom_class(init_val)
76+
from django.db import NotSupportedError
77+
raise NotSupportedError("GeometryCollection not supported")
78+
# init_val = [
79+
# geom_class._allowed(value["coordinates"][x][0])
80+
# for x in range(len(value["coordinates"]))
81+
# ]
82+
return geom_class(value["coordinates"])
8483

8584
return converter

0 commit comments

Comments
 (0)