def pearl(sys_args: list, pearl_home_dir: Path = None): verify_runtime_deps() args = parse_args(sys_args) if args.verbose: messenger.enable_debug() messenger.debug(args) try: pearl_env = PearlEnvironment( home=pearl_home_dir, config_filename=args.config_file, update_repos=args.update_repos, verbose=args.verbose, env_initialized=False if args.command == 'init' else True) _pearl(pearl_env, args) except PearlError as ex: message = ex.args[0] if ex.args else None if args.verbose: messenger.exception(f'Pearl error: {message}') else: messenger.error(message) exit(ex.exit_status)
def load_packages(self, update_repos=False, verbose: int = 0): packages = OrderedDict() config_filenames = [self.config_filename] while config_filenames: config_filename = config_filenames.pop(0) messenger.debug( f"Loading Pearl configuration: {config_filename}...") pearl_conf = self._load_conf(config_filename) packages.update({pearl_conf.repo_name: pearl_conf.packages}) messenger.debug( f"Loaded Pearl configuration: {config_filename}. Repo name: {pearl_conf.repo_name}, number of packages: {len(pearl_conf.packages)}" ) repo_conf_filenames = self._load_repos(self.home, pearl_conf.repos, update_repos, verbose) config_filenames.extend(repo_conf_filenames) return packages
def _get_home(home: Path = None, env_initialized: bool = True) -> Path: if home is None: xdg_data_home = os.environ.get( 'XDG_DATA_HOME', f"{os.environ['HOME']}/.local/share") default_home = f'{xdg_data_home}/pearl' home = Path(default_home) messenger.debug(f"Found Pearl home: {home}") if env_initialized: if home.exists() and not home.is_dir(): msg = f'Error: The value in environment variable PEARL_HOME is not a directory: {home}.' messenger.warn(msg) raise ValueError(msg) elif not home.exists(): msg = 'Pearl environment has not been initialized. Run "pearl init" first.' messenger.warn(msg) raise ValueError(msg) return home