Skip to content

Commit 1457e7d

Browse files
properly delete providers on Delete Selected
1 parent 7496b84 commit 1457e7d

File tree

3 files changed

+40
-3
lines changed

3 files changed

+40
-3
lines changed

pygeoapi_config_dialog.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -420,6 +420,12 @@ def edit_res_provider(self):
420420

421421
def delete_res_provider(self):
422422
"""Called from .ui file."""
423+
424+
# first, get selected item text and delete matching provider from Resource providers
425+
self.data_from_ui_setter.delete_selected_provider_type_and_name(
426+
self.listWidgetResProvider
427+
)
428+
# then, remove the item from the list widget
423429
self.ui_setter.delete_list_widget_selected_item(self.listWidgetResProvider)
424430

425431
def filterResources(self, filter):

ui_widgets/DataSetterFromUi.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,37 @@ def set_resource_data_from_ui(self):
314314
if res_name in config_data.resources:
315315
config_data.resources[new_alias] = config_data.resources.pop(res_name)
316316

317+
def delete_selected_provider_type_and_name(self, list_widget):
318+
"""Find and remove first matching resource provider with specified type and name."""
319+
dialog: PygeoapiConfigDialog = self.dialog
320+
config_data: ConfigData = dialog.config_data
321+
res_name = dialog.current_res_name
322+
323+
# get selected provider data from a widget (by selection index)
324+
providers_data_lists: list[list] = unpack_listwidget_values_to_sublists(
325+
list_widget
326+
)
327+
selected_index = list_widget.currentRow()
328+
if selected_index < 0:
329+
return
330+
selected_pr_data = providers_data_lists[selected_index]
331+
selected_pr_type = get_enum_value_from_string(
332+
ProviderTypes, selected_pr_data[0]
333+
)
334+
selected_pr_name = selected_pr_data[1]
335+
336+
# iterate through resource providers and delete the first matching one
337+
for res_provider in config_data.resources[res_name].providers:
338+
if isinstance(res_provider, dict):
339+
continue # ignore read-only providers
340+
341+
if (
342+
res_provider.name == selected_pr_name
343+
and res_provider.type == selected_pr_type
344+
):
345+
config_data.resources[res_name].providers.remove(res_provider)
346+
break
347+
317348
def get_extents_crs_from_ui(self, dialog):
318349
return (
319350
"http://www.opengis.net/def/crs/"

ui_widgets/UiSetter.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -595,6 +595,6 @@ def add_listwidget_element_from_multi_widgets(
595595

596596
def delete_list_widget_selected_item(self, list_widget):
597597
"""Delete selected List item from widget."""
598-
selected_item = list_widget.currentRow()
599-
if selected_item >= 0:
600-
list_widget.takeItem(selected_item)
598+
selected_index = list_widget.currentRow()
599+
if selected_index >= 0:
600+
list_widget.takeItem(selected_index)

0 commit comments

Comments
 (0)