diff --git a/src/Mod/AddonManager/Addon.py b/src/Mod/AddonManager/Addon.py
index b5ba4d3998..e20f7651d6 100644
--- a/src/Mod/AddonManager/Addon.py
+++ b/src/Mod/AddonManager/Addon.py
@@ -301,6 +301,7 @@ class Addon:
for dep in metadata.Depend:
# Simple version for now: eventually support all of the version params...
self.requires.add(dep["package"])
+ FreeCAD.Console.PrintLog(f"Package {self.name}: Adding dependency on {dep['package']}\n")
for dep in metadata.Conflict:
self.blocks.add(dep["package"])
diff --git a/src/Mod/AddonManager/AddonManager.py b/src/Mod/AddonManager/AddonManager.py
index 082eaf9354..368e0b420f 100644
--- a/src/Mod/AddonManager/AddonManager.py
+++ b/src/Mod/AddonManager/AddonManager.py
@@ -1005,6 +1005,9 @@ class CommandAddonManager:
if dep not in self.allowed_packages:
bad_packages.append(dep)
+ for dep in bad_packages:
+ python_required.remove(dep)
+
if bad_packages:
message = "
" + translate(
"AddonsInstaller",
@@ -1018,8 +1021,12 @@ class CommandAddonManager:
"
(" + translate("AddonsInstaller", "Too many to list") + ")"
)
message += ""
- QtWidgets.QMessageBox.critical(
- self.dialog, translate("AddonsInstaller", "Missing Requirement"), message
+ message += "To ignore this error and install anyway, press OK."
+ r = QtWidgets.QMessageBox.critical(
+ self.dialog,
+ translate("AddonsInstaller", "Missing Requirement"),
+ message,
+ QtWidgets.QMessageBox.Ok | QtWidgets.QMessageBox.Cancel,
)
FreeCAD.Console.PrintMessage(
translate(
@@ -1030,11 +1037,16 @@ class CommandAddonManager:
)
for package in self.allowed_packages:
FreeCAD.Console.PrintMessage(f" * {package}\n")
- return True
+
+ if r == QtWidgets.QMessageBox.Ok:
+ # Force the installation to proceed
+ return False
+ else:
+ return True
else:
return False
- def report_missing_workbenches(self, addon_name:str, wbs) -> None:
+ def report_missing_workbenches(self, addon_name:str, wbs) -> bool:
if len(wbs) == 1:
name = wbs[0]
message = translate(
@@ -1049,12 +1061,17 @@ class CommandAddonManager:
for wb in wbs:
message += "" + wb + ""
message += ""
- QtWidgets.QMessageBox.critical(
+ message += translate("AddonsInstaller", "Press OK to install anyway.")
+ r = QtWidgets.QMessageBox.critical(
self.dialog,
translate("AddonsInstaller", "Missing Requirement"),
message,
- QtWidgets.QMessageBox.Cancel,
+ QtWidgets.QMessageBox.Ok | QtWidgets.QMessageBox.Cancel,
)
+ if r == QtWidgets.QMessageBox.Ok:
+ return True
+ else:
+ return False
def display_dep_resolution_dialog(self, missing, repo: Addon) -> None:
self.dependency_dialog = FreeCADGui.PySideUic.loadUi(
@@ -1102,9 +1119,10 @@ class CommandAddonManager:
missing.python_optional = good_packages
if missing.wbs:
- # Unrecoverable failure, needs a new version of FreeCAD installation
- self.report_missing_workbenches(repo.display_name, missing.wbs)
- elif (
+ r = self.report_missing_workbenches(repo.display_name, missing.wbs)
+ if r == False:
+ return
+ if (
missing.external_addons
or missing.python_required
or missing.python_optional