Merge pull request #12745 from dannon/yaml-backport

[21.09] Yaml datatype backport
This commit is contained in:
Marius van den Beek
2021-10-19 20:39:45 +02:00
committed by GitHub
3 changed files with 48 additions and 0 deletions
@@ -248,6 +248,7 @@
</datatype>
<datatype extension="directory" type="galaxy.datatypes.data:Directory">
</datatype>
<datatype extension="yaml" type="galaxy.datatypes.text:Yaml" display_in_upload="true" />
<!-- Proteomics Datatypes -->
<datatype extension="mrm" type="galaxy.datatypes.tabular:Tabular" display_in_upload="true" subclass="true"/>
<datatype extension="dta" type="galaxy.datatypes.proteomics:Dta" display_in_upload="true" />
@@ -1118,6 +1119,7 @@
<sniffer type="galaxy.datatypes.media:Mpg"/>
<sniffer type="galaxy.datatypes.speech:TextGrid" />
<sniffer type="galaxy.datatypes.speech:BPF" />
<sniffer type="galaxy.datatypes.text:Yaml" />
<!--
Keep this commented until the sniff method in the assembly.py
module is fixed to not read the entire file.
+7
View File
@@ -0,0 +1,7 @@
test:
- test1
- test2
testing: testing 1
test2:
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus ac justo metus. Praesent eget mollis enim, sed facilisis felis. Pellentesque vulputate varius mi, vel eleifend mauris luctus vestibulum. Suspendisse elementum nisi lorem, in consequat nisl commodo nec. Curabitur faucibus nec diam id interdum. Sed lobortis sed libero id feugiat. Duis diam odio, elementum sed suscipit ac, venenatis a eros. Phasellus at sollicitudin ligula. Suspendisse congue, tortor vitae aliquet ornare, diam mi scelerisque eros, vel tempus elit odio ac ligula. Pellentesque ultricies diam ornare tempor sagittis. Donec vel elit ac elit placerat dictum. Pellentesque et diam at sem porttitor blandit.
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus ac justo metus. Praesent eget mollis enim, sed facilisis felis. Pellentesque vulputate varius mi, vel eleifend mauris luctus vestibulum. Suspendisse elementum nisi lorem, in consequat nisl commodo nec. Curabitur faucibus nec diam id interdum. Sed lobortis sed libero id feugiat. Duis diam odio, elementum sed suscipit ac, venenatis a eros. Phasellus at sollicitudin ligula. Suspendisse congue, tortor vitae aliquet ornare, diam mi scelerisque eros, vel tempus elit odio ac ligula. Pellentesque ultricies diam ornare tempor sagittis. Donec vel elit ac elit placerat dictum. Pellentesque et diam at sem porttitor blandit.
+39
View File
@@ -10,6 +10,8 @@ import shlex
import subprocess
import tempfile
import yaml
from galaxy.datatypes.data import get_file_peek, Text
from galaxy.datatypes.metadata import MetadataElement, MetadataParameter
from galaxy.datatypes.sniff import build_sniff_from_prefix, iter_headers
@@ -856,3 +858,40 @@ class Gfa2(Text):
return False
found_valid_lines = True
return found_valid_lines
@build_sniff_from_prefix
class Yaml(Text):
"""Yaml files"""
file_ext = "yaml"
def sniff_prefix(self, file_prefix):
"""
Try to load the string with the yaml module. If successful it's a yaml file.
"""
return self._looks_like_yaml(file_prefix)
def get_mime(self):
"""Returns the mime type of the datatype"""
return 'application/yaml'
def _looks_like_yaml(self, file_prefix):
# Pattern used by SequenceSplitLocations
if file_prefix.file_size < 50000 and not file_prefix.truncated:
# If the file is small enough - don't guess just check.
try:
item = yaml.safe_load(file_prefix.contents_header)
assert isinstance(item, (list, dict))
return True
except yaml.YAMLError:
return False
else:
# If file is too big, load the first part. Trim the current line, in case it cut off in the middle of a key.
file_start = file_prefix.string_io().read(50000).strip().rsplit("\n", 1)[0]
try:
item = yaml.safe_load(file_start)
assert isinstance(item, (list, dict))
return True
except yaml.YAMLError:
return False
return False