django-gisserver 1.4.1__py3-none-any.whl → 2.0__py3-none-any.whl

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.
Files changed (73) hide show
  1. {django_gisserver-1.4.1.dist-info → django_gisserver-2.0.dist-info}/METADATA +23 -13
  2. django_gisserver-2.0.dist-info/RECORD +66 -0
  3. {django_gisserver-1.4.1.dist-info → django_gisserver-2.0.dist-info}/WHEEL +1 -1
  4. gisserver/__init__.py +1 -1
  5. gisserver/compat.py +23 -0
  6. gisserver/conf.py +7 -0
  7. gisserver/db.py +63 -60
  8. gisserver/exceptions.py +47 -9
  9. gisserver/extensions/__init__.py +4 -0
  10. gisserver/{parsers/fes20 → extensions}/functions.py +11 -5
  11. gisserver/extensions/queries.py +261 -0
  12. gisserver/features.py +267 -240
  13. gisserver/geometries.py +34 -39
  14. gisserver/management/__init__.py +0 -0
  15. gisserver/management/commands/__init__.py +0 -0
  16. gisserver/management/commands/loadgeojson.py +291 -0
  17. gisserver/operations/base.py +129 -305
  18. gisserver/operations/wfs20.py +428 -336
  19. gisserver/output/__init__.py +10 -48
  20. gisserver/output/base.py +198 -143
  21. gisserver/output/csv.py +81 -85
  22. gisserver/output/geojson.py +63 -72
  23. gisserver/output/gml32.py +310 -281
  24. gisserver/output/iters.py +207 -0
  25. gisserver/output/results.py +71 -30
  26. gisserver/output/stored.py +143 -0
  27. gisserver/output/utils.py +75 -154
  28. gisserver/output/xmlschema.py +86 -47
  29. gisserver/parsers/__init__.py +10 -10
  30. gisserver/parsers/ast.py +320 -0
  31. gisserver/parsers/fes20/__init__.py +15 -11
  32. gisserver/parsers/fes20/expressions.py +89 -50
  33. gisserver/parsers/fes20/filters.py +111 -43
  34. gisserver/parsers/fes20/identifiers.py +44 -26
  35. gisserver/parsers/fes20/lookups.py +144 -0
  36. gisserver/parsers/fes20/operators.py +336 -128
  37. gisserver/parsers/fes20/sorting.py +107 -34
  38. gisserver/parsers/gml/__init__.py +12 -11
  39. gisserver/parsers/gml/base.py +6 -3
  40. gisserver/parsers/gml/geometries.py +69 -35
  41. gisserver/parsers/ows/__init__.py +25 -0
  42. gisserver/parsers/ows/kvp.py +190 -0
  43. gisserver/parsers/ows/requests.py +158 -0
  44. gisserver/parsers/query.py +175 -0
  45. gisserver/parsers/values.py +26 -0
  46. gisserver/parsers/wfs20/__init__.py +37 -0
  47. gisserver/parsers/wfs20/adhoc.py +245 -0
  48. gisserver/parsers/wfs20/base.py +143 -0
  49. gisserver/parsers/wfs20/projection.py +103 -0
  50. gisserver/parsers/wfs20/requests.py +482 -0
  51. gisserver/parsers/wfs20/stored.py +192 -0
  52. gisserver/parsers/xml.py +249 -0
  53. gisserver/projection.py +357 -0
  54. gisserver/static/gisserver/index.css +12 -1
  55. gisserver/templates/gisserver/index.html +1 -1
  56. gisserver/templates/gisserver/service_description.html +2 -2
  57. gisserver/templates/gisserver/wfs/2.0.0/get_capabilities.xml +11 -11
  58. gisserver/templates/gisserver/wfs/feature_field.html +2 -2
  59. gisserver/templatetags/gisserver_tags.py +20 -0
  60. gisserver/types.py +375 -258
  61. gisserver/views.py +206 -75
  62. django_gisserver-1.4.1.dist-info/RECORD +0 -53
  63. gisserver/parsers/base.py +0 -149
  64. gisserver/parsers/fes20/query.py +0 -275
  65. gisserver/parsers/tags.py +0 -102
  66. gisserver/queries/__init__.py +0 -34
  67. gisserver/queries/adhoc.py +0 -181
  68. gisserver/queries/base.py +0 -146
  69. gisserver/queries/stored.py +0 -205
  70. gisserver/templates/gisserver/wfs/2.0.0/describe_stored_queries.xml +0 -20
  71. gisserver/templates/gisserver/wfs/2.0.0/list_stored_queries.xml +0 -14
  72. {django_gisserver-1.4.1.dist-info → django_gisserver-2.0.dist-info}/LICENSE +0 -0
  73. {django_gisserver-1.4.1.dist-info → django_gisserver-2.0.dist-info}/top_level.txt +0 -0
@@ -11,8 +11,8 @@
11
11
  xmlns:xlink="http://www.w3.org/1999/xlink"
12
12
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
13
13
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
14
- xmlns:fes="http://www.opengis.net/fes/2.0"
15
- xmlns:app="{{ app_xml_namespace }}"
14
+ xmlns:fes="http://www.opengis.net/fes/2.0"{% for xml_namespace, prefix in xml_namespaces.items %}
15
+ xmlns:{{ prefix }}="{{ xml_namespace }}"{% endfor %}
16
16
  xsi:schemaLocation="http://www.opengis.net/wfs/2.0 http://schemas.opengis.net/wfs/2.0/wfs.xsd">
17
17
 
18
18
  <ows:ServiceIdentification>
@@ -59,22 +59,22 @@
59
59
  </ows:ServiceProvider>
60
60
 
61
61
  <ows:OperationsMetadata>
62
- {% for name, operation in accept_operations.items %}
62
+ {% for name, parameters in accept_operations.items %}
63
63
  <ows:Operation name="{{ name }}">
64
64
  <ows:DCP>
65
65
  <ows:HTTP>
66
66
  <ows:Get xlink:type="simple" xlink:href="{{ server_url }}"/>
67
- {# <ows:Post xlink:type="simple" xlink:href="{{ server_url }}"/> #}
67
+ <ows:Post xlink:type="simple" xlink:href="{{ server_url }}"/>
68
68
  </ows:HTTP>
69
69
  </ows:DCP>
70
- {% for parameter in operation.get_parameters %}{% if parameter.in_capabilities and parameter.allowed_values %}
70
+ {% for parameter in parameters %}
71
71
  <ows:Parameter name="{{ parameter.name }}">
72
72
  <ows:AllowedValues>
73
73
  {% for output in parameter.allowed_values %}
74
74
  <ows:Value>{{ output }}</ows:Value>
75
75
  {% endfor %}
76
76
  </ows:AllowedValues>
77
- </ows:Parameter>{% endif %}{% endfor %}
77
+ </ows:Parameter>{% endfor %}
78
78
  </ows:Operation>
79
79
  {% endfor %}
80
80
  {% for name, value in service_constraints.items %}
@@ -89,7 +89,7 @@
89
89
  <FeatureTypeList>
90
90
  {% for feature_type in feature_types %}
91
91
  <FeatureType>
92
- <Name>{{ feature_type.xml_name }}</Name>
92
+ <Name>{% feature_qname feature_type %}</Name>
93
93
  <Title>{{ feature_type.title }}</Title>{% if feature_type.abstract %}
94
94
  <Abstract>{{ feature_type.abstract }}</Abstract>{% endif %}
95
95
  {% if feature_type.keywords %}<ows:Keywords>{% for keyword in feature_type.keywords %}
@@ -97,8 +97,8 @@
97
97
  </ows:Keywords>{% endif %}
98
98
  <DefaultCRS>{{ feature_type.crs }}</DefaultCRS>{% for crs in feature_type.other_crs %}
99
99
  <OtherCRS>{{ crs }}</OtherCRS>{% endfor %}
100
- <OutputFormats>{% for output in feature_output_formats %}
101
- <Format>{{ output }}</Format>{% endfor %}
100
+ <OutputFormats>{% for output in feature_output_formats %}{% if output.in_capabilities %}
101
+ <Format>{{ output }}</Format>{% endif %}{% endfor %}
102
102
  </OutputFormats>
103
103
  {% if BOUNDING_BOX %}{% with bbox=feature_type.get_bounding_box %}{% if bbox %}<ows:WGS84BoundingBox dimensions="2">
104
104
  <ows:LowerCorner>{{ bbox.lower_corner|join:" " }}</ows:LowerCorner>
@@ -177,10 +177,10 @@
177
177
  {% endcomment %}{% if function_registry %}
178
178
  <fes:Functions>{% for function in function_registry %}
179
179
  <fes:Function name="{{ function.name }}">
180
- <fes:Returns>{{ function.returns.with_prefix }}</fes:Returns>{% if function.arguments %}
180
+ <fes:Returns>{{ function.returns|to_qname }}</fes:Returns>{% if function.arguments %}
181
181
  <fes:Arguments>{% for name, xs_type in function.arguments.items %}
182
182
  <fes:Argument name="{{ name }}">
183
- <fes:Type>{{ xs_type.with_prefix }}</fes:Type>
183
+ <fes:Type>{{ xs_type|to_qname }}</fes:Type>
184
184
  </fes:Argument>{% endfor %}
185
185
  </fes:Arguments>{% endif %}
186
186
  </fes:Function>{% endfor %}
@@ -1,6 +1,6 @@
1
- <tr{% if level %} class="complex-field-member complex-level-{{ level }}"{% endif %}>
1
+ {% load gisserver_tags %}<tr{% if level %} class="complex-field-member complex-level-{{ level }}"{% endif %}>
2
2
  <th><code>{{ field.name }}</code></th>
3
- <td>{{ field.xsd_element.type }}{% if field.xsd_element.is_many %} <em>(maxOccurs={{ field.xsd_element.max_occurs }})</em>{% endif %}</td>
3
+ <td>{{ field.xsd_element.type|to_qname:xml_namespaces }}{% if field.xsd_element.is_many %} <em>(maxOccurs={{ field.xsd_element.max_occurs }})</em>{% endif %}</td>
4
4
  <td>{{ field.abstract|default:'' }}</td>
5
5
  </tr>
6
6
  {% if field.xsd_element.type.is_complex_type and field.fields %}
@@ -1,10 +1,30 @@
1
+ from __future__ import annotations
2
+
1
3
  from urllib.parse import urljoin
2
4
 
3
5
  from django.template import Library
4
6
 
7
+ from gisserver.features import FeatureType
8
+ from gisserver.output import to_qname
9
+ from gisserver.types import XsdAnyType, XsdNode
10
+
5
11
  register = Library()
6
12
 
7
13
 
8
14
  @register.filter(name="urljoin")
9
15
  def urljoin_(fragment, server_url):
10
16
  return urljoin(server_url, fragment)
17
+
18
+
19
+ @register.filter(name="to_qname")
20
+ def _to_qname(xsd_type: XsdNode | XsdAnyType, xml_namespaces=None):
21
+ """Translate a full XML name to a shortened name, using common prefixes.."""
22
+ return to_qname(xsd_type.namespace, xsd_type.name, xml_namespaces or {})
23
+
24
+
25
+ @register.simple_tag(name="feature_qname", takes_context=True)
26
+ def feature_qname(context, feature_type: FeatureType, xml_namespaces=None):
27
+ """Translate a full XML name to a shortened name."""
28
+ if xml_namespaces is None:
29
+ xml_namespaces = context["xml_namespaces"]
30
+ return to_qname(feature_type.xml_namespace, feature_type.name, xml_namespaces)