geoservercloud 0.7.3.dev3__tar.gz → 0.7.4.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.
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/PKG-INFO +11 -1
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/README.md +10 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/config.py +25 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/example.config.yaml +4 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/geoservercloud.py +82 -9
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/geoservercloudsync.py +2 -2
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/datastore.py +3 -3
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/services/restclient.py +15 -0
- geoservercloud-0.7.4.dev1/geoservercloud/services/restlogger.py +5 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/services/restservice.py +6 -23
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/pyproject.toml +1 -1
- geoservercloud-0.7.3.dev3/geoservercloud/services/restlogger.py +0 -12
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/LICENSE +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/.gitignore +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/README.md +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/__init__.py +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/cli.py +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/compose/example.compose.yaml +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/compose/geodatabase/001_create_schemas.sql +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/data/sampledata.tgz +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/__init__.py +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/conftest.py +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/resources/__init__.py +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/resources/i18n/__init__.py +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/default_locale/default_value/language_None_expected.png +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/default_locale/default_value/language__expected.png +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/default_locale/default_value/language_de_expected.png +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/default_locale/default_value/language_fr_expected.png +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/default_locale/default_value/language_it_expected.png +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/default_locale/no_default_value/language_None_expected.png +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/default_locale/no_default_value/language__expected.png +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/default_locale/no_default_value/language_it_expected.png +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/no_default_locale/default_value/language_None_expected.png +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/no_default_locale/default_value/language__expected.png +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/no_default_locale/default_value/language_de_expected.png +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/no_default_locale/default_value/language_fr_expected.png +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/no_default_locale/default_value/language_it_expected.png +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/no_default_locale/no_default_value/language_None_expected.png +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/no_default_locale/no_default_value/language__expected.png +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/no_default_locale/no_default_value/language_it_expected.png +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/resources/i18n/localized_labels.sld +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/resources/i18n/localized_no_default.sld +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/resources/i18n/localized_with_default.sld +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/resources/wfs/__init__.py +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/resources/wfs/wfs_delete_payload.xml +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/resources/wfs/wfs_insert_payload.xml +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/resources/wms/__init__.py +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/resources/wms/getmap_expected.png +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/test_cascaded_stores.py +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/test_cog.py +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/test_datastore.py +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/test_get_version.py +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/test_gwc.py +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/test_i18n.py +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/test_imagemosaic.py +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/test_imagemosaic_cog.py +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/test_wfs.py +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/test_wms.py +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/test_workspace.py +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/utils.py +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/__init__.py +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/gridsets/2056.xml +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/gridsets/21781.xml +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/gridsets/3857.xml +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/__init__.py +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/abstractlayer.py +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/common.py +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/coverage.py +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/coverages.py +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/coveragestore.py +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/datastores.py +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/featuretype.py +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/featuretypes.py +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/layer.py +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/layergroup.py +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/layergroups.py +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/resourcedirectory.py +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/style.py +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/styles.py +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/wmslayer.py +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/wmssettings.py +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/wmsstore.py +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/workspace.py +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/workspaces.py +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/services/__init__.py +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/services/owsservice.py +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/templates.py +0 -0
- {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: geoservercloud
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.4.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
|
|
@@ -154,3 +154,13 @@ First install the package in your current virtual environment (see [Installation
|
|
|
154
154
|
copy-workspace --src_url "http://localhost:8080/geoserver" --src_user admin --src_password geoserver --dst_url "http://localhost:9099/geoserver" --dst_user admin --dst_password geoserver --workspace workspace_name
|
|
155
155
|
```
|
|
156
156
|
|
|
157
|
+
### Logging
|
|
158
|
+
|
|
159
|
+
Set the log level using the standard `logging` module, e.g.:
|
|
160
|
+
|
|
161
|
+
```python
|
|
162
|
+
import logging
|
|
163
|
+
|
|
164
|
+
logging.getLogger("geoservercloud").setLevel(logging.DEBUG)
|
|
165
|
+
```
|
|
166
|
+
|
|
@@ -131,3 +131,13 @@ First install the package in your current virtual environment (see [Installation
|
|
|
131
131
|
```shell
|
|
132
132
|
copy-workspace --src_url "http://localhost:8080/geoserver" --src_user admin --src_password geoserver --dst_url "http://localhost:9099/geoserver" --dst_user admin --dst_password geoserver --workspace workspace_name
|
|
133
133
|
```
|
|
134
|
+
|
|
135
|
+
### Logging
|
|
136
|
+
|
|
137
|
+
Set the log level using the standard `logging` module, e.g.:
|
|
138
|
+
|
|
139
|
+
```python
|
|
140
|
+
import logging
|
|
141
|
+
|
|
142
|
+
logging.getLogger("geoservercloud").setLevel(logging.DEBUG)
|
|
143
|
+
```
|
{geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/config.py
RENAMED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import logging
|
|
1
2
|
import os
|
|
2
3
|
|
|
3
4
|
import yaml
|
|
@@ -54,4 +55,28 @@ def load_config():
|
|
|
54
55
|
if override_pg_schema:
|
|
55
56
|
config["db"]["pg_schema"] = override_pg_schema
|
|
56
57
|
|
|
58
|
+
# Configure logging for geoservercloud library
|
|
59
|
+
_setup_logging(config)
|
|
60
|
+
|
|
57
61
|
return config
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def _setup_logging(config: dict):
|
|
65
|
+
"""Set up logging for the geoservercloud library based on configuration."""
|
|
66
|
+
# Get logging configuration from config file or use defaults
|
|
67
|
+
log_config = config.get("logging", {})
|
|
68
|
+
log_level_str = log_config.get("level", "INFO").upper()
|
|
69
|
+
log_level = getattr(logging, log_level_str, logging.INFO)
|
|
70
|
+
log_format = log_config.get(
|
|
71
|
+
"format", "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
# Configure the geoservercloud logger
|
|
75
|
+
logger = logging.getLogger("geoservercloud")
|
|
76
|
+
logger.setLevel(log_level)
|
|
77
|
+
|
|
78
|
+
# Add console handler if not already present
|
|
79
|
+
if not logger.handlers:
|
|
80
|
+
handler = logging.StreamHandler()
|
|
81
|
+
handler.setFormatter(logging.Formatter(log_format))
|
|
82
|
+
logger.addHandler(handler)
|
|
@@ -10,7 +10,7 @@ from geoservercloud import utils
|
|
|
10
10
|
from geoservercloud.models.common import TimeDimensionInfo
|
|
11
11
|
from geoservercloud.models.coverage import Coverage
|
|
12
12
|
from geoservercloud.models.coveragestore import CoverageStore
|
|
13
|
-
from geoservercloud.models.datastore import
|
|
13
|
+
from geoservercloud.models.datastore import DataStore
|
|
14
14
|
from geoservercloud.models.featuretype import FeatureType
|
|
15
15
|
from geoservercloud.models.layer import Layer
|
|
16
16
|
from geoservercloud.models.layergroup import LayerGroup
|
|
@@ -272,19 +272,94 @@ class GeoServerCloud:
|
|
|
272
272
|
return datastores, status_code
|
|
273
273
|
return datastores.aslist(), status_code
|
|
274
274
|
|
|
275
|
-
def
|
|
275
|
+
def get_datastore(
|
|
276
276
|
self, workspace_name: str, datastore_name: str
|
|
277
277
|
) -> tuple[dict[str, Any] | str, int]:
|
|
278
278
|
"""
|
|
279
279
|
Get a datastore by workspace and name
|
|
280
280
|
"""
|
|
281
|
-
datastore, status_code = self.rest_service.
|
|
281
|
+
datastore, status_code = self.rest_service.get_datastore(
|
|
282
282
|
workspace_name, datastore_name
|
|
283
283
|
)
|
|
284
284
|
if isinstance(datastore, str):
|
|
285
285
|
return datastore, status_code
|
|
286
286
|
return datastore.asdict(), status_code
|
|
287
287
|
|
|
288
|
+
def get_pg_datastore(
|
|
289
|
+
self, workspace_name: str, datastore_name: str
|
|
290
|
+
) -> tuple[dict[str, Any] | str, int]:
|
|
291
|
+
"""
|
|
292
|
+
Get a datastore by workspace and name
|
|
293
|
+
"""
|
|
294
|
+
return self.get_datastore(workspace_name, datastore_name)
|
|
295
|
+
|
|
296
|
+
def create_datastore(
|
|
297
|
+
self,
|
|
298
|
+
workspace_name: str,
|
|
299
|
+
datastore_name: str,
|
|
300
|
+
datastore_type: str,
|
|
301
|
+
connection_parameters: dict[str, Any],
|
|
302
|
+
description: str | None = None,
|
|
303
|
+
enabled: bool = True,
|
|
304
|
+
set_default_datastore: bool = False,
|
|
305
|
+
) -> tuple[str, int]:
|
|
306
|
+
"""
|
|
307
|
+
Create a generic datastore of any type in GeoServer, or update if it already exists. This method
|
|
308
|
+
accepts flexible connection parameters, allowing to create any type of datastore.
|
|
309
|
+
|
|
310
|
+
:param workspace_name: Name of the workspace
|
|
311
|
+
:type workspace_name: str
|
|
312
|
+
:param datastore_name: Name for the datastore
|
|
313
|
+
:type datastore_name: str
|
|
314
|
+
:param datastore_type: Type of datastore (e.g., "PostGIS", "Shapefile", "Directory of spatial files (shapefiles)")
|
|
315
|
+
:type datastore_type: str
|
|
316
|
+
:param connection_parameters: Dict of connection parameters specific to the datastore type
|
|
317
|
+
:type connection_parameters: dict
|
|
318
|
+
:param description: Optional description
|
|
319
|
+
:type description: str, optional
|
|
320
|
+
:param enabled: Whether the datastore should be enabled (default: True)
|
|
321
|
+
:type enabled: bool, optional
|
|
322
|
+
:param set_default_datastore: Whether to set as default datastore (default: False)
|
|
323
|
+
:type set_default_datastore: bool, optional
|
|
324
|
+
|
|
325
|
+
:return: Tuple of (datastore_name, status_code)
|
|
326
|
+
:rtype: tuple
|
|
327
|
+
|
|
328
|
+
:Example:
|
|
329
|
+
|
|
330
|
+
>>> create_datastore(
|
|
331
|
+
... workspace_name="myworkspace",
|
|
332
|
+
... datastore_name="my_store",
|
|
333
|
+
... datastore_type="PostGIS",
|
|
334
|
+
... connection_parameters={
|
|
335
|
+
... "dbtype": "postgis",
|
|
336
|
+
... "host": "localhost",
|
|
337
|
+
... "port": 5432,
|
|
338
|
+
... "database": "mydb",
|
|
339
|
+
... "user": "user",
|
|
340
|
+
... "passwd": "password",
|
|
341
|
+
... "schema": "public",
|
|
342
|
+
... "Expose primary keys": "true",
|
|
343
|
+
... }
|
|
344
|
+
... )
|
|
345
|
+
"""
|
|
346
|
+
datastore = DataStore(
|
|
347
|
+
workspace_name,
|
|
348
|
+
datastore_name,
|
|
349
|
+
connection_parameters=connection_parameters,
|
|
350
|
+
type=datastore_type,
|
|
351
|
+
description=description,
|
|
352
|
+
enabled=enabled,
|
|
353
|
+
)
|
|
354
|
+
content, status_code = self.rest_service.create_datastore(
|
|
355
|
+
workspace_name, datastore
|
|
356
|
+
)
|
|
357
|
+
|
|
358
|
+
if set_default_datastore:
|
|
359
|
+
self.default_datastore = datastore_name
|
|
360
|
+
|
|
361
|
+
return content, status_code
|
|
362
|
+
|
|
288
363
|
def create_pg_datastore(
|
|
289
364
|
self,
|
|
290
365
|
workspace_name: str,
|
|
@@ -301,7 +376,7 @@ class GeoServerCloud:
|
|
|
301
376
|
"""
|
|
302
377
|
Create a PostGIS datastore from the DB connection parameters, or update it if it already exist.
|
|
303
378
|
"""
|
|
304
|
-
datastore =
|
|
379
|
+
datastore = DataStore(
|
|
305
380
|
workspace_name,
|
|
306
381
|
datastore_name,
|
|
307
382
|
connection_parameters={
|
|
@@ -318,7 +393,7 @@ class GeoServerCloud:
|
|
|
318
393
|
type="PostGIS",
|
|
319
394
|
description=description,
|
|
320
395
|
)
|
|
321
|
-
content, status_code = self.rest_service.
|
|
396
|
+
content, status_code = self.rest_service.create_datastore(
|
|
322
397
|
workspace_name, datastore
|
|
323
398
|
)
|
|
324
399
|
|
|
@@ -339,7 +414,7 @@ class GeoServerCloud:
|
|
|
339
414
|
"""
|
|
340
415
|
Create a PostGIS datastore from JNDI resource, or update it if it already exist.
|
|
341
416
|
"""
|
|
342
|
-
datastore =
|
|
417
|
+
datastore = DataStore(
|
|
343
418
|
workspace_name,
|
|
344
419
|
datastore_name,
|
|
345
420
|
connection_parameters={
|
|
@@ -352,9 +427,7 @@ class GeoServerCloud:
|
|
|
352
427
|
type="PostGIS (JNDI)",
|
|
353
428
|
description=description,
|
|
354
429
|
)
|
|
355
|
-
content, code = self.rest_service.
|
|
356
|
-
workspace_name, datastore
|
|
357
|
-
)
|
|
430
|
+
content, code = self.rest_service.create_datastore(workspace_name, datastore)
|
|
358
431
|
|
|
359
432
|
if set_default_datastore:
|
|
360
433
|
self.default_datastore = datastore_name
|
{geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/geoservercloudsync.py
RENAMED
|
@@ -106,12 +106,12 @@ class GeoServerCloudSync:
|
|
|
106
106
|
Copy a datastore from source to destination GeoServer instance
|
|
107
107
|
If deep_copy is True, copy all feature types and the corresponding layers
|
|
108
108
|
"""
|
|
109
|
-
datastore, status_code = self.src_instance.
|
|
109
|
+
datastore, status_code = self.src_instance.get_datastore(
|
|
110
110
|
workspace_name, datastore_name
|
|
111
111
|
)
|
|
112
112
|
if isinstance(datastore, str):
|
|
113
113
|
return datastore, status_code
|
|
114
|
-
new_ds, new_ds_status_code = self.dst_instance.
|
|
114
|
+
new_ds, new_ds_status_code = self.dst_instance.create_datastore(
|
|
115
115
|
workspace_name, datastore
|
|
116
116
|
)
|
|
117
117
|
if self.not_ok(new_ds_status_code):
|
|
@@ -8,13 +8,13 @@ from geoservercloud.models.common import (
|
|
|
8
8
|
)
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
class
|
|
11
|
+
class DataStore(EntityModel):
|
|
12
12
|
def __init__(
|
|
13
13
|
self,
|
|
14
14
|
workspace_name: str,
|
|
15
15
|
name: str,
|
|
16
16
|
connection_parameters: dict,
|
|
17
|
-
type: str
|
|
17
|
+
type: str,
|
|
18
18
|
enabled: bool = True,
|
|
19
19
|
description: str | None = None,
|
|
20
20
|
default: bool | None = None,
|
|
@@ -73,7 +73,7 @@ class PostGisDataStore(EntityModel):
|
|
|
73
73
|
data_store["workspace"]["name"],
|
|
74
74
|
data_store["name"],
|
|
75
75
|
connection_parameters,
|
|
76
|
-
data_store
|
|
76
|
+
data_store["type"],
|
|
77
77
|
data_store.get("enabled", True),
|
|
78
78
|
data_store.get("description", None),
|
|
79
79
|
data_store.get("_default", None),
|
{geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/services/restclient.py
RENAMED
|
@@ -58,6 +58,7 @@ class RestClient:
|
|
|
58
58
|
data: bytes | str | None = None,
|
|
59
59
|
) -> requests.Response:
|
|
60
60
|
full_url = f"{self.url}{path}"
|
|
61
|
+
self.log_payload("POST", json, data)
|
|
61
62
|
response: requests.Response = requests.post(
|
|
62
63
|
full_url,
|
|
63
64
|
params=params,
|
|
@@ -87,6 +88,7 @@ class RestClient:
|
|
|
87
88
|
data: bytes | str | None = None,
|
|
88
89
|
) -> requests.Response:
|
|
89
90
|
full_url = f"{self.url}{path}"
|
|
91
|
+
self.log_payload("PUT", json, data)
|
|
90
92
|
response: requests.Response = requests.put(
|
|
91
93
|
full_url,
|
|
92
94
|
params=params,
|
|
@@ -130,3 +132,16 @@ class RestClient:
|
|
|
130
132
|
if response.status_code != 404:
|
|
131
133
|
response.raise_for_status()
|
|
132
134
|
return response
|
|
135
|
+
|
|
136
|
+
def log_payload(
|
|
137
|
+
self, method: str, json: dict | None, data: bytes | str | None
|
|
138
|
+
) -> None:
|
|
139
|
+
payload_string = None
|
|
140
|
+
if json is not None:
|
|
141
|
+
payload_string = str(json)
|
|
142
|
+
elif data is not None:
|
|
143
|
+
if isinstance(data, str):
|
|
144
|
+
payload_string = data
|
|
145
|
+
else:
|
|
146
|
+
payload_string = f"<binary data, {len(data)} bytes>"
|
|
147
|
+
gs_logger.debug("Doing %s request with payload: %s", method, payload_string)
|
{geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/services/restservice.py
RENAMED
|
@@ -9,7 +9,7 @@ from geoservercloud.models.common import BaseModel
|
|
|
9
9
|
from geoservercloud.models.coverage import Coverage
|
|
10
10
|
from geoservercloud.models.coverages import Coverages
|
|
11
11
|
from geoservercloud.models.coveragestore import CoverageStore
|
|
12
|
-
from geoservercloud.models.datastore import
|
|
12
|
+
from geoservercloud.models.datastore import DataStore
|
|
13
13
|
from geoservercloud.models.datastores import DataStores
|
|
14
14
|
from geoservercloud.models.featuretype import FeatureType
|
|
15
15
|
from geoservercloud.models.featuretypes import FeatureTypes
|
|
@@ -113,33 +113,16 @@ class RestService:
|
|
|
113
113
|
)
|
|
114
114
|
return self.deserialize_response(response, DataStores)
|
|
115
115
|
|
|
116
|
-
def
|
|
116
|
+
def get_datastore(
|
|
117
117
|
self, workspace_name: str, datastore_name: str
|
|
118
|
-
) -> tuple[
|
|
118
|
+
) -> tuple[DataStore | str, int]:
|
|
119
119
|
response: Response = self.rest_client.get(
|
|
120
120
|
self.rest_endpoints.datastore(workspace_name, datastore_name)
|
|
121
121
|
)
|
|
122
|
-
return self.deserialize_response(response,
|
|
122
|
+
return self.deserialize_response(response, DataStore)
|
|
123
123
|
|
|
124
|
-
def
|
|
125
|
-
self, workspace_name: str, datastore:
|
|
126
|
-
) -> tuple[str, int]:
|
|
127
|
-
if not self.resource_exists(
|
|
128
|
-
self.rest_endpoints.datastore(workspace_name, datastore.name)
|
|
129
|
-
):
|
|
130
|
-
response: Response = self.rest_client.post(
|
|
131
|
-
self.rest_endpoints.datastores(workspace_name),
|
|
132
|
-
json=datastore.post_payload(),
|
|
133
|
-
)
|
|
134
|
-
else:
|
|
135
|
-
response = self.rest_client.put(
|
|
136
|
-
self.rest_endpoints.datastore(workspace_name, datastore.name),
|
|
137
|
-
json=datastore.put_payload(),
|
|
138
|
-
)
|
|
139
|
-
return response.content.decode(), response.status_code
|
|
140
|
-
|
|
141
|
-
def create_jndi_datastore(
|
|
142
|
-
self, workspace_name: str, datastore: PostGisDataStore
|
|
124
|
+
def create_datastore(
|
|
125
|
+
self, workspace_name: str, datastore: DataStore
|
|
143
126
|
) -> tuple[str, int]:
|
|
144
127
|
if not self.resource_exists(
|
|
145
128
|
self.rest_endpoints.datastore(workspace_name, datastore.name)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "geoservercloud"
|
|
3
|
-
version = "0.7.
|
|
3
|
+
version = "0.7.4.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"
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
|
|
3
|
-
time_formatter = logging.Formatter(
|
|
4
|
-
"{asctime} - {name}:{levelname} - {message}",
|
|
5
|
-
style="{",
|
|
6
|
-
datefmt="%Y-%m-%d %H:%M",
|
|
7
|
-
)
|
|
8
|
-
stream_handler = logging.StreamHandler()
|
|
9
|
-
stream_handler.setFormatter(time_formatter)
|
|
10
|
-
gs_logger = logging.getLogger("GS Session")
|
|
11
|
-
gs_logger.setLevel(logging.INFO)
|
|
12
|
-
gs_logger.addHandler(stream_handler)
|
|
File without changes
|
{geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/.gitignore
RENAMED
|
File without changes
|
{geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/README.md
RENAMED
|
File without changes
|
{geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/__init__.py
RENAMED
|
File without changes
|
{geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/conftest.py
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
|
{geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/test_cog.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/test_gwc.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/test_wfs.py
RENAMED
|
File without changes
|
{geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/test_wms.py
RENAMED
|
File without changes
|
|
File without changes
|
{geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/abstractlayer.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/coveragestore.py
RENAMED
|
File without changes
|
|
File without changes
|
{geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/featuretype.py
RENAMED
|
File without changes
|
{geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/featuretypes.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/layergroups.py
RENAMED
|
File without changes
|
{geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/resourcedirectory.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/wmssettings.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/services/owsservice.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|