Exemple #1
0
def update_existing_tool_wrapper_status(tool_map_values,
                                        base_dir=None,
                                        update_dir=None):
    base_dir = get_base_dir(base_dir=base_dir)
    metadata_path = Path(base_dir) / tool_map_values['metadataPath']
    subtool_metadata = SubtoolMetadata.load_from_file(metadata_path)
    if tool_map_values['cwlStatus'] in unpublished_statuses and tool_map_values[
            'cwlExists'] == True:
        subtool_metadata.cwlStatus = 'Released'
    if tool_map_values['wdlStatus'] in unpublished_statuses and tool_map_values[
            'wdlExists'] == True:
        subtool_metadata.wdlStatus = 'Released'
    if tool_map_values[
            'nextflowStatus'] in unpublished_statuses and tool_map_values[
                'nextflowExists'] == True:
        subtool_metadata.nextflowStatus = 'Released'
    if tool_map_values[
            'snakemakeStatus'] in unpublished_statuses and tool_map_values[
                'snakemakeExists'] == True:
        subtool_metadata.snakemakeStatus = 'Released'
    if update_dir == None or base_dir == update_dir:  # Need to overwrite the existing file.
        subtool_metadata.mk_file()
    else:
        # updated_path = Path(update_dir) / tool_map_values['metadataPath']
        subtool_metadata.root_repo_path = update_dir
        subtool_metadata.mk_file()

    return
Exemple #2
0
def add_tool_instance(tool_name,
                      tool_version,
                      subtool_name,
                      init_job_file=True,
                      root_repo_path=Path.cwd()):
    subtool_path = get_tool_metadata(tool_name,
                                     tool_version,
                                     subtool_name,
                                     base_dir=root_repo_path)
    subtool_metadata = SubtoolMetadata.load_from_file(
        subtool_path, root_repo_path=root_repo_path, _in_index=True)
    instance_meta = subtool_metadata.mk_instance()
    instance_metadata_path = instance_meta.mk_file(base_dir=root_repo_path)
    input_hash = instance_meta.identifier[-4:]
    job_file_path = None
    if init_job_file:
        tool_sources = get_tool_sources(tool_name,
                                        tool_version,
                                        subtool_name,
                                        base_dir=root_repo_path)
        job_file_path = get_tool_instance_path(tool_name,
                                               tool_version,
                                               input_hash=input_hash,
                                               subtool_name=subtool_name,
                                               base_dir=root_repo_path)
        tool_inputs_schema = InputsSchema(tool_sources['cwl'])
        tool_inputs_schema.make_template_file(job_file_path)
    return instance_metadata_path, job_file_path
Exemple #3
0
 def test_handle_duplicate_subtool_identifier_2(self):
     """
     Add two subtools and parent with one command.
     :return:
     """
     tool_name = 'samtools'
     tool_version = '1.x'
     subtool_name = 'dict'  # both subtool identifiers start with 'bb'
     subtool_name_2 = 'faidx'
     with TemporaryDirectory() as temp_dir:
         self.make_empty_tools_index(temp_dir)
         add_tool(tool_name, tool_version, [subtool_name, subtool_name_2], root_repo_path=temp_dir, refresh_index=False)
         subtool_1_metadata_path = get_tool_metadata(tool_name, tool_version, subtool_name, base_dir=temp_dir)
         subtool_2_metadata_path = get_tool_metadata(tool_name, tool_version, subtool_name_2, base_dir=temp_dir)
         subtool_1_metadata = SubtoolMetadata.load_from_file(subtool_1_metadata_path)
         subtool_2_metadata = SubtoolMetadata.load_from_file(subtool_2_metadata_path)
     self.assertNotEqual(subtool_1_metadata.identifier, subtool_2_metadata.identifier)
     return
 def test_make_subtool_metadata(self):
     p_metadata = ParentToolMetadata(
         name=TestMakeParentToolMetadata.test_dict['name'],
         softwareVersion=test_constants['test_software_version'],
         featureList=['subtool_name'])
     st_metadata = SubtoolMetadata(
         name=TestMakeSubtoolMetadata.test_dict['name'],
         _parentMetadata=p_metadata)
     self.assertTrue(
         st_metadata.name == TestMakeSubtoolMetadata.test_dict['name'])
def make_subtool_map(tool_name, tool_version, subtool_name, base_dir=None):
    subtool_cwl_path = get_cwl_tool(tool_name, tool_version, subtool_name=subtool_name, base_dir=base_dir)
    subtool_rel_path = get_relative_path(subtool_cwl_path, base_path=base_dir)
    subtool_metadata_path = get_tool_metadata(tool_name, tool_version, subtool_name=subtool_name, parent=False,
                                              base_dir=base_dir)
    subtool_metadata = SubtoolMetadata.load_from_file(subtool_metadata_path)
    subdir_map = {}
    subdir_map[subtool_metadata.identifier] = {'path': str(subtool_rel_path), 'name': subtool_metadata.name,
                                               'metadataStatus': subtool_metadata.metadataStatus,
                                               'cwlStatus': subtool_metadata.cwlStatus, 'type': 'subtool'}
    return subdir_map
Exemple #6
0
    def test_handle_duplicate_subtool_identifier(self):
        """
        Add subtools one at a time.
        :return:
        """
        tool_name = 'samtools'
        tool_version = '1.x'
        subtool_name = 'dict'  # both subtool identifiers start with 'bb'
        subtool_name_2 = 'faidx'
        with TemporaryDirectory() as temp_dir:
            self.make_empty_tools_index(temp_dir)
            add_tool(tool_name, tool_version, subtool_name, root_repo_path=temp_dir, refresh_index=False)
            add_subtool(tool_name, tool_version, subtool_name_2, root_repo_path=temp_dir, update_featureList=True)
            subtool_1_metadata_path = get_tool_metadata(tool_name, tool_version, subtool_name, base_dir=temp_dir)
            subtool_2_metadata_path = get_tool_metadata(tool_name, tool_version, subtool_name_2, base_dir=temp_dir)
            with self.assertRaises(InIndexError):
                subtool_1_metadata = SubtoolMetadata.load_from_file(subtool_1_metadata_path, _in_index=False, root_repo_path=temp_dir)
            subtool_1_metadata = SubtoolMetadata.load_from_file(subtool_1_metadata_path, _in_index=True, root_repo_path=temp_dir)
            subtool_2_metadata = SubtoolMetadata.load_from_file(subtool_2_metadata_path, _in_index=True,
                                                            root_repo_path=temp_dir)
        self.assertNotEqual(subtool_1_metadata.identifier, subtool_2_metadata.identifier)

        return
Exemple #7
0
 def test_make_file(self):
     parent_tool_name = 'parentName'
     subtool_name = 'subtoolName'
     tool_version = 'test_version'
     with TemporaryDirectory(prefix='tool_instance_metadata') as tmpdir:
         self.make_empty_tools_dir(tmpdir)
         add_content([
             '-p', tmpdir, 'tool', parent_tool_name, tool_version,
             subtool_name
         ])
         subtool_path = get_tool_metadata(parent_tool_name,
                                          tool_version,
                                          subtool_name,
                                          base_dir=tmpdir)
         subtool_metadata = SubtoolMetadata.load_from_file(subtool_path)
         subtool_instance = subtool_metadata.mk_instance()
         subtool_instance.mk_file(base_dir=tmpdir)
     return
Exemple #8
0
def make_subtool_map(tool_name,
                     tool_version,
                     subtool_name,
                     base_dir=None,
                     specify_exists=False):
    subtool_metadata_path = get_tool_metadata(tool_name,
                                              tool_version,
                                              subtool_name=subtool_name,
                                              parent=False,
                                              base_dir=base_dir)
    subtool_metadata = SubtoolMetadata.load_from_file(subtool_metadata_path,
                                                      check_index=False)
    subdir_map = {}
    subtool_rel_path = get_relative_path(subtool_metadata_path,
                                         base_path=base_dir)
    if specify_exists:
        files_exist = check_for_workflow_language_files(subtool_metadata_path)
        subdir_map[subtool_metadata.identifier] = {
            'metadataPath': str(subtool_rel_path),
            'name': subtool_metadata.name,
            'metadataStatus': subtool_metadata.metadataStatus,
            'cwlStatus': subtool_metadata.cwlStatus,
            'cwlExists': files_exist['cwl'],
            'nextflowStatus': subtool_metadata.nextflowStatus,
            'nextflowExists': files_exist['nextflow'],
            'snakemakeStatus': subtool_metadata.snakemakeStatus,
            'snakemakeExists': files_exist['snakemake'],
            'wdlStatus': subtool_metadata.wdlStatus,
            'wdlExists': files_exist['wdl'],
            'type': 'subtool'
        }
    else:
        subdir_map[subtool_metadata.identifier] = {
            'metadataPath': str(subtool_rel_path),
            'name': subtool_metadata.name,
            'metadataStatus': subtool_metadata.metadataStatus,
            'cwlStatus': subtool_metadata.cwlStatus,
            'nextflowStatus': subtool_metadata.nextflowStatus,
            'snakemakeStatus': subtool_metadata.snakemakeStatus,
            'wdlStatus': subtool_metadata.wdlStatus,
            'type': 'subtool'
        }
    return subdir_map