From dfff5c966342b38603514d8bfd3ed8e5b6e0bed9 Mon Sep 17 00:00:00 2001 From: Daniel Blankenberg Date: Mon, 17 Sep 2018 09:00:40 -0400 Subject: [PATCH 1/2] Add Loom datatype and remove rdata.seurat. --- config/datatypes_conf.xml.sample | 3 +- lib/galaxy/datatypes/binary.py | 91 ++++++++++++++++++++++++++++ lib/galaxy/datatypes/test/test.loom | Bin 0 -> 14147 bytes 3 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 lib/galaxy/datatypes/test/test.loom diff --git a/config/datatypes_conf.xml.sample b/config/datatypes_conf.xml.sample index bf49f95419a..529e7f8aa03 100644 --- a/config/datatypes_conf.xml.sample +++ b/config/datatypes_conf.xml.sample @@ -135,6 +135,7 @@ + @@ -503,7 +504,6 @@ - @@ -716,6 +716,7 @@ + diff --git a/lib/galaxy/datatypes/binary.py b/lib/galaxy/datatypes/binary.py index 1d92222668a..ea80f3aa04a 100644 --- a/lib/galaxy/datatypes/binary.py +++ b/lib/galaxy/datatypes/binary.py @@ -736,6 +736,97 @@ class H5(Binary): return "Binary HDF5 file (%s)" % (nice_size(dataset.get_size())) +class Loom(H5): + """ + Class describing a Loom file: http://loompy.org/ + + >>> from galaxy.datatypes.sniff import get_test_fname + >>> fname = get_test_fname('test.loom') + >>> Loom().sniff(fname) + True + >>> fname = get_test_fname('test.mz5') + >>> Loom().sniff(fname) + False + """ + file_ext = "loom" + edam_format = "format_3590" #TODO: this is base HDF5 format, Loom specific does not exist in EDAM + + MetadataElement(name="title", default="", desc="title", readonly=True, visible=True, no_value="") + MetadataElement(name="description", default="", desc="description", readonly=True, visible=True, no_value="") + MetadataElement(name="url", default="", desc="url", readonly=True, visible=True, no_value="") + MetadataElement(name="doi", default="", desc="doi", readonly=True, visible=True, no_value="") + MetadataElement(name="loom_spec_version", default="", desc="loom_spec_version", readonly=True, visible=True, no_value="") + MetadataElement(name="creation_date", default=None, desc="creation_date", readonly=True, visible=True, no_value=None) + MetadataElement(name="shape", default=(), desc="shape", param=metadata.ListParameter, readonly=True, visible=True, no_value=()) + MetadataElement(name="layers_count", default=0, desc="layers_count", readonly=True, visible=True, no_value=0) + MetadataElement(name="layers_names", desc="layers_names", default=[], param=metadata.SelectParameter, multiple=True, readonly=True, no_value=None) + MetadataElement(name="row_attrs_count", default=0, desc="row_attrs_count", readonly=True, visible=True, no_value=0) + MetadataElement(name="row_attrs_names", desc="row_attrs_names", default=[], param=metadata.SelectParameter, multiple=True, readonly=True, no_value=None) + MetadataElement(name="col_attrs_count", default=0, desc="col_attrs_count", readonly=True, visible=True, no_value=0) + MetadataElement(name="col_attrs_names", desc="col_attrs_names", default=[], param=metadata.SelectParameter, multiple=True, readonly=True, no_value=None) + MetadataElement(name="col_graphs_count", default=0, desc="col_graphs_count", readonly=True, visible=True, no_value=0) + MetadataElement(name="col_graphs_names", desc="col_graphs_names", default=[], param=metadata.SelectParameter, multiple=True, readonly=True, no_value=None) + MetadataElement(name="row_graphs_count", default=0, desc="row_graphs_count", readonly=True, visible=True, no_value=0) + MetadataElement(name="row_graphs_names", desc="row_graphs_names", default=[], param=metadata.SelectParameter, multiple=True, readonly=True, no_value=None) + + def sniff(self, filename): + if super(Loom, self).sniff(filename): + try: + with h5py.File(filename) as loom_file: + return bool(loom_file.attrs.get('LOOM_SPEC_VERSION', False)) + except Exception: + return False + return False + + def set_peek(self, dataset, is_multi_byte=False): + if not dataset.dataset.purged: + dataset.peek = "Binary Loom file" + dataset.blurb = nice_size(dataset.get_size()) + else: + dataset.peek = 'file does not exist' + dataset.blurb = 'file purged from disk' + + def display_peek(self, dataset): + try: + return dataset.peek + except Exception: + return "Binary Loom file (%s)" % (nice_size(dataset.get_size())) + + def set_meta(self, dataset, overwrite=True, **kwd): + super(Loom, self).set_meta(dataset, overwrite=overwrite, **kwd) + try: + with h5py.File(dataset.file_name) as loom_file: + dataset.metadata.title = loom_file.attrs.get('title', None) + dataset.metadata.description = loom_file.attrs.get('description', None) + dataset.metadata.url = loom_file.attrs.get('url', None) + dataset.metadata.doi = loom_file.attrs.get('doi', None) + dataset.metadata.loom_spec_version = loom_file.attrs.get('LOOM_SPEC_VERSION', None) + dataset.creation_date = loom_file.attrs.get('creation_date', None) + dataset.metadata.shape = tuple(loom_file['matrix'].shape) + + tmp = list(loom_file['layers'].keys()) + dataset.metadata.layers_count = len(tmp) + dataset.metadata.layers_names = tmp + + tmp = list(loom_file['row_attrs'].keys()) + dataset.metadata.row_attrs_count = len(tmp) + dataset.metadata.row_attrs_names = tmp + + tmp = list(loom_file['col_attrs'].keys()) + dataset.metadata.col_attrs_count = len(tmp) + dataset.metadata.col_attrs_names = tmp + + tmp = list(loom_file['col_graphs'].keys()) + dataset.metadata.col_graphs_count = len(tmp) + dataset.metadata.col_graphs_names = tmp + + tmp = list(loom_file['row_graphs'].keys()) + dataset.metadata.row_graphs_count = len(tmp) + dataset.metadata.row_graphs_names = tmp + except Exception as e: + log.warning('%s, set_meta Exception: %s', self, e) + + class GmxBinary(Binary): """ Base class for GROMACS binary files - xtc, trr, cpt diff --git a/lib/galaxy/datatypes/test/test.loom b/lib/galaxy/datatypes/test/test.loom new file mode 100644 index 0000000000000000000000000000000000000000..a0e575472c52df616a6043cab32a073a30703bd4 GIT binary patch literal 14147 zcmeHOPfrt35T9)YsuV41;-7=Ae`4^`Y+IplQLwGn1T6t#OihFpR%u*XQZ`X!0sBreKf(G3&kj2dpVHnz12owu5b2#A-JnMT*$BuGkpNOS=@>l;IW&bTk$>19MCHXJ3_1}FOo>BXc zARzuLejDR)Z?pf%G-Myu&MwS7(1kmtyaj_`vyN{EsUmg~wDW@#C;l|ctsQBW+u`R29@fRbi_+00ZRfvVE|9`4*4xQ{ z-<&5w)KOAM3sI-_~(hc;7d1nA`zFTOknkU)jeJ9N)+_;-0tBn74i*SEj*Uo=Gaa=Aa^xA(#ukSwh>YD)d+S4UB2(YTlO3iO-WB=p2 zyRpUs*#B#L-3{uMXS>e_ITwkYy;2K?=-IhN9)}HTTz*@>Vtcwx^f(n@(VoZ*Rs|zDjs8LHv*0-Ans}N~hR) zaFGnWWjmeLm7KPOMwKS?--L2J^1W%Tsr~xO@XVU?S^K%ZaGe4;`uA^t!t3hgxxdw5 zXv5lSwD1CbC&)stj?MWIgDyF_>{=3-b%NN_SA1DyR>~)6kc6k}2II zJG5??pDq!Yxt_}xZstm}8eqQX0yf@AEWh7GXMAd++(?17mrG|e<7MCsn|6%W`Z7*7 zUDghP{q6NlIO$Zmk=px%+;}QmRv$@F`GeeK#woLuBB56XyB(%x5HJWB1PlTO0fT@+ zz#w1{FbEg~3<3s${|5m%_sgd(a&D)@A0=XNwsNlKFZosahKhXgEJ>s$3USL&4w%tv9j);pr8=$)~{60MV5KLMC{SHJ)O literal 0 HcmV?d00001 From f06da87189ccabd209f60509dd438bc690fc5523 Mon Sep 17 00:00:00 2001 From: Daniel Blankenberg Date: Mon, 17 Sep 2018 10:19:31 -0400 Subject: [PATCH 2/2] remove comment --- lib/galaxy/datatypes/binary.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/galaxy/datatypes/binary.py b/lib/galaxy/datatypes/binary.py index ea80f3aa04a..073b1c7c472 100644 --- a/lib/galaxy/datatypes/binary.py +++ b/lib/galaxy/datatypes/binary.py @@ -749,7 +749,7 @@ class Loom(H5): False """ file_ext = "loom" - edam_format = "format_3590" #TODO: this is base HDF5 format, Loom specific does not exist in EDAM + edam_format = "format_3590" MetadataElement(name="title", default="", desc="title", readonly=True, visible=True, no_value="") MetadataElement(name="description", default="", desc="description", readonly=True, visible=True, no_value="")