31
31
import os
32
32
import re
33
33
import base64
34
+ from requests .exceptions import HTTPError
34
35
from xml .etree .ElementTree import XML
35
36
from xml .parsers .expat import ExpatError
36
37
import requests
@@ -1213,15 +1214,63 @@ def __build_style_list(
1213
1214
1214
1215
def get_style (self , name , workspace = None , recursive = False ):
1215
1216
"""
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.
1217
1226
Will return None if no style is found.
1218
1227
Will raise an error if more than one style with the same name is found.
1219
1228
"""
1220
1229
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
1225
1274
1226
1275
def create_style (
1227
1276
self ,
@@ -1232,9 +1281,9 @@ def create_style(
1232
1281
style_format = "sld10" ,
1233
1282
raw = False ,
1234
1283
):
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
1238
1287
else :
1239
1288
style = None
1240
1289
0 commit comments