Skip to content

Commit 85ff8ac

Browse files
mattiagiupponietj
andauthored
#42 Improve get_style (#43)
* Improve get_style * Improve get_style * Add api for delete single style * Improve get_style() * Syntax fix * Fixes #42 call get_style instead of get_styles in layer_resolve_style * Fixes #42 call get_style instead of get_styles in layer_resolve_style * Fixes #42 call get_style instead of get_styles in layer_resolve_style * Fixes #42 call get_style instead of get_styles in layer_resolve_style * Fixes #42 call get_style instead of get_styles in layer_resolve_style --------- Co-authored-by: Emanuele Tajariol <e.tajariol@gmail.com>
1 parent ca13727 commit 85ff8ac

File tree

4 files changed

+62
-13
lines changed

4 files changed

+62
-13
lines changed

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
setup(
1212
name="geoserver-restconfig",
13-
version="2.0.9",
13+
version="2.0.10",
1414
description="GeoServer REST Configuration",
1515
long_description=readme_text,
1616
keywords="GeoServer REST Configuration",

src/geoserver/catalog.py

Lines changed: 57 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import os
3232
import re
3333
import base64
34+
from requests.exceptions import HTTPError
3435
from xml.etree.ElementTree import XML
3536
from xml.parsers.expat import ExpatError
3637
import requests
@@ -1213,15 +1214,63 @@ def __build_style_list(
12131214

12141215
def get_style(self, name, workspace=None, recursive=False):
12151216
"""
1216-
returns a single style object.
1217+
Get single style from geoserver.
1218+
Keyword arguments:
1219+
name(str): name of the style
1220+
Optional keyword arguments:
1221+
workspace(str): name of the workspce where the style belong
1222+
Legacy:
1223+
recursive(bool): no longer used
1224+
Return
1225+
a single style object.
12171226
Will return None if no style is found.
12181227
Will raise an error if more than one style with the same name is found.
12191228
"""
12201229

1221-
styles = self.get_styles(
1222-
names=name, workspaces=[workspace], recursive=recursive
1223-
)
1224-
return self._return_first_item(styles)
1230+
url = f"{self.service_url}/workspaces/{workspace}/styles/{name}.json" if workspace \
1231+
else f"{self.service_url}/styles/{name}.json"
1232+
1233+
try:
1234+
resp = self.http_request(url, headers={"Accept": "application/json"})
1235+
resp.raise_for_status()
1236+
payload = resp.json()['style']
1237+
extracted_workspace = payload['workspace'].get("name", workspace) if payload.get("workspace") else workspace
1238+
return Style(
1239+
self,
1240+
payload['name'],
1241+
extracted_workspace,
1242+
payload['format'] + payload['languageVersion']['version'],
1243+
)
1244+
1245+
except HTTPError as e:
1246+
if resp.status_code == 404:
1247+
return None
1248+
logger.exception(e)
1249+
raise e
1250+
except Exception as e:
1251+
logger.exception(e)
1252+
raise e
1253+
1254+
def delete_style(self, name, workspace=None, purge=True):
1255+
if workspace:
1256+
'''
1257+
If workspace is passed, we call directly the wanted style
1258+
'''
1259+
url = f"{self.service_url}/workspaces/{workspace}/styles/{name}?purge={purge}"
1260+
else:
1261+
'''
1262+
If is not passed, we try to get the style without passing any workspace
1263+
'''
1264+
url = f"{self.service_url}/styles/{name}?purge={purge}"
1265+
1266+
try:
1267+
resp = self.http_request(url, method="DELETE")
1268+
if resp.status_code != 404:
1269+
resp.raise_for_status()
1270+
return resp.status_code == 201
1271+
except Exception as e:
1272+
logger.exception(e)
1273+
raise e
12251274

12261275
def create_style(
12271276
self,
@@ -1232,9 +1281,9 @@ def create_style(
12321281
style_format="sld10",
12331282
raw=False,
12341283
):
1235-
styles = self.get_styles(names=name, workspaces=[workspace], recursive=True)
1236-
if len(styles) > 0:
1237-
style = styles[0]
1284+
styles = self.get_style(name=name, workspace=workspace, recursive=True)
1285+
if styles:
1286+
style = styles
12381287
else:
12391288
style = None
12401289

src/geoserver/layer.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -166,9 +166,9 @@ def _resolve_style(self, element, recursive=False):
166166
atom_link = [n for n in element if "href" in n.attrib]
167167
if atom_link and ws_name is None:
168168
ws_name = workspace_from_url(atom_link[0].get("href"))
169-
return self.catalog.get_styles(
170-
names=style_name, workspaces=ws_name, recursive=recursive
171-
)[0]
169+
return self.catalog.get_style(
170+
name=style_name, workspace=ws_name, recursive=recursive
171+
)
172172
return None
173173

174174
def _set_default_style(self, style):

src/geoserver/style.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020

2121
class Style(ResourceInfo):
22-
supported_formats = ["sld10", "sld11", "zip10", "css10"]
22+
supported_formats = ["sld10", "sld11", "zip10", "css10", "sld1.0.0"]
2323
content_types = {
2424
"sld10": "application/vnd.ogc.sld+xml",
2525
"sld11": "application/vnd.ogc.se+xml",

0 commit comments

Comments
 (0)