geoservercloud 0.7.4.dev1__tar.gz → 0.7.4.dev4__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.4.dev1 → geoservercloud-0.7.4.dev4}/PKG-INFO +1 -1
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoservercloud/geoservercloud.py +140 -17
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoservercloud/models/layergroup.py +4 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoservercloud/services/restservice.py +3 -1
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/pyproject.toml +1 -1
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/LICENSE +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/README.md +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/.gitignore +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/README.md +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/__init__.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/cli.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/compose/example.compose.yaml +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/compose/geodatabase/001_create_schemas.sql +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/config.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/data/sampledata.tgz +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/example.config.yaml +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/tests/__init__.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/tests/conftest.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/tests/resources/__init__.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/tests/resources/i18n/__init__.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/tests/resources/i18n/labels/default_locale/default_value/language_None_expected.png +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/tests/resources/i18n/labels/default_locale/default_value/language__expected.png +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/tests/resources/i18n/labels/default_locale/default_value/language_de_expected.png +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/tests/resources/i18n/labels/default_locale/default_value/language_fr_expected.png +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/tests/resources/i18n/labels/default_locale/default_value/language_it_expected.png +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/tests/resources/i18n/labels/default_locale/no_default_value/language_None_expected.png +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/tests/resources/i18n/labels/default_locale/no_default_value/language__expected.png +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/tests/resources/i18n/labels/default_locale/no_default_value/language_it_expected.png +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/tests/resources/i18n/labels/no_default_locale/default_value/language_None_expected.png +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/tests/resources/i18n/labels/no_default_locale/default_value/language__expected.png +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/tests/resources/i18n/labels/no_default_locale/default_value/language_de_expected.png +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/tests/resources/i18n/labels/no_default_locale/default_value/language_fr_expected.png +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/tests/resources/i18n/labels/no_default_locale/default_value/language_it_expected.png +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/tests/resources/i18n/labels/no_default_locale/no_default_value/language_None_expected.png +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/tests/resources/i18n/labels/no_default_locale/no_default_value/language__expected.png +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/tests/resources/i18n/labels/no_default_locale/no_default_value/language_it_expected.png +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/tests/resources/i18n/localized_labels.sld +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/tests/resources/i18n/localized_no_default.sld +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/tests/resources/i18n/localized_with_default.sld +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/tests/resources/wfs/__init__.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/tests/resources/wfs/wfs_delete_payload.xml +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/tests/resources/wfs/wfs_insert_payload.xml +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/tests/resources/wms/__init__.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/tests/resources/wms/getmap_expected.png +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/tests/test_cascaded_stores.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/tests/test_cog.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/tests/test_datastore.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/tests/test_get_version.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/tests/test_gwc.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/tests/test_i18n.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/tests/test_imagemosaic.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/tests/test_imagemosaic_cog.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/tests/test_wfs.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/tests/test_wms.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/tests/test_workspace.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/tests/utils.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoservercloud/__init__.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoservercloud/geoservercloudsync.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoservercloud/gridsets/2056.xml +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoservercloud/gridsets/21781.xml +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoservercloud/gridsets/3857.xml +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoservercloud/models/__init__.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoservercloud/models/abstractlayer.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoservercloud/models/common.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoservercloud/models/coverage.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoservercloud/models/coverages.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoservercloud/models/coveragestore.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoservercloud/models/datastore.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoservercloud/models/datastores.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoservercloud/models/featuretype.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoservercloud/models/featuretypes.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoservercloud/models/layer.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoservercloud/models/layergroups.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoservercloud/models/resourcedirectory.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoservercloud/models/style.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoservercloud/models/styles.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoservercloud/models/wmslayer.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoservercloud/models/wmssettings.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoservercloud/models/wmsstore.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoservercloud/models/workspace.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoservercloud/models/workspaces.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoservercloud/services/__init__.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoservercloud/services/owsservice.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoservercloud/services/restclient.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoservercloud/services/restlogger.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoservercloud/templates.py +0 -0
- {geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoservercloud/utils.py +0 -0
|
@@ -434,6 +434,97 @@ class GeoServerCloud:
|
|
|
434
434
|
|
|
435
435
|
return content, code
|
|
436
436
|
|
|
437
|
+
def create_pmtiles_datastore(
|
|
438
|
+
self,
|
|
439
|
+
workspace_name: str,
|
|
440
|
+
datastore_name: str,
|
|
441
|
+
pmtiles_url: str,
|
|
442
|
+
description: str | None = None,
|
|
443
|
+
range_reader_provider: str = "file",
|
|
444
|
+
caching_enabled: bool = True,
|
|
445
|
+
caching_block_aligned: bool = True,
|
|
446
|
+
http_timeout_millis: int = 5000,
|
|
447
|
+
http_trust_all_certificates: bool = False,
|
|
448
|
+
s3_use_default_credentials_provider: bool = False,
|
|
449
|
+
s3_force_path_style: bool = True,
|
|
450
|
+
gcs_default_credentials_chain: bool = False,
|
|
451
|
+
) -> tuple[str, int]:
|
|
452
|
+
"""
|
|
453
|
+
Create a PMTiles datastore, or update it if it already exists.
|
|
454
|
+
|
|
455
|
+
:param workspace_name: Name of the workspace
|
|
456
|
+
:type workspace_name: str
|
|
457
|
+
:param datastore_name: Name for the PMTiles datastore
|
|
458
|
+
:type datastore_name: str
|
|
459
|
+
:param pmtiles_url: URL or path to the PMTiles file
|
|
460
|
+
:type pmtiles_url: str
|
|
461
|
+
:param description: Optional description for the datastore
|
|
462
|
+
:type description: str, optional
|
|
463
|
+
:param range_reader_provider: Range reader provider type (default: "file")
|
|
464
|
+
:type range_reader_provider: str, optional
|
|
465
|
+
:param caching_enabled: Enable caching for range reader (default: True)
|
|
466
|
+
:type caching_enabled: bool, optional
|
|
467
|
+
:param caching_block_aligned: Enable block-aligned caching (default: True)
|
|
468
|
+
:type caching_block_aligned: bool, optional
|
|
469
|
+
:param http_timeout_millis: HTTP timeout in milliseconds (default: 5000)
|
|
470
|
+
:type http_timeout_millis: int, optional
|
|
471
|
+
:param http_trust_all_certificates: Trust all SSL certificates for HTTP (default: False)
|
|
472
|
+
:type http_trust_all_certificates: bool, optional
|
|
473
|
+
:param s3_use_default_credentials_provider: Use default AWS credentials provider for S3 (default: False)
|
|
474
|
+
:type s3_use_default_credentials_provider: bool, optional
|
|
475
|
+
:param s3_force_path_style: Force path-style access for S3 (default: True)
|
|
476
|
+
:type s3_force_path_style: bool, optional
|
|
477
|
+
:param gcs_default_credentials_chain: Use default credentials chain for Google Cloud Storage (default: False)
|
|
478
|
+
:type gcs_default_credentials_chain: bool, optional
|
|
479
|
+
|
|
480
|
+
:return: Tuple of (datastore_name, status_code)
|
|
481
|
+
:rtype: tuple
|
|
482
|
+
|
|
483
|
+
:Example:
|
|
484
|
+
|
|
485
|
+
>>> create_pmtiles_datastore(
|
|
486
|
+
... workspace_name="pmtiles_workspace",
|
|
487
|
+
... datastore_name="pmtiles_store",
|
|
488
|
+
... pmtiles_url="file:///mnt/pmtiles/mypmtilesfile.pmtiles",
|
|
489
|
+
... description="My PMTiles datastore",
|
|
490
|
+
... range_reader_provider="file",
|
|
491
|
+
... )
|
|
492
|
+
"""
|
|
493
|
+
|
|
494
|
+
datastore = DataStore(
|
|
495
|
+
workspace_name,
|
|
496
|
+
datastore_name,
|
|
497
|
+
connection_parameters={
|
|
498
|
+
"pmtiles": pmtiles_url,
|
|
499
|
+
"namespace": f"http://{workspace_name}",
|
|
500
|
+
"io.tileverse.rangereader.provider": range_reader_provider,
|
|
501
|
+
"io.tileverse.rangereader.caching.enabled": str(
|
|
502
|
+
caching_enabled
|
|
503
|
+
).lower(),
|
|
504
|
+
"io.tileverse.rangereader.caching.blockaligned": str(
|
|
505
|
+
caching_block_aligned
|
|
506
|
+
).lower(),
|
|
507
|
+
"io.tileverse.rangereader.http.timeout-millis": str(
|
|
508
|
+
http_timeout_millis
|
|
509
|
+
),
|
|
510
|
+
"io.tileverse.rangereader.http.trust-all-certificates": str(
|
|
511
|
+
http_trust_all_certificates
|
|
512
|
+
).lower(),
|
|
513
|
+
"io.tileverse.rangereader.s3.use-default-credentials-provider": str(
|
|
514
|
+
s3_use_default_credentials_provider
|
|
515
|
+
).lower(),
|
|
516
|
+
"io.tileverse.rangereader.s3.force-path-style": str(
|
|
517
|
+
s3_force_path_style
|
|
518
|
+
).lower(),
|
|
519
|
+
"io.tileverse.rangereader.gcs.default-credentials-chain": str(
|
|
520
|
+
gcs_default_credentials_chain
|
|
521
|
+
).lower(),
|
|
522
|
+
},
|
|
523
|
+
type="PMTiles",
|
|
524
|
+
description=description,
|
|
525
|
+
)
|
|
526
|
+
return self.rest_service.create_datastore(workspace_name, datastore)
|
|
527
|
+
|
|
437
528
|
def get_wms_store(
|
|
438
529
|
self, workspace_name: str, datastore_name: str
|
|
439
530
|
) -> tuple[dict[str, Any] | str, int]:
|
|
@@ -723,8 +814,8 @@ class GeoServerCloud:
|
|
|
723
814
|
layer_name: str,
|
|
724
815
|
workspace_name: str | None = None,
|
|
725
816
|
datastore_name: str | None = None,
|
|
726
|
-
title: str | dict =
|
|
727
|
-
abstract: str | dict =
|
|
817
|
+
title: str | dict | None = None,
|
|
818
|
+
abstract: str | dict | None = None,
|
|
728
819
|
attributes: dict | None = None,
|
|
729
820
|
epsg: int = 4326,
|
|
730
821
|
keywords: list[str] = [],
|
|
@@ -792,9 +883,10 @@ class GeoServerCloud:
|
|
|
792
883
|
self,
|
|
793
884
|
group: str,
|
|
794
885
|
workspace_name: str | None,
|
|
795
|
-
layers: list[str],
|
|
796
|
-
|
|
797
|
-
|
|
886
|
+
layers: list[str] | None = None,
|
|
887
|
+
styles: list[str] | None = None,
|
|
888
|
+
title: str | dict | None = None,
|
|
889
|
+
abstract: str | dict | None = None,
|
|
798
890
|
epsg: int = 4326,
|
|
799
891
|
mode: str = "SINGLE",
|
|
800
892
|
enabled: bool = True,
|
|
@@ -806,10 +898,15 @@ class GeoServerCloud:
|
|
|
806
898
|
workspace_name = workspace_name or self.default_workspace
|
|
807
899
|
if not workspace_name:
|
|
808
900
|
raise ValueError("Workspace not provided")
|
|
809
|
-
if not
|
|
901
|
+
if mode not in LayerGroup.modes:
|
|
810
902
|
raise ValueError(
|
|
811
903
|
f"Invalid mode: {mode}, possible values are: {LayerGroup.modes}"
|
|
812
904
|
)
|
|
905
|
+
if not layers and not styles:
|
|
906
|
+
raise ValueError(
|
|
907
|
+
"Either layers or styles must be provided for a layer group"
|
|
908
|
+
)
|
|
909
|
+
|
|
813
910
|
bounds = {
|
|
814
911
|
"minx": utils.EPSG_BBOX[epsg]["nativeBoundingBox"]["minx"],
|
|
815
912
|
"maxx": utils.EPSG_BBOX[epsg]["nativeBoundingBox"]["maxx"],
|
|
@@ -817,13 +914,23 @@ class GeoServerCloud:
|
|
|
817
914
|
"maxy": utils.EPSG_BBOX[epsg]["nativeBoundingBox"]["maxy"],
|
|
818
915
|
"crs": f"EPSG:{epsg}",
|
|
819
916
|
}
|
|
917
|
+
|
|
918
|
+
publishables = None
|
|
919
|
+
if layers:
|
|
920
|
+
publishables = [f"{workspace_name}:{layer}" for layer in layers]
|
|
921
|
+
|
|
922
|
+
formatted_styles = None
|
|
923
|
+
if styles:
|
|
924
|
+
formatted_styles = [f"{workspace_name}:{style}" for style in styles]
|
|
925
|
+
|
|
820
926
|
layer_group = LayerGroup(
|
|
821
927
|
name=group,
|
|
822
928
|
mode=mode,
|
|
823
929
|
workspace_name=workspace_name,
|
|
824
930
|
title=title,
|
|
825
931
|
abstract=abstract,
|
|
826
|
-
publishables=
|
|
932
|
+
publishables=publishables,
|
|
933
|
+
styles=formatted_styles,
|
|
827
934
|
bounds=bounds,
|
|
828
935
|
enabled=enabled,
|
|
829
936
|
advertised=advertised,
|
|
@@ -903,9 +1010,15 @@ class GeoServerCloud:
|
|
|
903
1010
|
style_name: str,
|
|
904
1011
|
filename: str,
|
|
905
1012
|
workspace_name: str | None = None,
|
|
1013
|
+
format: str = "sld",
|
|
906
1014
|
) -> tuple[str, int]:
|
|
907
1015
|
"""Create a style definition"""
|
|
908
|
-
style = Style(
|
|
1016
|
+
style = Style(
|
|
1017
|
+
name=style_name,
|
|
1018
|
+
filename=filename,
|
|
1019
|
+
workspace_name=workspace_name,
|
|
1020
|
+
format=format,
|
|
1021
|
+
)
|
|
909
1022
|
return self.rest_service.create_style_definition(
|
|
910
1023
|
style_name=style_name, style=style, workspace_name=workspace_name
|
|
911
1024
|
)
|
|
@@ -932,21 +1045,31 @@ class GeoServerCloud:
|
|
|
932
1045
|
file: str,
|
|
933
1046
|
workspace_name: str | None = None,
|
|
934
1047
|
) -> tuple[str, int]:
|
|
935
|
-
"""Create a style
|
|
936
|
-
Supported file extensions are .sld and .
|
|
937
|
-
|
|
938
|
-
file_ext = Path(file).suffix
|
|
939
|
-
content, code = self.create_style_definition(
|
|
940
|
-
style_name, f"{file_base_name}.sld", workspace_name
|
|
941
|
-
)
|
|
942
|
-
if code >= 400:
|
|
943
|
-
return content, code
|
|
1048
|
+
"""Create a style from a file, or update it if it already exists.
|
|
1049
|
+
Supported file extensions are .sld, .zip and .mbstyle."""
|
|
1050
|
+
file_ext = Path(file).suffix.lower()
|
|
944
1051
|
if file_ext == ".sld":
|
|
1052
|
+
style_format = "sld"
|
|
1053
|
+
style_definition_filename = f"{style_name}.sld"
|
|
945
1054
|
file_format = "sld"
|
|
946
1055
|
elif file_ext == ".zip":
|
|
1056
|
+
style_format = "sld"
|
|
1057
|
+
style_definition_filename = f"{style_name}.sld"
|
|
947
1058
|
file_format = "zip"
|
|
1059
|
+
elif file_ext == ".mbstyle":
|
|
1060
|
+
style_format = "mbstyle"
|
|
1061
|
+
style_definition_filename = f"{style_name}.mbstyle"
|
|
1062
|
+
file_format = "mbstyle"
|
|
948
1063
|
else:
|
|
949
1064
|
raise ValueError(f"Unsupported file extension: {file_ext}")
|
|
1065
|
+
content, code = self.create_style_definition(
|
|
1066
|
+
style_name,
|
|
1067
|
+
style_definition_filename,
|
|
1068
|
+
workspace_name,
|
|
1069
|
+
format=style_format,
|
|
1070
|
+
)
|
|
1071
|
+
if code >= 400:
|
|
1072
|
+
return content, code
|
|
950
1073
|
with open(f"{file}", "rb") as fs:
|
|
951
1074
|
style: bytes = fs.read()
|
|
952
1075
|
return self.rest_service.create_style(
|
|
@@ -93,6 +93,10 @@ class LayerGroup(EntityModel):
|
|
|
93
93
|
{"@type": "layer", "name": p.name} for p in self.publishables
|
|
94
94
|
]
|
|
95
95
|
}
|
|
96
|
+
elif self.styles:
|
|
97
|
+
# Style group: empty publishables with styles
|
|
98
|
+
content["publishables"] = {"published": ""}
|
|
99
|
+
|
|
96
100
|
if self.styles:
|
|
97
101
|
content["styles"] = {"style": [s.asdict() for s in self.styles]}
|
|
98
102
|
elif self.publishables:
|
{geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoservercloud/services/restservice.py
RENAMED
|
@@ -603,6 +603,8 @@ class RestService:
|
|
|
603
603
|
headers = {"Content-Type": "application/vnd.ogc.sld+xml"}
|
|
604
604
|
elif format == "zip":
|
|
605
605
|
headers = {"Content-Type": "application/zip"}
|
|
606
|
+
elif format == "mbstyle":
|
|
607
|
+
headers = {"Content-Type": "application/vnd.geoserver.mbstyle+json"}
|
|
606
608
|
# Do not check for existence because GeoServer throws a 500 if the style definition exists and not
|
|
607
609
|
# the SLD. Besides PUT is also supported on creation
|
|
608
610
|
response: Response = self.rest_client.put(
|
|
@@ -915,7 +917,7 @@ class RestService:
|
|
|
915
917
|
url: str = f"{self.base_url}/styles/{style_name}"
|
|
916
918
|
else:
|
|
917
919
|
url = f"{self.base_url}/workspaces/{workspace_name}/styles/{style_name}"
|
|
918
|
-
if format in ("json", "sld"):
|
|
920
|
+
if format in ("json", "sld", "mbstyle"):
|
|
919
921
|
return f"{url}.{format}"
|
|
920
922
|
return url
|
|
921
923
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "geoservercloud"
|
|
3
|
-
version = "0.7.4.
|
|
3
|
+
version = "0.7.4.dev4"
|
|
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"
|
|
File without changes
|
|
File without changes
|
{geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/.gitignore
RENAMED
|
File without changes
|
{geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/README.md
RENAMED
|
File without changes
|
{geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/config.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/tests/__init__.py
RENAMED
|
File without changes
|
{geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/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.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/tests/test_cog.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/tests/test_gwc.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/tests/test_wfs.py
RENAMED
|
File without changes
|
{geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/tests/test_wms.py
RENAMED
|
File without changes
|
|
File without changes
|
{geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoserver_acceptance_tests/tests/utils.py
RENAMED
|
File without changes
|
|
File without changes
|
{geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoservercloud/geoservercloudsync.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoservercloud/models/abstractlayer.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoservercloud/models/coveragestore.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoservercloud/models/featuretype.py
RENAMED
|
File without changes
|
{geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoservercloud/models/featuretypes.py
RENAMED
|
File without changes
|
|
File without changes
|
{geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoservercloud/models/layergroups.py
RENAMED
|
File without changes
|
{geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoservercloud/models/resourcedirectory.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoservercloud/models/wmssettings.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoservercloud/services/owsservice.py
RENAMED
|
File without changes
|
{geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoservercloud/services/restclient.py
RENAMED
|
File without changes
|
{geoservercloud-0.7.4.dev1 → geoservercloud-0.7.4.dev4}/geoservercloud/services/restlogger.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|