polished dependency enforcement

This commit is contained in:
Brennen Raimer
2019-04-30 15:40:20 -04:00
parent e1237985b8
commit 77a13e2753

View File

@@ -303,13 +303,26 @@ class InstallerWizard(QtWidgets.QWizard):
#find all checked items and build a set of their dependencies
selected = self._get_selections()
dependencies_of_selected = set()
names_of_dependant_items = []
for selected_item in selected:
try:
dependencies_of_selected |= set((tools_by_name[selected_item.text(0)]["depends on"]).split(","))
except KeyError:
pass
else:
if item.text(0) in (tools_by_name[selected_item.text(0)]["depends on"]).split(","):
names_of_dependant_items.append(selected_item.text(0))
#if the item that was just unchecked is a dependency of another selected item
if item.text(0) in dependencies_of_selected:
self._display_error(f"Selected items depend on {item.text(0)}")
#build a gramatically correct error (minus oxford comma (sorry!!))
if len(names_of_dependant_items) > 1:
for name in names_of_dependant_items[1:-1]:
name = f", {name}"
names_of_dependant_items[-1] = f" and {names_of_dependant_items[-1]}"
depend_text = "depend"
else:
depend_text = "depends"
#display the error and disallow unchecking item while something that depends on it is selected
self._display_error(f"{str().join(names_of_dependant_items)} {depend_text} on {item.text(0)}")
item.setCheckState(0, QtCore.Qt.Checked)