geoservercloud 0.2.6.dev5__tar.gz → 0.2.7.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.2.6.dev5 → geoservercloud-0.2.7.dev1}/PKG-INFO +1 -1
- {geoservercloud-0.2.6.dev5 → geoservercloud-0.2.7.dev1}/geoservercloud/geoservercloud.py +73 -7
- {geoservercloud-0.2.6.dev5 → geoservercloud-0.2.7.dev1}/geoservercloud/templates.py +6 -0
- {geoservercloud-0.2.6.dev5 → geoservercloud-0.2.7.dev1}/pyproject.toml +1 -1
- {geoservercloud-0.2.6.dev5 → geoservercloud-0.2.7.dev1}/LICENSE +0 -0
- {geoservercloud-0.2.6.dev5 → geoservercloud-0.2.7.dev1}/README.md +0 -0
- {geoservercloud-0.2.6.dev5 → geoservercloud-0.2.7.dev1}/geoservercloud/__init__.py +0 -0
- {geoservercloud-0.2.6.dev5 → geoservercloud-0.2.7.dev1}/geoservercloud/gridsets/2056.xml +0 -0
- {geoservercloud-0.2.6.dev5 → geoservercloud-0.2.7.dev1}/geoservercloud/gridsets/21781.xml +0 -0
- {geoservercloud-0.2.6.dev5 → geoservercloud-0.2.7.dev1}/geoservercloud/gridsets/3857.xml +0 -0
- {geoservercloud-0.2.6.dev5 → geoservercloud-0.2.7.dev1}/geoservercloud/restservice.py +0 -0
- {geoservercloud-0.2.6.dev5 → geoservercloud-0.2.7.dev1}/geoservercloud/utils.py +0 -0
|
@@ -316,16 +316,17 @@ class GeoServerCloud:
|
|
|
316
316
|
native_layer: str,
|
|
317
317
|
published_layer: str | None = None,
|
|
318
318
|
epsg: int = 4326,
|
|
319
|
-
|
|
319
|
+
international_title: dict[str, str] | None = None,
|
|
320
|
+
international_abstract: dict[str, str] | None = None,
|
|
321
|
+
) -> Response:
|
|
320
322
|
"""
|
|
321
|
-
Publish a remote WMTS layer
|
|
323
|
+
Publish a remote WMTS layer (first delete it if it already exists)
|
|
322
324
|
"""
|
|
323
325
|
if not published_layer:
|
|
324
326
|
published_layer = native_layer
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
return None
|
|
327
|
+
resource_path = f"/rest/workspaces/{workspace}/wmtsstores/{wmts_store}/layers/{published_layer}.json"
|
|
328
|
+
if self.resource_exists(resource_path):
|
|
329
|
+
self.delete_request(resource_path, params={"recurse": "true"})
|
|
329
330
|
wmts_store_path = f"/rest/workspaces/{workspace}/wmtsstores/{wmts_store}.json"
|
|
330
331
|
capabilities_url = (
|
|
331
332
|
self.get_request(wmts_store_path)
|
|
@@ -337,7 +338,12 @@ class GeoServerCloud:
|
|
|
337
338
|
|
|
338
339
|
path = f"/rest/workspaces/{workspace}/wmtsstores/{wmts_store}/layers.json"
|
|
339
340
|
payload = Templates.wmts_layer(
|
|
340
|
-
published_layer,
|
|
341
|
+
published_layer,
|
|
342
|
+
native_layer,
|
|
343
|
+
wgs84_bbox=wgs84_bbox,
|
|
344
|
+
epsg=epsg,
|
|
345
|
+
international_title=international_title,
|
|
346
|
+
international_abstract=international_abstract,
|
|
341
347
|
)
|
|
342
348
|
|
|
343
349
|
return self.post_request(path, json=payload)
|
|
@@ -642,6 +648,44 @@ class GeoServerCloud:
|
|
|
642
648
|
else:
|
|
643
649
|
return value_collection.get("wfs:member", {})
|
|
644
650
|
|
|
651
|
+
def create_user(self, user: str, password: str, enabled: bool = True) -> Response:
|
|
652
|
+
"""
|
|
653
|
+
Create a GeoServer user
|
|
654
|
+
"""
|
|
655
|
+
headers: dict[str, str] = {"Content-Type": "application/json"}
|
|
656
|
+
payload: dict[str, dict[str, Any]] = {
|
|
657
|
+
"user": {
|
|
658
|
+
"userName": user,
|
|
659
|
+
"password": password,
|
|
660
|
+
"enabled": enabled,
|
|
661
|
+
}
|
|
662
|
+
}
|
|
663
|
+
return self.post_request(
|
|
664
|
+
"/rest/security/usergroup/users", json=payload, headers=headers
|
|
665
|
+
)
|
|
666
|
+
|
|
667
|
+
def update_user(
|
|
668
|
+
self, user: str, password: str | None = None, enabled: bool | None = None
|
|
669
|
+
) -> Response:
|
|
670
|
+
"""
|
|
671
|
+
Update a GeoServer user
|
|
672
|
+
"""
|
|
673
|
+
headers: dict[str, str] = {"Content-Type": "application/json"}
|
|
674
|
+
payload: dict[str, dict[str, Any]] = {"user": {}}
|
|
675
|
+
if password:
|
|
676
|
+
payload["user"]["password"] = password
|
|
677
|
+
if enabled is not None:
|
|
678
|
+
payload["user"]["enabled"] = enabled
|
|
679
|
+
return self.post_request(
|
|
680
|
+
f"/rest/security/usergroup/user/{user}", json=payload, headers=headers
|
|
681
|
+
)
|
|
682
|
+
|
|
683
|
+
def delete_user(self, user: str) -> Response:
|
|
684
|
+
"""
|
|
685
|
+
Delete a GeoServer user
|
|
686
|
+
"""
|
|
687
|
+
return self.delete_request(f"/rest/security/usergroup/user/{user}")
|
|
688
|
+
|
|
645
689
|
def create_role(self, role_name: str) -> Response:
|
|
646
690
|
"""
|
|
647
691
|
Create a GeoServer role
|
|
@@ -672,6 +716,28 @@ class GeoServerCloud:
|
|
|
672
716
|
roles = response.json().get("roles", [])
|
|
673
717
|
return role_name in roles
|
|
674
718
|
|
|
719
|
+
def get_user_roles(self, user: str) -> list[str] | Response:
|
|
720
|
+
"""
|
|
721
|
+
Get all roles assigned to a GeoServer user
|
|
722
|
+
"""
|
|
723
|
+
response = self.get_request(f"/rest/security/roles/user/{user}.json")
|
|
724
|
+
try:
|
|
725
|
+
return response.json().get("roles")
|
|
726
|
+
except JSONDecodeError:
|
|
727
|
+
return response
|
|
728
|
+
|
|
729
|
+
def assign_role_to_user(self, user: str, role: str) -> Response:
|
|
730
|
+
"""
|
|
731
|
+
Assign a role to a GeoServer user
|
|
732
|
+
"""
|
|
733
|
+
return self.post_request(f"/rest/security/roles/role/{role}/user/{user}")
|
|
734
|
+
|
|
735
|
+
def remove_role_from_user(self, user: str, role: str) -> Response:
|
|
736
|
+
"""
|
|
737
|
+
Remove a role from a GeoServer user
|
|
738
|
+
"""
|
|
739
|
+
return self.delete_request(f"/rest/security/roles/role/{role}/user/{user}")
|
|
740
|
+
|
|
675
741
|
def create_acl_admin_rule(
|
|
676
742
|
self,
|
|
677
743
|
priority: int = 0,
|
|
@@ -264,6 +264,8 @@ class Templates:
|
|
|
264
264
|
native_name: str,
|
|
265
265
|
epsg: int = 4326,
|
|
266
266
|
wgs84_bbox: tuple[float, float, float, float] | None = None,
|
|
267
|
+
international_title: dict[str, str] | None = None,
|
|
268
|
+
international_abstract: dict[str, str] | None = None,
|
|
267
269
|
) -> dict[str, dict[str, Any]]:
|
|
268
270
|
template = {
|
|
269
271
|
"wmtsLayer": {
|
|
@@ -293,6 +295,10 @@ class Templates:
|
|
|
293
295
|
"miny": wgs84_bbox[1],
|
|
294
296
|
"maxy": wgs84_bbox[3],
|
|
295
297
|
}
|
|
298
|
+
if international_title:
|
|
299
|
+
template["wmtsLayer"]["internationalTitle"] = international_title
|
|
300
|
+
if international_abstract:
|
|
301
|
+
template["wmtsLayer"]["internationalAbstract"] = international_abstract
|
|
296
302
|
return template
|
|
297
303
|
|
|
298
304
|
@staticmethod
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "geoservercloud"
|
|
3
|
-
version = "0.2.
|
|
3
|
+
version = "0.2.7.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"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|