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.
Files changed (88) hide show
  1. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/PKG-INFO +11 -1
  2. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/README.md +10 -0
  3. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/config.py +25 -0
  4. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/example.config.yaml +4 -0
  5. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/geoservercloud.py +82 -9
  6. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/geoservercloudsync.py +2 -2
  7. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/datastore.py +3 -3
  8. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/services/restclient.py +15 -0
  9. geoservercloud-0.7.4.dev1/geoservercloud/services/restlogger.py +5 -0
  10. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/services/restservice.py +6 -23
  11. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/pyproject.toml +1 -1
  12. geoservercloud-0.7.3.dev3/geoservercloud/services/restlogger.py +0 -12
  13. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/LICENSE +0 -0
  14. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/.gitignore +0 -0
  15. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/README.md +0 -0
  16. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/__init__.py +0 -0
  17. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/cli.py +0 -0
  18. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/compose/example.compose.yaml +0 -0
  19. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/compose/geodatabase/001_create_schemas.sql +0 -0
  20. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/data/sampledata.tgz +0 -0
  21. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/__init__.py +0 -0
  22. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/conftest.py +0 -0
  23. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/resources/__init__.py +0 -0
  24. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/resources/i18n/__init__.py +0 -0
  25. {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
  26. {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
  27. {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
  28. {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
  29. {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
  30. {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
  31. {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
  32. {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
  33. {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
  34. {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
  35. {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
  36. {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
  37. {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
  38. {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
  39. {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
  40. {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
  41. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/resources/i18n/localized_labels.sld +0 -0
  42. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/resources/i18n/localized_no_default.sld +0 -0
  43. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/resources/i18n/localized_with_default.sld +0 -0
  44. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/resources/wfs/__init__.py +0 -0
  45. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/resources/wfs/wfs_delete_payload.xml +0 -0
  46. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/resources/wfs/wfs_insert_payload.xml +0 -0
  47. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/resources/wms/__init__.py +0 -0
  48. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/resources/wms/getmap_expected.png +0 -0
  49. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/test_cascaded_stores.py +0 -0
  50. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/test_cog.py +0 -0
  51. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/test_datastore.py +0 -0
  52. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/test_get_version.py +0 -0
  53. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/test_gwc.py +0 -0
  54. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/test_i18n.py +0 -0
  55. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/test_imagemosaic.py +0 -0
  56. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/test_imagemosaic_cog.py +0 -0
  57. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/test_wfs.py +0 -0
  58. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/test_wms.py +0 -0
  59. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/test_workspace.py +0 -0
  60. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoserver_acceptance_tests/tests/utils.py +0 -0
  61. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/__init__.py +0 -0
  62. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/gridsets/2056.xml +0 -0
  63. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/gridsets/21781.xml +0 -0
  64. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/gridsets/3857.xml +0 -0
  65. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/__init__.py +0 -0
  66. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/abstractlayer.py +0 -0
  67. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/common.py +0 -0
  68. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/coverage.py +0 -0
  69. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/coverages.py +0 -0
  70. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/coveragestore.py +0 -0
  71. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/datastores.py +0 -0
  72. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/featuretype.py +0 -0
  73. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/featuretypes.py +0 -0
  74. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/layer.py +0 -0
  75. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/layergroup.py +0 -0
  76. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/layergroups.py +0 -0
  77. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/resourcedirectory.py +0 -0
  78. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/style.py +0 -0
  79. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/styles.py +0 -0
  80. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/wmslayer.py +0 -0
  81. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/wmssettings.py +0 -0
  82. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/wmsstore.py +0 -0
  83. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/workspace.py +0 -0
  84. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/models/workspaces.py +0 -0
  85. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/services/__init__.py +0 -0
  86. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/services/owsservice.py +0 -0
  87. {geoservercloud-0.7.3.dev3 → geoservercloud-0.7.4.dev1}/geoservercloud/templates.py +0 -0
  88. {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.dev3
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
+ ```
@@ -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)
@@ -6,6 +6,10 @@ credentials:
6
6
  user: "admin"
7
7
  pass: "geoserver"
8
8
 
9
+ logging:
10
+ level: "DEBUG"
11
+ format: "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
12
+
9
13
  db:
10
14
  pg_host:
11
15
  docker: "geodatabase"
@@ -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 PostGisDataStore
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 get_pg_datastore(
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.get_pg_datastore(
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 = PostGisDataStore(
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.create_pg_datastore(
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 = PostGisDataStore(
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.create_jndi_datastore(
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
@@ -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.get_pg_datastore(
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.create_pg_datastore(
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 PostGisDataStore(EntityModel):
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 = "PostGIS",
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.get("type", "PostGIS"),
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),
@@ -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)
@@ -0,0 +1,5 @@
1
+ import logging
2
+
3
+ gs_logger = logging.getLogger("geoservercloud")
4
+ # Prevent "No handler found" warnings if the application doesn't configure logging
5
+ gs_logger.addHandler(logging.NullHandler())
@@ -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 PostGisDataStore
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 get_pg_datastore(
116
+ def get_datastore(
117
117
  self, workspace_name: str, datastore_name: str
118
- ) -> tuple[PostGisDataStore | str, int]:
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, PostGisDataStore)
122
+ return self.deserialize_response(response, DataStore)
123
123
 
124
- def create_pg_datastore(
125
- self, workspace_name: str, datastore: PostGisDataStore
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.dev3"
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)