mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-24 16:30:27 +08:00
Merge pull request #12745 from dannon/yaml-backport
[21.09] Yaml datatype backport
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user