@@ -56,8 +56,10 @@ class WmsServiceHandler(base.ServiceHandlerBase, base.CascadableServiceHandlerMi
5656
5757 service_type = enumerations .WMS
5858
59- def __init__ (self , url , geonode_service_id = None ):
59+ def __init__ (self , url , geonode_service_id = None , * args , ** kwargs ):
6060 base .ServiceHandlerBase .__init__ (self , url , geonode_service_id )
61+ self .args = args
62+ self .kwargs = kwargs
6163 self ._parsed_service = None
6264 self .indexing_method = INDEXED if self ._offers_geonode_projection () else CASCADED
6365 self .name = slugify (self .url )[:255 ]
@@ -93,7 +95,12 @@ def get_cleaned_url_params(url):
9395 @property
9496 def parsed_service (self ):
9597 cleaned_url , service , version , request = WmsServiceHandler .get_cleaned_url_params (self .url )
96- _url , _parsed_service = WebMapService (cleaned_url .geturl (), version = version )
98+ _url , _parsed_service = WebMapService (
99+ cleaned_url .geturl (),
100+ version = version ,
101+ username = self .kwargs .get ("username" ),
102+ password = self .kwargs .get ("password" ),
103+ )
97104 return _parsed_service
98105
99106 def probe (self ):
@@ -122,43 +129,52 @@ def create_geonode_service(self, owner, parent=None):
122129 :type owner: geonode.people.models.Profile
123130
124131 """
125- cleaned_url , service , version , request = WmsServiceHandler .get_cleaned_url_params (self .url )
126- with transaction .atomic ():
127- instance = models .Service .objects .create (
128- uuid = str (uuid4 ()),
129- base_url = f"{ cleaned_url .scheme } ://{ cleaned_url .netloc } { cleaned_url .path } " .encode (
130- "utf-8" , "ignore"
131- ).decode ("utf-8" ),
132- extra_queryparams = cleaned_url .query ,
133- type = self .service_type ,
134- method = self .indexing_method ,
135- owner = owner ,
136- metadata_only = True ,
137- version = str (self .parsed_service .identification .version ).encode ("utf-8" , "ignore" ).decode ("utf-8" ),
138- name = self .name ,
139- title = str (self .parsed_service .identification .title ).encode ("utf-8" , "ignore" ).decode ("utf-8" )
140- or self .name ,
141- abstract = str (self .parsed_service .identification .abstract ).encode ("utf-8" , "ignore" ).decode ("utf-8" )
142- or _ ("Not provided" ),
143- operations = OgcWmsHarvester .get_wms_operations (self .parsed_service .url , version = version ),
144- )
145- service_harvester = Harvester .objects .create (
146- name = self .name ,
147- default_owner = owner ,
148- scheduling_enabled = False ,
149- remote_url = instance .service_url ,
150- delete_orphan_resources_automatically = True ,
151- harvester_type = enumerations .HARVESTER_TYPES [self .service_type ],
152- harvester_type_specific_configuration = self .get_harvester_configuration_options (),
153- )
154- if service_harvester .update_availability ():
155- service_harvester .initiate_update_harvestable_resources ()
156- else :
157- logger .exception (GeoNodeException ("Could not reach remote endpoint." ))
158- instance .harvester = service_harvester
159-
160- self .geonode_service_id = instance .id
161- return instance
132+ service = None
133+ try :
134+ cleaned_url , service , version , request = WmsServiceHandler .get_cleaned_url_params (self .url )
135+ with transaction .atomic ():
136+ service = models .Service .objects .create (
137+ uuid = str (uuid4 ()),
138+ base_url = f"{ cleaned_url .scheme } ://{ cleaned_url .netloc } { cleaned_url .path } " .encode (
139+ "utf-8" , "ignore"
140+ ).decode ("utf-8" ),
141+ extra_queryparams = cleaned_url .query ,
142+ type = self .service_type ,
143+ method = self .indexing_method ,
144+ owner = owner ,
145+ metadata_only = True ,
146+ version = str (self .parsed_service .identification .version ).encode ("utf-8" , "ignore" ).decode ("utf-8" ),
147+ name = self .name ,
148+ title = str (self .parsed_service .identification .title ).encode ("utf-8" , "ignore" ).decode ("utf-8" )
149+ or self .name ,
150+ abstract = str (self .parsed_service .identification .abstract ).encode ("utf-8" , "ignore" ).decode ("utf-8" )
151+ or _ ("Not provided" ),
152+ operations = OgcWmsHarvester .get_wms_operations (self .parsed_service .url , version = version ),
153+ username = self .kwargs .get ("username" , None ),
154+ password = self .kwargs .get ("password" , None ),
155+ )
156+ service_harvester = Harvester .objects .create (
157+ name = self .name ,
158+ default_owner = owner ,
159+ scheduling_enabled = False ,
160+ remote_url = service .service_url ,
161+ delete_orphan_resources_automatically = True ,
162+ harvester_type = enumerations .HARVESTER_TYPES [self .service_type ],
163+ harvester_type_specific_configuration = self .get_harvester_configuration_options (),
164+ )
165+ service .harvester = service_harvester
166+ service .save ()
167+ if service_harvester .update_availability ():
168+ service_harvester .initiate_update_harvestable_resources ()
169+ else :
170+ logger .exception (GeoNodeException ("Could not reach remote endpoint." ))
171+
172+ self .geonode_service_id = service .id
173+ except Exception as e :
174+ logger .exception (e )
175+ if service :
176+ service .delete ()
177+ return service
162178
163179 def get_keywords (self ):
164180 return self .parsed_service .identification .keywords
@@ -261,8 +277,11 @@ class GeoNodeServiceHandler(WmsServiceHandler):
261277
262278 service_type = enumerations .GN_WMS
263279
264- def __init__ (self , url , geonode_service_id = None ):
280+ def __init__ (self , url , geonode_service_id = None , * args , ** kwargs ):
265281 base .ServiceHandlerBase .__init__ (self , url , geonode_service_id )
282+ self .args = args
283+ self .kwargs = kwargs
284+
266285 self .indexing_method = INDEXED
267286 self .name = slugify (self .url )[:255 ]
268287
0 commit comments