def __init__(self, cmd, args): CommandBase.__init__(self, cmd, args, load_recipes=True, require_prefix=False, ) self.package_manager = package_manager.PackageManager() if args.all: self.args.packages = recipe_manager.list_all() else: self.args.packages = args.packages[0] # wat? if len(self.args.packages) == 0: self.log.error("No packages specified.") exit(1)
def run(self): self.pid = os.getpid() self.pid_info.emit(self.pid) instaman = install_manager.InstallManager() if 'install' in self.package_list: install_list = self.package_list.get('install') for package in install_list: self.worker_log.info('Preparing {} for installation'.format(package)) if instaman.install([package], 'install'): self.worker_log.info("Install {} successful".format(package)) pkg_index = install_list.index(package)+1 progress = (pkg_index/len(install_list))* 100.0 self.progress_tick.emit(pkg_index, progress, len(install_list), 'install') else: self.worker_log.error("Install Failed") self.error_info.emit('install', "Install {} failed. Check logs !".format(package)) if 'update' in self.package_list: update_list = self.package_list.get('update') for package in update_list: self.worker_log.info("Preparing {} to update".format(package)) if instaman.install([package], 'update', update_if_exists=True): self.worker_log.info("Update {} successful".format(package)) pkg_index = update_list.index(package)+1 progress = (pkg_index/len(update_list))* 100.0 self.progress_tick.emit(pkg_index, progress, len(update_list), 'update') else: self.worker_log.error("Update Failed") self.error_info.emit( "Update {} failed. Check logs !".format(package)) if 'remove' in self.package_list: remove_list = self.package_list.get('remove') pm = package_manager.PackageManager() dep_tree = dep_manager.DepManager().make_dep_tree( self.package_list.get('remove'), lambda x: bool(x in self.package_list.get('remove'))) remove = reversed(dep_tree.serialize()) ### Remove packages for pkg in remove: #Uninstall: self.worker_log.info("Preparing {} to remove".format(pkg)) if pm.uninstall(pkg): self.worker_log.info("Uninstall {} successful !".format(pkg)) pkg_index = remove_list.index(pkg)+1 progress = (pkg_index/len(remove_list))* 100.0 self.progress_tick.emit(pkg_index, progress, len(remove_list), 'remove') #Remove entry from inventory: self.inventory.remove(pkg) self.inventory.save() else: self.worker_log.error("Failed to remove {}".format(pkg)) self.error_info.emit( "Removing {} unsuccessful. Check logs !".format(pkg)) self.info_tick.emit("Tasks Completed successfully !") return
def run(self): """This is where we generate our data and provide a signal it to the GUI """ self.indicator.emit("Collecting packages for PyBOMBS") #Init lists required to hold our data app_package_list = [] sdk_package_list = [] app_package_data = [] sdk_package_data = [] base_package_data = [] pm = package_manager.PackageManager() #cfg = config_manager.config_manager #TODO Correctly list out recipes based on the prefix selected list_recipes = sorted(list(recipe_manager.recipe_manager.list_all())) for pkg_name in list_recipes: module = Recipe(recipe_manager.recipe_manager. get_recipe_filename(pkg_name)) if module.target == 'prefix': sdk_package_list.append(pkg_name) elif module.target == 'sdk': sdk_package_list.append(pkg_name) elif module.target == 'package': app_package_list.append(pkg_name) self.indicator.emit("Preparing SDK packages") self.log.info("Preparing SDK packages") for pkg in sdk_package_list: rec = Recipe(recipe_manager.recipe_manager.get_recipe_filename(pkg)) if rec.target == 'prefix': sdk_package_data.append([pkg, 'Prefix Specific Packages']) elif rec.target == 'sdk': sdk_package_data.append([pkg, 'SDK Packages']) self.log.info("Loading SDK packages - successful !") self.indicator.emit("Preparing application and baseline packages") self.log.info("Preparing application and baseline packages") for oot_module in app_package_list: rec = recipe.get_recipe(oot_module, target='package', fail_easy=True) if rec.category == 'baseline': if pm.installed(oot_module): base_package_data.append([oot_module, 'Installed']) else: base_package_data.append([oot_module, 'Not Installed']) else: if 'description' in rec.get_dict(): if pm.installed(oot_module): app_package_data.append([oot_module, rec.get_dict()['category'], 'Installed', rec.get_dict()['description']]) else: app_package_data.append([oot_module, rec.get_dict()['category'], 'Not Installed', rec.get_dict()['description']]) else: if pm.installed(oot_module): app_package_data.append([oot_module, rec.get_dict()['category'], 'Installed', 'No description available']) else: app_package_data.append([oot_module, rec.get_dict()['category'], 'Not Installed', 'No description available']) self.data_generator.emit(app_package_data, base_package_data, sdk_package_data) self.log.info("Loading application and baseline packages - Successful !") self.data_done.emit("Data successfully loaded") return
def context_menu_baseline(self): """Custom ContextMenu that helps us install/update/remove OOT Modules from the list displayed on tableWidget """ pm = package_manager.PackageManager() #Following three lines will return the package name irrespective of where #mouse click event happens on the row associated with the package indexes = self.ui.tableWidget_3.selectionModel().selectedRows() for index in indexes: package_name = self.ui.tableWidget_3.model().index(index.row(), 0).data() #Our custom context menu menu = QMenu(self) install = menu.addAction("&Mark Install") update = menu.addAction("&Mark Update") remove = menu.addAction("&Mark Remove") discard = menu.addAction("&Discard Changes") menu.addSeparator() module_info = menu.addAction("&Module Info") discard.setEnabled(False) if pm.installed(package_name): install.setEnabled(False) else: update.setEnabled(False) remove.setEnabled(False) if package_name in self.install_material: install.setEnabled(False) discard.setEnabled(True) if package_name in self.update_material: update.setEnabled(False) discard.setEnabled(True) if package_name in self.remove_material: remove.setEnabled(False) discard.setEnabled(True) action = menu.exec_(QCursor.pos()) #Here's where our context menu gets some work to do if action == install: self.install_material.append(package_name) if action == update: self.update_material.append(package_name) if action == remove: self.remove_material.append(package_name) if action == discard: if package_name in self.install_material: self.install_material.remove(package_name) if package_name in self.update_material: self.update_material.remove(package_name) if package_name in self.remove_material: self.remove_material.remove(package_name) if (self.install_material or self.update_material or self.remove_material): self.ui.action_Apply.setEnabled(True) else: self.ui.action_Apply.setEnabled(False) if action == module_info: self.module_info_popup(package_name)