django-gisserver 1.5.0__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 (74) hide show
  1. {django_gisserver-1.5.0.dist-info → django_gisserver-2.0.dist-info}/METADATA +14 -4
  2. django_gisserver-2.0.dist-info/RECORD +66 -0
  3. {django_gisserver-1.5.0.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 +56 -47
  8. gisserver/exceptions.py +26 -2
  9. gisserver/extensions/__init__.py +4 -0
  10. gisserver/{parsers/fes20 → extensions}/functions.py +10 -4
  11. gisserver/extensions/queries.py +261 -0
  12. gisserver/features.py +220 -156
  13. gisserver/geometries.py +32 -37
  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 +122 -308
  18. gisserver/operations/wfs20.py +423 -337
  19. gisserver/output/__init__.py +9 -48
  20. gisserver/output/base.py +178 -139
  21. gisserver/output/csv.py +65 -74
  22. gisserver/output/geojson.py +34 -35
  23. gisserver/output/gml32.py +254 -246
  24. gisserver/output/iters.py +207 -0
  25. gisserver/output/results.py +52 -26
  26. gisserver/output/stored.py +143 -0
  27. gisserver/output/utils.py +75 -170
  28. gisserver/output/xmlschema.py +85 -46
  29. gisserver/parsers/__init__.py +10 -10
  30. gisserver/parsers/ast.py +320 -0
  31. gisserver/parsers/fes20/__init__.py +13 -27
  32. gisserver/parsers/fes20/expressions.py +82 -38
  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 +331 -127
  37. gisserver/parsers/fes20/sorting.py +104 -33
  38. gisserver/parsers/gml/__init__.py +12 -11
  39. gisserver/parsers/gml/base.py +5 -2
  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 +9 -9
  58. gisserver/templates/gisserver/wfs/feature_field.html +2 -2
  59. gisserver/templatetags/gisserver_tags.py +20 -0
  60. gisserver/types.py +322 -259
  61. gisserver/views.py +198 -56
  62. django_gisserver-1.5.0.dist-info/RECORD +0 -54
  63. gisserver/parsers/base.py +0 -149
  64. gisserver/parsers/fes20/query.py +0 -285
  65. gisserver/parsers/tags.py +0 -102
  66. gisserver/queries/__init__.py +0 -37
  67. gisserver/queries/adhoc.py +0 -185
  68. gisserver/queries/base.py +0 -186
  69. gisserver/queries/projection.py +0 -240
  70. gisserver/queries/stored.py +0 -206
  71. gisserver/templates/gisserver/wfs/2.0.0/describe_stored_queries.xml +0 -20
  72. gisserver/templates/gisserver/wfs/2.0.0/list_stored_queries.xml +0 -14
  73. {django_gisserver-1.5.0.dist-info → django_gisserver-2.0.dist-info}/LICENSE +0 -0
  74. {django_gisserver-1.5.0.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 %}
@@ -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)