def test_pull_asset_works_with_nonwritable_and_writable_rgc( cfg_file, gname, aname, tname, state): rgc = RefGenConf(filepath=cfg_file, writable=state) remove_asset_and_file(rgc, gname, aname, tname) with mock.patch("refgenconf.refgenconf.query_yes_no", return_value=True): print("\nPulling; genome: {}, asset: {}, tag: {}\n".format( gname, aname, tname)) rgc.pull_asset(gname, aname, tname)
def test_pull_asset_updates_genome_config(cfg_file, gname, aname, tname): """ Test that the object that was identical prior to the asset pull differs afterwards and the pulled asset metadata has been written to the config file """ ori_rgc = RefGenConf(filepath=cfg_file, writable=False) rgc = RefGenConf(filepath=cfg_file, writable=False) remove_asset_and_file(rgc, gname, aname, tname) remove_asset_and_file(ori_rgc, gname, aname, tname) # ori_rgc.remove_assets(gname, aname, tname) assert ori_rgc.to_dict() == rgc.to_dict() with mock.patch("refgenconf.refgenconf.query_yes_no", return_value=True): print("\nPulling; genome: {}, asset: {}, tag: {}\n".format( gname, aname, tname)) rgc.pull_asset(gname, aname, tname) assert not ori_rgc.to_dict() == rgc.to_dict() post_rgc = RefGenConf(filepath=cfg_file, writable=False) assert isinstance(post_rgc.get_asset(gname, aname, tname), str)
def main(): """ Primary workflow """ parser = logmuse.add_logging_options(build_argparser()) args, remaining_args = parser.parse_known_args() global _LOGGER _LOGGER = logmuse.logger_via_cli(args) logmuse.logger_via_cli(args, name=refgenconf.__name__) _LOGGER.debug("Args: {}".format(args)) if not args.command: parser.print_help() _LOGGER.error("No command given") sys.exit(1) gencfg = yacman.select_config(args.genome_config, CFG_ENV_VARS, check_exist=not args.command == INIT_CMD, on_missing=lambda fp: fp) if gencfg is None: raise MissingGenomeConfigError(args.genome_config) _LOGGER.debug("Determined genome config: {}".format(gencfg)) if args.command == INIT_CMD: _LOGGER.info("Initializing refgenie genome configuration") _writeable(os.path.dirname(gencfg), strict_exists=True) refgenie_init(gencfg, args.genome_server) sys.exit(0) rgc = RefGenConf(gencfg) if args.command == BUILD_CMD: refgenie_build(rgc, args) elif args.command == GET_ASSET_CMD: _LOGGER.debug("getting asset: '{}/{}'".format(args.genome, args.asset)) print(" ".join( [rgc.get_asset(args.genome, asset) for asset in args.asset])) return elif args.command == INSERT_CMD: if len(args.asset) > 1: raise NotImplementedError("Can only add 1 asset at a time") else: # recast from list to str args.asset = args.asset[0] refgenie_add(rgc, args) elif args.command == PULL_CMD: outdir = rgc[CFG_FOLDER_KEY] if not os.path.exists(outdir): raise MissingFolderError(outdir) target = _key_to_name(CFG_FOLDER_KEY) if not perm_check_x(outdir, target): return if not _single_folder_writeable(outdir): _LOGGER.error("Insufficient permissions to write to {}: " "{}".format(target, outdir)) return rgc.pull_asset(args.genome, args.asset, gencfg, unpack=not args.no_untar) elif args.command in [LIST_LOCAL_CMD, LIST_REMOTE_CMD]: pfx, genomes, assets = _exec_list(rgc, args.command == LIST_REMOTE_CMD) _LOGGER.info("{} genomes: {}".format(pfx, genomes)) _LOGGER.info("{} assets:\n{}".format(pfx, assets))