def implementation(logger, args): list_of_files = {} if path_exists(args.sg_local_path, logger=logger, force=True): for (dirpath, dirnames, filenames) in os.walk(args.sg_local_path): for filename in filenames: list_of_files[filename] = os.sep.join([dirpath, filename]) logger.debug(list_of_files) gi = GalaxyInstance(args.url, key=args.key) tools = gi.tools.get_tools() counter_singularity = 0 counter_docker = 0 match = {} unmatch = [] for t in tools: t_id = t['id'] t_xml_file = gi.tools.show_tool(t['id'])['config_file'] container_name = None try: tool_xml = load(t_xml_file) requirements, containers = parse_requirements_from_xml(tool_xml) conda_targets = requirements_to_conda_targets(requirements) mulled_targets = [ build_target(c.package, c.version) for c in conda_targets ] container_name = mulled_container_name("biocontainers", mulled_targets) except Exception as ex: logger.exception('Caught an error at {} with tid: {}'.format( args.url, t_id)) pass singularity = 'not_found' if container_name: container_name = container_name.lower() counter_docker += 1 if os.path.basename(container_name) in list_of_files: singularity = os.path.join(args.sg_local_path, os.path.basename(container_name)) counter_singularity += 1 match[t_id] = { 'docker': "docker://{}".format(container_name), 'singularity': singularity } unmatch.append(t_id) print(t_id, container_name, singularity) dump(match, "{}_{}".format(args.url.split('/')[2], args.matched)) dump(unmatch, "{}_{}".format(args.url.split('/')[2], args.notmatched)) print("number of tools {}".format(len(tools))) print("number of docker images matched {}".format(counter_docker)) print("number of singularity images in CVMFS {}".format( len(list_of_files))) print( "number of singularity images matched {}".format(counter_singularity))
def collect_conda_targets(path, found_tool_callback=None, conda_context=None): conda_targets = [] for (tool_path, tool_xml) in load_tool_elements_from_path(path): if found_tool_callback: found_tool_callback(tool_path) requirements, containers = parse_requirements_from_xml(tool_xml) conda_targets.extend(conda_util.requirements_to_conda_targets(requirements)) return conda_targets
def tool_source_conda_targets(tool_source): """Load CondaTarget object from supplied abstract tool source.""" requirements, _ = tool_source.parse_requirements_and_containers() return conda_util.requirements_to_conda_targets(requirements)