Skip to content

Commit

Permalink
#42 Improve get_style (#43)
Browse files Browse the repository at this point in the history
* 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>
  • Loading branch information
mattiagiupponi and etj committed Jan 8, 2024
1 parent ca13727 commit 85ff8ac
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 13 deletions.
2 changes: 1 addition & 1 deletion setup.py
Expand Up @@ -10,7 +10,7 @@

setup(
name="geoserver-restconfig",
version="2.0.9",
version="2.0.10",
description="GeoServer REST Configuration",
long_description=readme_text,
keywords="GeoServer REST Configuration",
Expand Down
65 changes: 57 additions & 8 deletions src/geoserver/catalog.py
Expand Up @@ -31,6 +31,7 @@
import os
import re
import base64
from requests.exceptions import HTTPError
from xml.etree.ElementTree import XML
from xml.parsers.expat import ExpatError
import requests
Expand Down Expand Up @@ -1213,15 +1214,63 @@ def __build_style_list(

def get_style(self, name, workspace=None, recursive=False):
"""
returns a single style object.
Get single style from geoserver.
Keyword arguments:
name(str): name of the style
Optional keyword arguments:
workspace(str): name of the workspce where the style belong
Legacy:
recursive(bool): no longer used
Return
a single style object.
Will return None if no style is found.
Will raise an error if more than one style with the same name is found.
"""

styles = self.get_styles(
names=name, workspaces=[workspace], recursive=recursive
)
return self._return_first_item(styles)
url = f"{self.service_url}/workspaces/{workspace}/styles/{name}.json" if workspace \
else f"{self.service_url}/styles/{name}.json"

try:
resp = self.http_request(url, headers={"Accept": "application/json"})
resp.raise_for_status()
payload = resp.json()['style']
extracted_workspace = payload['workspace'].get("name", workspace) if payload.get("workspace") else workspace
return Style(
self,
payload['name'],
extracted_workspace,
payload['format'] + payload['languageVersion']['version'],
)

except HTTPError as e:
if resp.status_code == 404:
return None
logger.exception(e)
raise e
except Exception as e:
logger.exception(e)
raise e

def delete_style(self, name, workspace=None, purge=True):
if workspace:
'''
If workspace is passed, we call directly the wanted style
'''
url = f"{self.service_url}/workspaces/{workspace}/styles/{name}?purge={purge}"
else:
'''
If is not passed, we try to get the style without passing any workspace
'''
url = f"{self.service_url}/styles/{name}?purge={purge}"

try:
resp = self.http_request(url, method="DELETE")
if resp.status_code != 404:
resp.raise_for_status()
return resp.status_code == 201
except Exception as e:
logger.exception(e)
raise e

def create_style(
self,
Expand All @@ -1232,9 +1281,9 @@ def create_style(
style_format="sld10",
raw=False,
):
styles = self.get_styles(names=name, workspaces=[workspace], recursive=True)
if len(styles) > 0:
style = styles[0]
styles = self.get_style(name=name, workspace=workspace, recursive=True)
if styles:
style = styles
else:
style = None

Expand Down
6 changes: 3 additions & 3 deletions src/geoserver/layer.py
Expand Up @@ -166,9 +166,9 @@ def _resolve_style(self, element, recursive=False):
atom_link = [n for n in element if "href" in n.attrib]
if atom_link and ws_name is None:
ws_name = workspace_from_url(atom_link[0].get("href"))
return self.catalog.get_styles(
names=style_name, workspaces=ws_name, recursive=recursive
)[0]
return self.catalog.get_style(
name=style_name, workspace=ws_name, recursive=recursive
)
return None

def _set_default_style(self, style):
Expand Down
2 changes: 1 addition & 1 deletion src/geoserver/style.py
Expand Up @@ -19,7 +19,7 @@


class Style(ResourceInfo):
supported_formats = ["sld10", "sld11", "zip10", "css10"]
supported_formats = ["sld10", "sld11", "zip10", "css10", "sld1.0.0"]
content_types = {
"sld10": "application/vnd.ogc.sld+xml",
"sld11": "application/vnd.ogc.se+xml",
Expand Down

0 comments on commit 85ff8ac

Please sign in to comment.