def __init__(self, name, description, category, logo_path=None, is_category_default=False, install_path_dir=None, only_on_archs=None, only_ubuntu_version=None, packages_requirements=None): self.name = name self.description = description self.logo_path = None self.category = category self.is_category_default = is_category_default self.only_on_archs = [] if only_on_archs is None else only_on_archs self.only_ubuntu_version = [] if only_ubuntu_version is None else only_ubuntu_version self.packages_requirements = [] if packages_requirements is None else packages_requirements self.packages_requirements.extend(self.category.packages_requirements) # don't detect anything for completion mode (as we need to be quick), so avoid opening apt cache and detect # if it's installed. if is_completion_mode(): category.register_framework(self) return self.need_root_access = False with suppress(KeyError): self.need_root_access = not RequirementsHandler().is_bucket_installed(self.packages_requirements) if self.is_category_default: if self.category == BaseCategory.main_category: logger.error("Main category can't have default framework as {} requires".format(name)) self.is_category_default = False elif self.category.default_framework is not None: logger.error("Can't set {} as default for {}: this category already has a default framework ({}). " "Don't set any as default".format(category.name, name, self.category.default_framework.name)) self.is_category_default = False self.category.default_framework.is_category_default = False if not install_path_dir: install_path_dir = os.path.join("" if category.is_main_category else category.prog_name, self.prog_name) self.default_install_path = os.path.join(DEFAULT_INSTALL_TOOLS_PATH, install_path_dir) self.install_path = self.default_install_path # check if we have an install path previously set config = ConfigHandler().config try: self.install_path = config["frameworks"][category.prog_name][self.prog_name]["path"] except (TypeError, KeyError, FileNotFoundError): pass # This requires install_path and will register need_root or not if not self.is_installed and not self.is_installable: logger.info("Don't register {} as it's not installable on this configuration.".format(name)) return category.register_framework(self)
def test_not_incompletion_mode(self): """We are not in completion mode by default""" self.assertFalse(tools.is_completion_mode())
def test_in_completion_mode(self): """We return if we are in completion mode""" os.environ["_ARGCOMPLETE"] = "1" self.assertTrue(tools.is_completion_mode())