diff --git a/src/Mod/AddonManager/AddonManager.py b/src/Mod/AddonManager/AddonManager.py index 3ff0b08ece..30b7b5f9a0 100644 --- a/src/Mod/AddonManager/AddonManager.py +++ b/src/Mod/AddonManager/AddonManager.py @@ -25,6 +25,7 @@ # *************************************************************************** import os +import functools import shutil import stat import tempfile @@ -611,7 +612,7 @@ class CommandAddonManager: self.startup_sequence.append(self.load_macro_metadata) selection = pref.GetString("SelectedAddon", "") if selection: - self.startup_sequence.insert(2, lambda: self.select_addon(selection)) + self.startup_sequence.insert(2, functools.partial(self.select_addon, selection)) pref.SetString("SelectedAddon", "") if ADDON_MANAGER_DEVELOPER_MODE: self.startup_sequence.append(self.validate) @@ -1019,16 +1020,17 @@ class CommandAddonManager: def __init__(self, repo: Addon, all_repos: List[Addon]): deps = Addon.Dependencies() - repo_name_dict = dict() + repo_name_dict = {} for r in all_repos: - repo_name_dict[repo.name] = r - repo_name_dict[repo.display_name] = r + repo_name_dict[r.name] = r + repo_name_dict[r.display_name] = r + repo.walk_dependency_tree(repo_name_dict, deps) self.external_addons = [] for dep in deps.required_external_addons: if dep.status() == Addon.Status.NOT_INSTALLED: - self.external_addons.append(dep) + self.external_addons.append(dep.name) # Now check the loaded addons to see if we are missing an internal workbench: wbs = [wb.lower() for wb in FreeCADGui.listWorkbenches()] @@ -1202,10 +1204,10 @@ class CommandAddonManager: self.dependency_dialog.buttonBox.button( QtWidgets.QDialogButtonBox.Yes - ).clicked.connect(lambda: self.dependency_dialog_yes_clicked(repo)) + ).clicked.connect(functools.partial(self.dependency_dialog_yes_clicked, repo)) self.dependency_dialog.buttonBox.button( QtWidgets.QDialogButtonBox.Ignore - ).clicked.connect(lambda: self.dependency_dialog_ignore_clicked(repo)) + ).clicked.connect(functools.partial(self.dependency_dialog_ignore_clicked, repo)) self.dependency_dialog.buttonBox.button( QtWidgets.QDialogButtonBox.Cancel ).setDefault(True) @@ -1247,7 +1249,7 @@ class CommandAddonManager: # No missing deps, just install self.install(repo) - def dependency_dialog_yes_clicked(self, repo: Addon) -> None: + def dependency_dialog_yes_clicked(self, installing_repo: Addon) -> None: # Get the lists out of the dialog: addons = [] for row in range(self.dependency_dialog.listWidgetAddons.count()): @@ -1272,15 +1274,15 @@ class CommandAddonManager: addons, python_required, python_optional ) self.dependency_installation_worker.no_python_exe.connect( - lambda: self.no_python_exe(repo) + functools.partial(self.no_python_exe, installing_repo) ) self.dependency_installation_worker.no_pip.connect( - lambda command: self.no_pip(command, repo) + functools.partial(self.no_pip, repo=installing_repo) ) self.dependency_installation_worker.failure.connect( self.dependency_installation_failure ) - self.dependency_installation_worker.success.connect(lambda: self.install(repo)) + self.dependency_installation_worker.success.connect(functools.partial(self.install,installing_repo)) self.dependency_installation_dialog = QtWidgets.QMessageBox( QtWidgets.QMessageBox.Information, translate("AddonsInstaller", "Installing dependencies"), @@ -1444,10 +1446,10 @@ class CommandAddonManager: self.update_all_worker.progress_made.connect(self.update_progress_bar) self.update_all_worker.status_message.connect(self.show_information) self.update_all_worker.success.connect( - lambda repo: self.subupdates_succeeded.append(repo) + functools.partial (self.subupdates_succeeded.append, repo) ) self.update_all_worker.failure.connect( - lambda repo: self.subupdates_failed.append(repo) + functools.partial(self.subupdates_failed.append, repo) ) self.update_all_worker.finished.connect(self.on_update_all_completed) self.update_all_worker.start()