geoservercloud 0.8.8.dev3__tar.gz → 0.8.9.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 (95) hide show
  1. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/PKG-INFO +1 -1
  2. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoservercloud/geoservercloud.py +69 -0
  3. geoservercloud-0.8.9.dev1/geoservercloud/models/s3blobstore.py +104 -0
  4. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoservercloud/services/restservice.py +14 -0
  5. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/pyproject.toml +1 -1
  6. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/LICENSE +0 -0
  7. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/README.md +0 -0
  8. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/.gitignore +0 -0
  9. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/README.md +0 -0
  10. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/__init__.py +0 -0
  11. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/ci.config.yaml +0 -0
  12. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/cli.py +0 -0
  13. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/compose/ci.compose.yaml +0 -0
  14. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/compose/example.compose.yaml +0 -0
  15. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/compose/geodatabase/001_create_schemas.sql +0 -0
  16. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/config.py +0 -0
  17. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/data/sampledata.tgz +0 -0
  18. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/example.config.yaml +0 -0
  19. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/tests/__init__.py +0 -0
  20. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/tests/conftest.py +0 -0
  21. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/tests/resources/__init__.py +0 -0
  22. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/tests/resources/i18n/__init__.py +0 -0
  23. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/default_locale/default_value/language_None_expected.png +0 -0
  24. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/default_locale/default_value/language__expected.png +0 -0
  25. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/default_locale/default_value/language_de_expected.png +0 -0
  26. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/default_locale/default_value/language_fr_expected.png +0 -0
  27. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/default_locale/default_value/language_it_expected.png +0 -0
  28. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/default_locale/no_default_value/language_None_expected.png +0 -0
  29. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/default_locale/no_default_value/language__expected.png +0 -0
  30. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/default_locale/no_default_value/language_it_expected.png +0 -0
  31. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/no_default_locale/default_value/language_None_expected.png +0 -0
  32. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/no_default_locale/default_value/language__expected.png +0 -0
  33. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/no_default_locale/default_value/language_de_expected.png +0 -0
  34. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/no_default_locale/default_value/language_fr_expected.png +0 -0
  35. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/no_default_locale/default_value/language_it_expected.png +0 -0
  36. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/no_default_locale/no_default_value/language_None_expected.png +0 -0
  37. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/no_default_locale/no_default_value/language__expected.png +0 -0
  38. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/tests/resources/i18n/labels/no_default_locale/no_default_value/language_it_expected.png +0 -0
  39. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/tests/resources/i18n/localized_labels.sld +0 -0
  40. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/tests/resources/i18n/localized_no_default.sld +0 -0
  41. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/tests/resources/i18n/localized_with_default.sld +0 -0
  42. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/tests/resources/wfs/__init__.py +0 -0
  43. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/tests/resources/wfs/wfs_delete_payload.xml +0 -0
  44. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/tests/resources/wfs/wfs_insert_payload.xml +0 -0
  45. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/tests/resources/wms/__init__.py +0 -0
  46. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/tests/resources/wms/getmap_expected.png +0 -0
  47. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/tests/test_cascaded_stores.py +0 -0
  48. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/tests/test_cog.py +0 -0
  49. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/tests/test_datastore.py +0 -0
  50. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/tests/test_get_version.py +0 -0
  51. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/tests/test_gwc.py +0 -0
  52. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/tests/test_i18n.py +0 -0
  53. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/tests/test_imagemosaic.py +0 -0
  54. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/tests/test_imagemosaic_cog.py +0 -0
  55. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/tests/test_installed_fonts.py +0 -0
  56. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/tests/test_ogcapi_features.py +0 -0
  57. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/tests/test_s3_credentials_chain.py +0 -0
  58. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/tests/test_wfs.py +0 -0
  59. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/tests/test_wms.py +0 -0
  60. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/tests/test_workspace.py +0 -0
  61. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoserver_acceptance_tests/tests/utils.py +0 -0
  62. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoservercloud/__init__.py +0 -0
  63. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoservercloud/geoservercloudsync.py +0 -0
  64. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoservercloud/gridsets/2056.xml +0 -0
  65. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoservercloud/gridsets/21781.xml +0 -0
  66. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoservercloud/gridsets/3857.xml +0 -0
  67. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoservercloud/models/__init__.py +0 -0
  68. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoservercloud/models/abstractlayer.py +0 -0
  69. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoservercloud/models/common.py +0 -0
  70. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoservercloud/models/coverage.py +0 -0
  71. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoservercloud/models/coverages.py +0 -0
  72. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoservercloud/models/coveragestore.py +0 -0
  73. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoservercloud/models/datastore.py +0 -0
  74. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoservercloud/models/datastores.py +0 -0
  75. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoservercloud/models/featuretype.py +0 -0
  76. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoservercloud/models/featuretypes.py +0 -0
  77. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoservercloud/models/gwclayer.py +0 -0
  78. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoservercloud/models/layer.py +0 -0
  79. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoservercloud/models/layergroup.py +0 -0
  80. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoservercloud/models/layergroups.py +0 -0
  81. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoservercloud/models/resourcedirectory.py +0 -0
  82. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoservercloud/models/style.py +0 -0
  83. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoservercloud/models/styles.py +0 -0
  84. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoservercloud/models/wmslayer.py +0 -0
  85. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoservercloud/models/wmssettings.py +0 -0
  86. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoservercloud/models/wmsstore.py +0 -0
  87. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoservercloud/models/wmtsstore.py +0 -0
  88. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoservercloud/models/workspace.py +0 -0
  89. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoservercloud/models/workspaces.py +0 -0
  90. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoservercloud/services/__init__.py +0 -0
  91. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoservercloud/services/owsservice.py +0 -0
  92. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoservercloud/services/restclient.py +0 -0
  93. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoservercloud/services/restlogger.py +0 -0
  94. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoservercloud/templates.py +0 -0
  95. {geoservercloud-0.8.8.dev3 → geoservercloud-0.8.9.dev1}/geoservercloud/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: geoservercloud
3
- Version: 0.8.8.dev3
3
+ Version: 0.8.9.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
@@ -15,6 +15,7 @@ from geoservercloud.models.featuretype import FeatureType
15
15
  from geoservercloud.models.gwclayer import GridSubset, GwcLayer, ParameterFilter
16
16
  from geoservercloud.models.layer import Layer
17
17
  from geoservercloud.models.layergroup import LayerGroup
18
+ from geoservercloud.models.s3blobstore import S3Blobstore
18
19
  from geoservercloud.models.style import Style
19
20
  from geoservercloud.models.wmslayer import WmsLayer
20
21
  from geoservercloud.models.wmssettings import WmsSettings
@@ -2281,3 +2282,71 @@ class GeoServerCloud:
2281
2282
  :rtype: tuple
2282
2283
  """
2283
2284
  return self.rest_service.create_gridset(epsg)
2285
+
2286
+ def create_gwc_blobstore(
2287
+ self,
2288
+ id: str,
2289
+ bucket: str,
2290
+ max_connections: int,
2291
+ aws_access_key: str | None = None,
2292
+ aws_secret_key: str | None = None,
2293
+ prefix: str | None = None,
2294
+ enabled: bool | None = None,
2295
+ default: bool | None = None,
2296
+ access: str | None = None,
2297
+ use_https: bool | None = None,
2298
+ proxy_domain: str | None = None,
2299
+ proxy_workstation: str | None = None,
2300
+ proxy_host: str | None = None,
2301
+ proxy_port: str | None = None,
2302
+ proxy_username: str | None = None,
2303
+ proxy_password: str | None = None,
2304
+ use_gzip: bool | None = None,
2305
+ endpoint: str | None = None,
2306
+ ) -> tuple[str, int]:
2307
+ """
2308
+ Create or update a blobstore for GeoWebCache cache storage
2309
+
2310
+ :param id: Identifier of the blobstore
2311
+ :param bucket: Name of the AWS S3 bucket where to store tiles
2312
+ :param max_connections: Maximum number of allowed open HTTP connections
2313
+ :param aws_access_key: AWS access key, not required if using anonymous or role-based credentials
2314
+ :param aws_secret_key: AWS secret key, not required if using anonymous or role-based credentials
2315
+ :param prefix: Optional base prefix path to use as the root to store tiles under the bucket
2316
+ :param enabled: Whether the blobstore is enabled
2317
+ :param default: Whether this blobstore is the default one
2318
+ :param access: Access control for stored tiles, either "PUBLIC" or "PRIVATE"
2319
+ :param use_https: Whether to use HTTPS (True) or HTTP (False) when talking to S3 (GeoServer defaults to True if omitted)
2320
+ :param proxy_domain: Optional Windows domain name for configuring an NTLM proxy
2321
+ :param proxy_workstation: Optional Windows workstation name for configuring NTLM proxy support
2322
+ :param proxy_host: Optional proxy host the client will connect through
2323
+ :param proxy_port: Optional proxy port the client will connect through
2324
+ :param proxy_username: Optional proxy user name to use if connecting through a proxy
2325
+ :param proxy_password: Optional proxy password to use when connecting through a proxy
2326
+ :param use_gzip: Whether to use gzip compression
2327
+ :param endpoint: Host of the S3-compatible server (if not AWS)
2328
+ :return: Tuple of (content, status_code)
2329
+ :rtype: tuple
2330
+ """
2331
+
2332
+ blobstore = S3Blobstore(
2333
+ id=id,
2334
+ bucket=bucket,
2335
+ max_connections=max_connections,
2336
+ aws_access_key=aws_access_key,
2337
+ aws_secret_key=aws_secret_key,
2338
+ prefix=prefix,
2339
+ enabled=enabled,
2340
+ default=default,
2341
+ access=access,
2342
+ use_https=use_https,
2343
+ proxy_domain=proxy_domain,
2344
+ proxy_workstation=proxy_workstation,
2345
+ proxy_host=proxy_host,
2346
+ proxy_port=proxy_port,
2347
+ proxy_username=proxy_username,
2348
+ proxy_password=proxy_password,
2349
+ use_gzip=use_gzip,
2350
+ endpoint=endpoint,
2351
+ )
2352
+ return self.rest_service.create_gwc_blobstore(blobstore)
@@ -0,0 +1,104 @@
1
+ import json
2
+ from typing import Any
3
+
4
+ from geoservercloud.models.common import EntityModel
5
+
6
+
7
+ class S3Blobstore(EntityModel):
8
+ def __init__(
9
+ self,
10
+ id: str,
11
+ bucket: str,
12
+ max_connections: int,
13
+ aws_access_key: str | None = None,
14
+ aws_secret_key: str | None = None,
15
+ prefix: str | None = None,
16
+ enabled: bool | None = None,
17
+ default: bool | None = None,
18
+ access: str | None = None,
19
+ use_https: bool | None = None,
20
+ proxy_domain: str | None = None,
21
+ proxy_workstation: str | None = None,
22
+ proxy_host: str | None = None,
23
+ proxy_port: str | None = None,
24
+ proxy_username: str | None = None,
25
+ proxy_password: str | None = None,
26
+ use_gzip: bool | None = None,
27
+ endpoint: str | None = None,
28
+ ):
29
+ self.id = id
30
+ self.bucket = bucket
31
+ self.max_connections = max_connections
32
+ self.aws_access_key = aws_access_key
33
+ self.aws_secret_key = aws_secret_key
34
+ self.prefix = prefix
35
+ self.enabled = enabled
36
+ self.default = default
37
+ self.access = access
38
+ self.use_https = use_https
39
+ self.proxy_domain = proxy_domain
40
+ self.proxy_workstation = proxy_workstation
41
+ self.proxy_host = proxy_host
42
+ self.proxy_port = proxy_port
43
+ self.proxy_username = proxy_username
44
+ self.proxy_password = proxy_password
45
+ self.use_gzip = use_gzip
46
+ self.endpoint = endpoint
47
+
48
+ def asdict(self) -> dict[str, Any]:
49
+ content: dict[str, Any] = {
50
+ "id": self.id,
51
+ "bucket": self.bucket,
52
+ "maxConnections": self.max_connections,
53
+ }
54
+ optional_items: dict[str, Any] = {
55
+ "awsAccessKey": self.aws_access_key,
56
+ "awsSecretKey": self.aws_secret_key,
57
+ "prefix": self.prefix,
58
+ "enabled": self.enabled,
59
+ "default": self.default,
60
+ "access": self.access,
61
+ "useHTTPS": self.use_https,
62
+ "proxyDomain": self.proxy_domain,
63
+ "proxyWorkstation": self.proxy_workstation,
64
+ "proxyHost": self.proxy_host,
65
+ "proxyPort": self.proxy_port,
66
+ "proxyUsername": self.proxy_username,
67
+ "proxyPassword": self.proxy_password,
68
+ "useGzip": self.use_gzip,
69
+ "endpoint": self.endpoint,
70
+ }
71
+ return EntityModel.add_items_to_dict(content, optional_items)
72
+
73
+ def post_payload(self) -> dict[str, Any]:
74
+ return {"S3BlobStore": self.asdict()}
75
+
76
+ def put_payload(self) -> dict[str, Any]:
77
+ return self.post_payload()
78
+
79
+ @classmethod
80
+ def from_get_response_payload(cls, content: dict):
81
+ s3blobstore = content["S3BlobStore"]
82
+ return cls(
83
+ s3blobstore["id"],
84
+ s3blobstore["bucket"],
85
+ s3blobstore["maxConnections"],
86
+ s3blobstore.get("awsAccessKey"),
87
+ s3blobstore.get("awsSecretKey"),
88
+ s3blobstore.get("prefix"),
89
+ s3blobstore.get("enabled"),
90
+ s3blobstore.get("default"),
91
+ s3blobstore.get("access"),
92
+ s3blobstore.get("useHTTPS"),
93
+ s3blobstore.get("proxyDomain"),
94
+ s3blobstore.get("proxyWorkstation"),
95
+ s3blobstore.get("proxyHost"),
96
+ s3blobstore.get("proxyPort"),
97
+ s3blobstore.get("proxyUsername"),
98
+ s3blobstore.get("proxyPassword"),
99
+ s3blobstore.get("useGzip"),
100
+ s3blobstore.get("endpoint"),
101
+ )
102
+
103
+ def __repr__(self) -> str:
104
+ return json.dumps(self.put_payload(), indent=4)
@@ -18,6 +18,7 @@ from geoservercloud.models.layer import Layer
18
18
  from geoservercloud.models.layergroup import LayerGroup
19
19
  from geoservercloud.models.layergroups import LayerGroups
20
20
  from geoservercloud.models.resourcedirectory import ResourceDirectory
21
+ from geoservercloud.models.s3blobstore import S3Blobstore
21
22
  from geoservercloud.models.style import Style
22
23
  from geoservercloud.models.styles import Styles
23
24
  from geoservercloud.models.wmslayer import WmsLayer
@@ -344,6 +345,13 @@ class RestService:
344
345
  )
345
346
  return response.content.decode(), response.status_code
346
347
 
348
+ def create_gwc_blobstore(self, blobstore: S3Blobstore) -> tuple[str, int]:
349
+ response: Response = self.rest_client.put(
350
+ self.gwc_endpoints.blobstore(blobstore.id),
351
+ json=blobstore.put_payload(),
352
+ )
353
+ return response.content.decode(), response.status_code
354
+
347
355
  def get_feature_types(
348
356
  self, workspace_name: str, datastore_name: str
349
357
  ) -> tuple[FeatureTypes | str, int]:
@@ -899,6 +907,12 @@ class RestService:
899
907
  def gridset(self, epsg: int) -> str:
900
908
  return f"{self.base_url}/gridsets/EPSG:{str(epsg)}.xml"
901
909
 
910
+ def blobstores(self) -> str:
911
+ return f"{self.base_url}/blobstores.json"
912
+
913
+ def blobstore(self, id: str) -> str:
914
+ return f"{self.base_url}/blobstores/{id}.json"
915
+
902
916
  class RestEndpoints:
903
917
  def __init__(self, base_url: str = "/rest") -> None:
904
918
  self.base_url: str = base_url
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "geoservercloud"
3
- version = "0.8.8.dev3"
3
+ version = "0.8.9.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"