3131import os
3232import re
3333import base64
34+ from requests .exceptions import HTTPError
3435from xml .etree .ElementTree import XML
3536from xml .parsers .expat import ExpatError
3637import 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
0 commit comments