django-gisserver 1.2.6__tar.gz → 1.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/CHANGES.md +15 -0
- {django-gisserver-1.2.6/django_gisserver.egg-info → django-gisserver-1.3.0}/PKG-INFO +1 -1
- {django-gisserver-1.2.6 → django-gisserver-1.3.0/django_gisserver.egg-info}/PKG-INFO +1 -1
- django-gisserver-1.3.0/gisserver/__init__.py +1 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/operations/base.py +4 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/operations/wfs20.py +21 -4
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/output/csv.py +2 -3
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/output/geojson.py +2 -3
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/output/gml32.py +2 -3
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/output/results.py +4 -2
- django-gisserver-1.2.6/gisserver/__init__.py +0 -1
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/LICENSE +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/MANIFEST.in +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/README.md +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/django_gisserver.egg-info/SOURCES.txt +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/django_gisserver.egg-info/dependency_links.txt +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/django_gisserver.egg-info/not-zip-safe +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/django_gisserver.egg-info/requires.txt +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/django_gisserver.egg-info/top_level.txt +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/conf.py +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/db.py +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/exceptions.py +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/features.py +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/geometries.py +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/operations/__init__.py +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/output/__init__.py +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/output/base.py +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/output/buffer.py +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/output/utils.py +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/output/xmlschema.py +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/parsers/__init__.py +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/parsers/base.py +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/parsers/fes20/__init__.py +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/parsers/fes20/expressions.py +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/parsers/fes20/filters.py +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/parsers/fes20/functions.py +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/parsers/fes20/identifiers.py +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/parsers/fes20/operators.py +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/parsers/fes20/query.py +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/parsers/fes20/sorting.py +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/parsers/gml/__init__.py +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/parsers/gml/base.py +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/parsers/gml/geometries.py +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/parsers/tags.py +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/parsers/values.py +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/queries/__init__.py +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/queries/adhoc.py +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/queries/base.py +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/queries/stored.py +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/static/gisserver/index.css +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/templates/gisserver/index.html +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/templates/gisserver/service_description.html +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/templates/gisserver/wfs/2.0.0/describe_stored_queries.xml +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/templates/gisserver/wfs/2.0.0/get_capabilities.xml +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/templates/gisserver/wfs/2.0.0/list_stored_queries.xml +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/templates/gisserver/wfs/feature_field.html +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/templates/gisserver/wfs/feature_type.html +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/templatetags/__init__.py +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/templatetags/gisserver_tags.py +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/types.py +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/gisserver/views.py +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/setup.cfg +0 -0
- {django-gisserver-1.2.6 → django-gisserver-1.3.0}/setup.py +0 -0
|
@@ -1,3 +1,18 @@
|
|
|
1
|
+
# 2023-06-08 (1.3.0)
|
|
2
|
+
|
|
3
|
+
## Updates
|
|
4
|
+
* Django 5 support added.
|
|
5
|
+
|
|
6
|
+
## Contributors
|
|
7
|
+
We would like to thank the following contributors
|
|
8
|
+
for their work on this release.
|
|
9
|
+
|
|
10
|
+
- [tomdtp](https://github.com/tomdtp)
|
|
11
|
+
|
|
12
|
+
# 2023-06-08 (1.2.7)
|
|
13
|
+
|
|
14
|
+
* WFS endpoints now accept a GML version number in their OUTPUTFORMAT.
|
|
15
|
+
|
|
1
16
|
# 2023-06-07 (1.2.6)
|
|
2
17
|
|
|
3
18
|
* Workaround for FME doing a DescribeFeatureType with the wrong outputformat.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "1.3.0" # follows PEP440
|
|
@@ -158,6 +158,10 @@ class OutputFormat:
|
|
|
158
158
|
|
|
159
159
|
def matches(self, value):
|
|
160
160
|
"""Test whether the 'value' is matched by this object."""
|
|
161
|
+
if self.content_type == "application/gml+xml":
|
|
162
|
+
# Allow "application/gml+xml; version=3.2" as sent by FME.
|
|
163
|
+
# TODO rewrite this matching code in a clean way.
|
|
164
|
+
value = value.split("; ", 1)[0]
|
|
161
165
|
return self.content_type == value or self.subtype == value
|
|
162
166
|
|
|
163
167
|
@property
|
|
@@ -45,7 +45,15 @@ RE_SAFE_FILENAME = re.compile(r"\A[A-Za-z0-9]+[A-Za-z0-9.]*") # no dot at the s
|
|
|
45
45
|
class GetCapabilities(WFSMethod):
|
|
46
46
|
""" "This operation returns map features, and available operations this WFS server supports."""
|
|
47
47
|
|
|
48
|
-
output_formats = [
|
|
48
|
+
output_formats = [
|
|
49
|
+
OutputFormat(
|
|
50
|
+
"application/gml+xml",
|
|
51
|
+
version="3.2",
|
|
52
|
+
renderer_class=output.gml32_value_renderer,
|
|
53
|
+
title="GML",
|
|
54
|
+
),
|
|
55
|
+
OutputFormat("text/xml"),
|
|
56
|
+
]
|
|
49
57
|
xml_template_name = "get_capabilities.xml"
|
|
50
58
|
|
|
51
59
|
def get_parameters(self):
|
|
@@ -144,8 +152,11 @@ class DescribeFeatureType(WFSTypeNamesMethod):
|
|
|
144
152
|
# At least one version of FME seems to sends a DescribeFeatureType
|
|
145
153
|
# request with this output format. Do what mapserver does and just
|
|
146
154
|
# send it XML Schema.
|
|
147
|
-
OutputFormat(
|
|
148
|
-
|
|
155
|
+
OutputFormat(
|
|
156
|
+
"application/gml+xml",
|
|
157
|
+
version="3.2",
|
|
158
|
+
renderer_class=output.XMLSchemaRenderer,
|
|
159
|
+
)
|
|
149
160
|
# OutputFormat("text/xml", subtype="gml/3.1.1"),
|
|
150
161
|
]
|
|
151
162
|
|
|
@@ -441,7 +452,7 @@ class GetFeature(BaseWFSGetDataMethod):
|
|
|
441
452
|
OutputFormat(
|
|
442
453
|
# Alias needed to make ESRI ArcGIS online accept the WFS.
|
|
443
454
|
# It does not recognize the "subtype" as an alias.
|
|
444
|
-
"
|
|
455
|
+
"geojson",
|
|
445
456
|
renderer_class=output.geojson_renderer,
|
|
446
457
|
),
|
|
447
458
|
OutputFormat(
|
|
@@ -462,6 +473,12 @@ class GetPropertyValue(BaseWFSGetDataMethod):
|
|
|
462
473
|
"""
|
|
463
474
|
|
|
464
475
|
output_formats = [
|
|
476
|
+
OutputFormat(
|
|
477
|
+
"application/gml+xml",
|
|
478
|
+
version="3.2",
|
|
479
|
+
renderer_class=output.gml32_value_renderer,
|
|
480
|
+
title="GML",
|
|
481
|
+
),
|
|
465
482
|
OutputFormat(
|
|
466
483
|
"text/xml", subtype="gml/3.2", renderer_class=output.gml32_value_renderer
|
|
467
484
|
),
|
|
@@ -2,11 +2,10 @@
|
|
|
2
2
|
from __future__ import annotations
|
|
3
3
|
|
|
4
4
|
import csv
|
|
5
|
-
from datetime import datetime
|
|
5
|
+
from datetime import datetime, timezone
|
|
6
6
|
|
|
7
7
|
from django.conf import settings
|
|
8
8
|
from django.db import models
|
|
9
|
-
from django.utils.timezone import utc
|
|
10
9
|
|
|
11
10
|
from gisserver import conf
|
|
12
11
|
from gisserver.db import (
|
|
@@ -137,7 +136,7 @@ class CSVRenderer(OutputRenderer):
|
|
|
137
136
|
# Array field
|
|
138
137
|
append(",".join(map(str, value)))
|
|
139
138
|
elif isinstance(value, datetime):
|
|
140
|
-
append(str(value.astimezone(utc)))
|
|
139
|
+
append(str(value.astimezone(timezone.utc)))
|
|
141
140
|
else:
|
|
142
141
|
append(value)
|
|
143
142
|
return values
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"""Output rendering logic for GeoJSON."""
|
|
2
|
-
from datetime import datetime
|
|
2
|
+
from datetime import datetime, timezone
|
|
3
3
|
from decimal import Decimal
|
|
4
4
|
from typing import cast
|
|
5
5
|
|
|
@@ -8,7 +8,6 @@ from django.conf import settings
|
|
|
8
8
|
from django.contrib.gis.db.models.functions import AsGeoJSON
|
|
9
9
|
from django.db import models
|
|
10
10
|
from django.utils.functional import Promise
|
|
11
|
-
from django.utils.timezone import utc
|
|
12
11
|
|
|
13
12
|
from gisserver import conf
|
|
14
13
|
from gisserver.db import get_db_geometry_target
|
|
@@ -147,7 +146,7 @@ class GeoJsonRenderer(OutputRenderer):
|
|
|
147
146
|
|
|
148
147
|
def _format_geojson_value(self, value):
|
|
149
148
|
if isinstance(value, datetime):
|
|
150
|
-
return value.astimezone(utc)
|
|
149
|
+
return value.astimezone(timezone.utc)
|
|
151
150
|
elif isinstance(value, models.Model):
|
|
152
151
|
# ForeignKey, not defined as complex type.
|
|
153
152
|
return str(value)
|
|
@@ -7,14 +7,13 @@ from __future__ import annotations
|
|
|
7
7
|
|
|
8
8
|
import itertools
|
|
9
9
|
import re
|
|
10
|
-
from datetime import date, datetime, time
|
|
10
|
+
from datetime import date, datetime, time, timezone
|
|
11
11
|
from html import escape
|
|
12
12
|
from typing import cast
|
|
13
13
|
|
|
14
14
|
from django.contrib.gis import geos
|
|
15
15
|
from django.db import models
|
|
16
16
|
from django.http import HttpResponse
|
|
17
|
-
from django.utils.timezone import utc
|
|
18
17
|
|
|
19
18
|
from gisserver.db import (
|
|
20
19
|
AsGML,
|
|
@@ -306,7 +305,7 @@ class GML32Renderer(OutputRenderer):
|
|
|
306
305
|
# Expanded foreign relation / dictionary
|
|
307
306
|
return self.render_xml_complex_type(feature_type, xsd_element, value)
|
|
308
307
|
elif isinstance(value, datetime):
|
|
309
|
-
value = value.astimezone(utc).isoformat()
|
|
308
|
+
value = value.astimezone(timezone.utc).isoformat()
|
|
310
309
|
elif isinstance(value, (date, time)):
|
|
311
310
|
value = value.isoformat()
|
|
312
311
|
elif isinstance(value, bool):
|
|
@@ -13,7 +13,9 @@ from typing import Iterable
|
|
|
13
13
|
import django
|
|
14
14
|
from django.db import models
|
|
15
15
|
from django.utils.functional import cached_property
|
|
16
|
-
from django.utils.timezone import now
|
|
16
|
+
from django.utils.timezone import now
|
|
17
|
+
|
|
18
|
+
from datetime import timezone
|
|
17
19
|
|
|
18
20
|
from gisserver.features import FeatureType
|
|
19
21
|
from gisserver.geometries import BoundingBox
|
|
@@ -218,7 +220,7 @@ class FeatureCollection:
|
|
|
218
220
|
self.next = next
|
|
219
221
|
self.previous = previous
|
|
220
222
|
self.date = now()
|
|
221
|
-
self.timestamp = self.date.astimezone(utc).isoformat()
|
|
223
|
+
self.timestamp = self.date.astimezone(timezone.utc).isoformat()
|
|
222
224
|
|
|
223
225
|
def get_bounding_box(self) -> BoundingBox:
|
|
224
226
|
"""Determine bounding box of all items."""
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "1.2.6" # follows PEP440
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django-gisserver-1.2.6 → django-gisserver-1.3.0}/django_gisserver.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|