geoservercloud 0.8.12.dev5__tar.gz → 0.8.13.dev1__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.
Files changed (96) hide show
  1. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/PKG-INFO +1 -1
  2. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/tests/test_ogcapi_features.py +117 -0
  3. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoservercloud/services/restclient.py +21 -0
  4. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/pyproject.toml +1 -1
  5. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/LICENSE +0 -0
  6. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/README.md +0 -0
  7. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/.gitignore +0 -0
  8. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/README.md +0 -0
  9. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/__init__.py +0 -0
  10. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/ci.config.yaml +0 -0
  11. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/cli.py +0 -0
  12. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/compose/ci.compose.yaml +0 -0
  13. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/compose/example.compose.yaml +0 -0
  14. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/compose/geodatabase/001_create_schemas.sql +0 -0
  15. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/config.py +0 -0
  16. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/data/sampledata.tgz +0 -0
  17. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/example.config.yaml +0 -0
  18. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/tests/__init__.py +0 -0
  19. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/tests/conftest.py +0 -0
  20. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/tests/resources/__init__.py +0 -0
  21. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/tests/resources/i18n/__init__.py +0 -0
  22. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/default_locale/default_value/language_None_expected.png +0 -0
  23. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/default_locale/default_value/language__expected.png +0 -0
  24. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/default_locale/default_value/language_de_expected.png +0 -0
  25. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/default_locale/default_value/language_fr_expected.png +0 -0
  26. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/default_locale/default_value/language_it_expected.png +0 -0
  27. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/default_locale/no_default_value/language_None_expected.png +0 -0
  28. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/default_locale/no_default_value/language__expected.png +0 -0
  29. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/default_locale/no_default_value/language_it_expected.png +0 -0
  30. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/no_default_locale/default_value/language_None_expected.png +0 -0
  31. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/no_default_locale/default_value/language__expected.png +0 -0
  32. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/no_default_locale/default_value/language_de_expected.png +0 -0
  33. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/no_default_locale/default_value/language_fr_expected.png +0 -0
  34. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/no_default_locale/default_value/language_it_expected.png +0 -0
  35. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/no_default_locale/no_default_value/language_None_expected.png +0 -0
  36. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/no_default_locale/no_default_value/language__expected.png +0 -0
  37. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/no_default_locale/no_default_value/language_it_expected.png +0 -0
  38. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/tests/resources/i18n/localized_labels.sld +0 -0
  39. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/tests/resources/i18n/localized_no_default.sld +0 -0
  40. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/tests/resources/i18n/localized_with_default.sld +0 -0
  41. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/tests/resources/wfs/__init__.py +0 -0
  42. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/tests/resources/wfs/wfs_delete_payload.xml +0 -0
  43. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/tests/resources/wfs/wfs_insert_payload.xml +0 -0
  44. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/tests/resources/wms/__init__.py +0 -0
  45. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/tests/resources/wms/getmap_expected.png +0 -0
  46. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/tests/test_cascaded_stores.py +0 -0
  47. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/tests/test_cog.py +0 -0
  48. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/tests/test_datastore.py +0 -0
  49. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/tests/test_get_version.py +0 -0
  50. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/tests/test_gwc.py +0 -0
  51. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/tests/test_i18n.py +0 -0
  52. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/tests/test_imagemosaic.py +0 -0
  53. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/tests/test_imagemosaic_cog.py +0 -0
  54. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/tests/test_installed_fonts.py +0 -0
  55. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/tests/test_rest_resource.py +0 -0
  56. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/tests/test_s3_credentials_chain.py +0 -0
  57. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/tests/test_wfs.py +0 -0
  58. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/tests/test_wms.py +0 -0
  59. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/tests/test_workspace.py +0 -0
  60. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoserver_acceptance_tests/tests/utils.py +0 -0
  61. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoservercloud/__init__.py +0 -0
  62. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoservercloud/geoservercloud.py +0 -0
  63. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoservercloud/geoservercloudsync.py +0 -0
  64. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoservercloud/gridsets/2056.xml +0 -0
  65. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoservercloud/gridsets/21781.xml +0 -0
  66. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoservercloud/gridsets/3857.xml +0 -0
  67. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoservercloud/models/__init__.py +0 -0
  68. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoservercloud/models/abstractlayer.py +0 -0
  69. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoservercloud/models/common.py +0 -0
  70. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoservercloud/models/coverage.py +0 -0
  71. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoservercloud/models/coverages.py +0 -0
  72. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoservercloud/models/coveragestore.py +0 -0
  73. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoservercloud/models/datastore.py +0 -0
  74. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoservercloud/models/datastores.py +0 -0
  75. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoservercloud/models/featuretype.py +0 -0
  76. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoservercloud/models/featuretypes.py +0 -0
  77. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoservercloud/models/gwclayer.py +0 -0
  78. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoservercloud/models/layer.py +0 -0
  79. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoservercloud/models/layergroup.py +0 -0
  80. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoservercloud/models/layergroups.py +0 -0
  81. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoservercloud/models/resourcedirectory.py +0 -0
  82. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoservercloud/models/s3blobstore.py +0 -0
  83. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoservercloud/models/style.py +0 -0
  84. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoservercloud/models/styles.py +0 -0
  85. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoservercloud/models/wmslayer.py +0 -0
  86. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoservercloud/models/wmssettings.py +0 -0
  87. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoservercloud/models/wmsstore.py +0 -0
  88. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoservercloud/models/wmtsstore.py +0 -0
  89. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoservercloud/models/workspace.py +0 -0
  90. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoservercloud/models/workspaces.py +0 -0
  91. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoservercloud/services/__init__.py +0 -0
  92. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoservercloud/services/owsservice.py +0 -0
  93. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoservercloud/services/restlogger.py +0 -0
  94. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoservercloud/services/restservice.py +0 -0
  95. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoservercloud/templates.py +0 -0
  96. {geoservercloud-0.8.12.dev5 → geoservercloud-0.8.13.dev1}/geoservercloud/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: geoservercloud
3
- Version: 0.8.12.dev5
3
+ Version: 0.8.13.dev1
4
4
  Summary: Lightweight Python client to interact with GeoServer Cloud REST API, GeoServer ACL and OGC services
5
5
  License: BSD-2-Clause
6
6
  Author: Camptocamp
@@ -14,6 +14,7 @@ Tests verify compliance with OGC API Features Core specification:
14
14
 
15
15
  import json
16
16
  from collections.abc import Generator
17
+ from xml.etree import ElementTree
17
18
 
18
19
  import pytest
19
20
  from sqlalchemy import Connection
@@ -21,6 +22,37 @@ from sqlalchemy.sql import text
21
22
 
22
23
  from geoservercloud import GeoServerCloud
23
24
 
25
+ WFS_SETTINGS_PATH = "/rest/services/wfs/settings"
26
+
27
+ PROPERTY_SELECTION_CONFORMANCE = (
28
+ "http://www.opengis.net/spec/ogcapi-features-6/1.0/conf/properties-features"
29
+ )
30
+
31
+ XML_HEADERS = {"Content-Type": "application/xml"}
32
+
33
+ CONFORMANCE_SETTINGS = """
34
+ <wfs>
35
+ <metadata>
36
+ <entry key="ogcapiFeatures">
37
+ <ogcapiFeatures>
38
+ <core>true</core>
39
+ <propertySelection>true</propertySelection>
40
+ </ogcapiFeatures>
41
+ </entry>
42
+ </metadata>
43
+ </wfs>
44
+ """
45
+
46
+ DEFAULT_CONFORMANCE_SETTINGS = """
47
+ <wfs>
48
+ <metadata>
49
+ <entry key="ogcapiFeatures">
50
+ <ogcapiFeatures/>
51
+ </entry>
52
+ </metadata>
53
+ </wfs>
54
+ """
55
+
24
56
 
25
57
  @pytest.fixture()
26
58
  def ogcapi_workspace() -> str:
@@ -399,3 +431,88 @@ def test_ogcapi_conformance(ogcapi_workspace: str, geoserver_ogcapi_workspace):
399
431
  assert any(
400
432
  "ogcapi-features" in cc or "features/core" in cc for cc in conformance_classes
401
433
  )
434
+
435
+
436
+ @pytest.fixture()
437
+ def wfs_ogcapi_conformance(geoserver: GeoServerCloud) -> Generator[None, None, None]:
438
+ """Leaves the OGC API Features conformance settings back at their defaults."""
439
+ yield
440
+ geoserver.rest_service.rest_client.put(
441
+ f"{WFS_SETTINGS_PATH}.xml",
442
+ headers=XML_HEADERS,
443
+ data=DEFAULT_CONFORMANCE_SETTINGS,
444
+ )
445
+
446
+
447
+ def read_conformance_settings(geoserver: GeoServerCloud) -> ElementTree.Element:
448
+ """
449
+ Returns the ogcapiFeatures conformance element of the WFS settings, failing if
450
+ the REST API answered with the object rendered as a string instead.
451
+ """
452
+ response = geoserver.rest_service.rest_client.get(f"{WFS_SETTINGS_PATH}.xml")
453
+ assert response.status_code == 200
454
+
455
+ settings = ElementTree.fromstring(response.content)
456
+ entry = settings.find("./metadata/entry[@key='ogcapiFeatures']")
457
+ assert entry is not None, "the ogcapiFeatures metadata entry is missing"
458
+ assert not (entry.text or "").strip(), (
459
+ "the conformance object was stored as a string instead of an object: "
460
+ f"{entry.text!r}"
461
+ )
462
+
463
+ conformance = entry.find("ogcapiFeatures")
464
+ assert conformance is not None, "the ogcapiFeatures metadata entry has no object"
465
+ return conformance
466
+
467
+
468
+ def test_wfs_settings_rest_roundtrip_preserves_ogcapi_conformance(
469
+ geoserver: GeoServerCloud, wfs_ogcapi_conformance: None
470
+ ):
471
+ """
472
+ Reading the WFS settings and writing the same document back must not replace the OGC API Features conformance
473
+ object with the string returned by its toString(), which later breaks the service with a ClassCastException.
474
+
475
+ See https://github.com/geoserver/geoserver-cloud/issues/872
476
+ """
477
+ geoserver.rest_service.rest_client.put(
478
+ f"{WFS_SETTINGS_PATH}.xml", headers=XML_HEADERS, data=CONFORMANCE_SETTINGS
479
+ )
480
+
481
+ conformance = read_conformance_settings(geoserver)
482
+ assert conformance.findtext("core") == "true"
483
+ assert conformance.findtext("propertySelection") == "true"
484
+
485
+ # the round trip from the issue: read the settings and write them back unchanged
486
+ settings = geoserver.rest_service.rest_client.get(f"{WFS_SETTINGS_PATH}.xml")
487
+ geoserver.rest_service.rest_client.put(
488
+ f"{WFS_SETTINGS_PATH}.xml", headers=XML_HEADERS, data=settings.content
489
+ )
490
+
491
+ conformance = read_conformance_settings(geoserver)
492
+ assert conformance.findtext("core") == "true"
493
+ assert conformance.findtext("propertySelection") == "true"
494
+
495
+
496
+ def test_ogcapi_conformance_after_wfs_settings_rest_roundtrip(
497
+ geoserver: GeoServerCloud, wfs_ogcapi_conformance: None
498
+ ):
499
+ """
500
+ The OGC API Features service must still answer after the WFS settings went through a REST round trip.
501
+
502
+ See https://github.com/geoserver/geoserver-cloud/issues/872
503
+ """
504
+ geoserver.rest_service.rest_client.put(
505
+ f"{WFS_SETTINGS_PATH}.xml", headers=XML_HEADERS, data=CONFORMANCE_SETTINGS
506
+ )
507
+ settings = geoserver.rest_service.rest_client.get(f"{WFS_SETTINGS_PATH}.xml")
508
+ geoserver.rest_service.rest_client.put(
509
+ f"{WFS_SETTINGS_PATH}.xml", headers=XML_HEADERS, data=settings.content
510
+ )
511
+
512
+ response = geoserver.rest_service.rest_client.get(
513
+ "/ogc/features/v1/conformance", params={"f": "application/json"}
514
+ )
515
+ assert response.status_code == 200
516
+
517
+ conformance_classes = json.loads(response.content.decode("utf-8"))["conformsTo"]
518
+ assert PROPERTY_SELECTION_CONFORMANCE in conformance_classes
@@ -1,3 +1,4 @@
1
+ import re
1
2
  from typing import Any
2
3
 
3
4
  import requests
@@ -6,6 +7,13 @@ from .restlogger import gs_logger
6
7
 
7
8
  TIMEOUT = 120
8
9
 
10
+ # Depending on the order of the jars in WEB-INF/lib, vanilla GeoServer answers these
11
+ # GWC "not found" errors with 500 instead of 404, keeping GWC's message as the
12
+ # text/plain body.
13
+ GWC_NOT_FOUND_MESSAGE = re.compile(
14
+ r'Unknown layer: .+|Failed to get GridSet\. A GridSet with name ".+" does not exist\.'
15
+ )
16
+
9
17
 
10
18
  class RestClient:
11
19
  """
@@ -46,6 +54,7 @@ class RestClient:
46
54
  full_url,
47
55
  extra={"response": response},
48
56
  )
57
+ self.restore_gwc_not_found_status(response)
49
58
  if response.status_code != 404:
50
59
  response.raise_for_status()
51
60
  return response
@@ -130,10 +139,22 @@ class RestClient:
130
139
  full_url,
131
140
  extra={"response": response},
132
141
  )
142
+ self.restore_gwc_not_found_status(response)
133
143
  if response.status_code != 404:
134
144
  response.raise_for_status()
135
145
  return response
136
146
 
147
+ def restore_gwc_not_found_status(self, response: requests.Response) -> None:
148
+ if response.status_code != 500:
149
+ return
150
+ if not GWC_NOT_FOUND_MESSAGE.fullmatch(response.text.strip()):
151
+ return
152
+ gs_logger.warning(
153
+ "GeoServer answered a GWC not found error with 500, treating it as 404: %s",
154
+ response.url,
155
+ )
156
+ response.status_code = 404
157
+
137
158
  def log_payload(
138
159
  self, method: str, json: dict | None, data: bytes | str | None
139
160
  ) -> None:
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "geoservercloud"
3
- version = "0.8.12.dev5"
3
+ version = "0.8.13.dev1"
4
4
  description = "Lightweight Python client to interact with GeoServer Cloud REST API, GeoServer ACL and OGC services"
5
5
  authors = ["Camptocamp <info@camptocamp.com>"]
6
6
  license = "BSD-2-Clause"