mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-24 16:30:27 +08:00
Merge pull request #1198 from blankenberg/dt-biom
BIOM1 Datatype enhancements
This commit is contained in:
@@ -11,7 +11,7 @@ import subprocess
|
||||
import tempfile
|
||||
|
||||
from galaxy.datatypes.data import get_file_peek, Text
|
||||
from galaxy.datatypes.metadata import MetadataElement
|
||||
from galaxy.datatypes.metadata import MetadataElement, MetadataParameter
|
||||
from galaxy.util import nice_size, string_as_bool
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
@@ -122,45 +122,98 @@ class Ipynb( Json ):
|
||||
pass
|
||||
|
||||
|
||||
class Biom1(Json):
|
||||
class Biom1( Json ):
|
||||
"""
|
||||
BIOM version 1.0 file format description
|
||||
http://biom-format.org/documentation/format_versions/biom-1.0.html
|
||||
"""
|
||||
file_ext = "biom1"
|
||||
|
||||
def set_peek(self, dataset, is_multi_byte=False):
|
||||
super(Biom1, self).set_peek(dataset, is_multi_byte)
|
||||
MetadataElement( name="table_rows", default=[], desc="table_rows", param=MetadataParameter, readonly=True, visible=False, optional=True, no_value=[] )
|
||||
MetadataElement( name="table_matrix_element_type", default="", desc="table_matrix_element_type", param=MetadataParameter, readonly=True, visible=False, optional=True, no_value="" )
|
||||
MetadataElement( name="table_format", default="", desc="table_format", param=MetadataParameter, readonly=True, visible=False, optional=True, no_value="" )
|
||||
MetadataElement( name="table_generated_by", default="", desc="table_generated_by", param=MetadataParameter, readonly=True, visible=True, optional=True, no_value="" )
|
||||
MetadataElement( name="table_matrix_type", default="", desc="table_matrix_type", param=MetadataParameter, readonly=True, visible=False, optional=True, no_value="" )
|
||||
MetadataElement( name="table_shape", default=[], desc="table_shape", param=MetadataParameter, readonly=True, visible=False, optional=True, no_value=[] )
|
||||
MetadataElement( name="table_format_url", default="", desc="table_format_url", param=MetadataParameter, readonly=True, visible=False, optional=True, no_value="" )
|
||||
MetadataElement( name="table_date", default="", desc="table_date", param=MetadataParameter, readonly=True, visible=True, optional=True, no_value="" )
|
||||
MetadataElement( name="table_type", default="", desc="table_type", param=MetadataParameter, readonly=True, visible=True, optional=True, no_value="" )
|
||||
MetadataElement( name="table_id", default=None, desc="table_id", param=MetadataParameter, readonly=True, visible=True, optional=True, no_value=None )
|
||||
MetadataElement( name="table_columns", default=[], desc="table_columns", param=MetadataParameter, readonly=True, visible=False, optional=True, no_value=[] )
|
||||
|
||||
def set_peek( self, dataset, is_multi_byte=False ):
|
||||
super( Biom1, self ).set_peek( dataset, is_multi_byte )
|
||||
if not dataset.dataset.purged:
|
||||
dataset.blurb = "Biological Observation Matrix v1"
|
||||
|
||||
def sniff(self, filename):
|
||||
def sniff( self, filename ):
|
||||
is_biom = False
|
||||
if self._looks_like_json( filename ):
|
||||
is_biom = self._looks_like_biom(filename)
|
||||
is_biom = self._looks_like_biom( filename )
|
||||
return is_biom
|
||||
|
||||
def _looks_like_biom(self, filepath, load_size=50000):
|
||||
def _looks_like_biom( self, filepath, load_size=50000 ):
|
||||
"""
|
||||
@param filepath: [str] The path to the evaluated file.
|
||||
@param load_size: [int] The size of the file block load in RAM (in
|
||||
bytes).
|
||||
"""
|
||||
is_biom = False
|
||||
segment_size = int(load_size / 2)
|
||||
segment_size = int( load_size / 2 )
|
||||
try:
|
||||
with open(filepath, "r") as fh:
|
||||
with open( filepath, "r" ) as fh:
|
||||
prev_str = ""
|
||||
segment_str = fh.read(segment_size)
|
||||
if segment_str.strip().startswith('{'):
|
||||
while segment_str and not is_biom:
|
||||
segment_str = fh.read( segment_size )
|
||||
if segment_str.strip().startswith( '{' ):
|
||||
while segment_str:
|
||||
current_str = prev_str + segment_str
|
||||
if '"format"' in current_str:
|
||||
current_str = re.sub(r'\s', '', current_str)
|
||||
current_str = re.sub( r'\s', '', current_str )
|
||||
if '"format":"BiologicalObservationMatrix' in current_str:
|
||||
is_biom = True
|
||||
break
|
||||
prev_str = segment_str
|
||||
segment_str = fh.read(segment_size)
|
||||
except:
|
||||
segment_str = fh.read( segment_size )
|
||||
except Exception:
|
||||
pass
|
||||
return is_biom
|
||||
|
||||
def set_meta( self, dataset, **kwd ):
|
||||
"""
|
||||
Store metadata information from the BIOM file.
|
||||
"""
|
||||
if dataset.has_data():
|
||||
with open( dataset.file_name ) as fh:
|
||||
try:
|
||||
json_dict = json.load( fh )
|
||||
except Exception:
|
||||
return
|
||||
|
||||
def _transform_dict_list_ids( dict_list ):
|
||||
if dict_list:
|
||||
return [ x.get( 'id', None ) for x in dict_list ]
|
||||
return []
|
||||
|
||||
b_transform = { 'rows': _transform_dict_list_ids, 'columns': _transform_dict_list_ids }
|
||||
for ( m_name, b_name ) in [ ('table_rows', 'rows'),
|
||||
('table_matrix_element_type', 'matrix_element_type'),
|
||||
('table_format', 'format'),
|
||||
('table_generated_by', 'generated_by'),
|
||||
('table_matrix_type', 'matrix_type'),
|
||||
('table_shape', 'shape'),
|
||||
('table_format_url', 'format_url'),
|
||||
('table_date', 'date'),
|
||||
('table_type', 'type'),
|
||||
('table_id', 'id'),
|
||||
('table_columns', 'columns') ]:
|
||||
try:
|
||||
metadata_value = json_dict.get( b_name, None )
|
||||
if b_name in b_transform:
|
||||
metadata_value = b_transform[ b_name ]( metadata_value )
|
||||
setattr( dataset.metadata, m_name, metadata_value )
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
|
||||
class Obo( Text ):
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user