Skip to content

Commit

Permalink
Merge pull request #39 from mvdbeek/bam_unsorted
Browse files Browse the repository at this point in the history
Fix tests and revert additional sorting of converters
  • Loading branch information
bgruening committed Jan 15, 2018
2 parents ea34bdc + a36ebe3 commit d544adf
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 31 deletions.
2 changes: 1 addition & 1 deletion config/datatypes_conf.xml.sample
Expand Up @@ -288,8 +288,8 @@
<datatype extension="qual454" type="galaxy.datatypes.qualityscore:QualityScore454" display_in_upload="true"/>
<datatype extension="roadmaps" type="galaxy.datatypes.assembly:Roadmaps" display_in_upload="false"/>
<datatype extension="sam" type="galaxy.datatypes.tabular:Sam" display_in_upload="true">
<converter file="sam_to_bam.xml" target_datatype="bam"/>
<converter file="sam_to_bam_native.xml" target_datatype="bam_native"/>
<converter file="sam_to_bam.xml" target_datatype="bam"/>
<converter file="sam_to_bigwig_converter.xml" target_datatype="bigwig"/>
</datatype>
<datatype extension="scf" type="galaxy.datatypes.binary:Scf" mimetype="application/octet-stream" display_in_upload="true" description="A binary sequence file in 'scf' format with a '.scf' file extension. You must manually select this 'File Format' when uploading the file." description_url="https://wiki.galaxyproject.org/Learn/Datatypes#Scf"/>
Expand Down
1 change: 1 addition & 0 deletions lib/galaxy/datatypes/converters/sam_to_bam_native.xml
Expand Up @@ -6,6 +6,7 @@
<command><![CDATA[
samtools view
-b
-h
-@ \${GALAXY_SLOTS:-2}
-o '${output}'
'$input'
Expand Down
30 changes: 6 additions & 24 deletions lib/galaxy/datatypes/registry.py
Expand Up @@ -798,34 +798,19 @@ def set_default_values(self):
tabular.CSV()
]

def get_converters_by_datatype(self, ext, priority_formats=None):
"""
Returns available converters by source type.
`priority_formats` will contain a list of format extensions that should
be handled with priority. This means they will end up infront of the
returned ordered dictionary.
"""
def get_converters_by_datatype(self, ext):
"""Returns available converters by source type"""
if ext not in self._converters_by_datatype:
converters = odict()
prio_converters = odict()
source_datatype = type(self.get_datatype_by_extension(ext))
for ext2, converters_dict in self.datatype_converters.items():
converter_datatype = type(self.get_datatype_by_extension(ext2))
if issubclass(source_datatype, converter_datatype):
for k, v in converters_dict.items():
if k in priority_formats:
prio_converters[k] = v
else:
converters[k] = v
converters.update(converters_dict)
# Ensure ext-level converters are present
if ext in self.datatype_converters.keys():
for k, v in self.datatype_converters[ext].items():
if k in priority_formats:
prio_converters[k] = v
else:
converters[k] = v
prio_converters.update(converters)
self._converters_by_datatype[ext] = prio_converters
converters.update(self.datatype_converters[ext])
self._converters_by_datatype[ext] = converters
return self._converters_by_datatype[ext]

def get_converter_by_target_type(self, source_ext, target_ext):
Expand All @@ -837,10 +822,7 @@ def get_converter_by_target_type(self, source_ext, target_ext):

def find_conversion_destination_for_dataset_by_extensions(self, dataset, accepted_formats, converter_safe=True):
"""Returns ( target_ext, existing converted dataset )"""

converters = self.get_converters_by_datatype(dataset.ext, [k.file_ext for k in accepted_formats])

for convert_ext in converters:
for convert_ext in self.get_converters_by_datatype(dataset.ext):
convert_ext_datatype = self.get_datatype_by_extension(convert_ext)
if convert_ext_datatype is None:
self.log.warning("Datatype class not found for extension '%s', which is used as target for conversion from datatype '%s'" % (convert_ext, dataset.ext))
Expand Down
22 changes: 16 additions & 6 deletions test/functional/tools/sam_to_bam_native.xml
Expand Up @@ -6,31 +6,41 @@
#if $input1:
samtools view
-b
-h
-@ \${GALAXY_SLOTS:-2}
-o '${output}'
-o '$bam_native_output'
'$input1'
#else
cp '$input2' '$output'
#elif $input2:
cp '$input2' '$bam_native_output'
#elif $input3:
cp '$input3' '$bam_output'
#end if
]]>
</command>
<inputs>
<param name="input1" type="data" format="sam" label="SAM file" optional="true"/>
<param name="input2" type="data" format="bam_native" label="Unsorted BAM file" optional="true"/>
<param name="input3" type="data" format="bam" label="Sorted BAM file" optional="true"/>
</inputs>
<outputs>
<data name="output" format="bam_native"/>
<data name="bam_native_output" format="bam_native"/>
<data name="bam_output" format="bam"/>
</outputs>
<tests>
<!-- Test that bam native output won't be sorted-->
<test>
<param name="input1" value="sam_with_header.sam" ftype="sam"/>
<output name="output" file="bam_native_from_sam.bam" ftype="bam_native"/>
<output name="bam_native_output" file="bam_native_from_sam.bam" ftype="bam_native"/>
</test>
<!-- Test that sam input is properly converted to bam native -->
<test>
<param name="input2" value="sam_with_header.sam" ftype="sam"/>
<output name="output" file="bam_native_from_sam.bam" ftype="bam_native"/>
<output name="bam_native_output" file="bam_native_from_sam.bam" ftype="bam_native"/>
</test>
<!-- Test that sam input is properly converted to bam -->
<test>
<param name="input3" value="sam_with_header.sam" ftype="sam"/>
<output name="bam_output" file="bam_from_sam.bam" ftype="bam"/>
</test>
</tests>
<help>
Expand Down

0 comments on commit d544adf

Please sign in to comment.