Skip to content

Commit

Permalink
Merge b6d8a1f into c8c0f1f
Browse files Browse the repository at this point in the history
  • Loading branch information
thermokarst committed Jan 23, 2019
2 parents c8c0f1f + b6d8a1f commit f35ee9c
Show file tree
Hide file tree
Showing 6 changed files with 81 additions and 14 deletions.
43 changes: 36 additions & 7 deletions q2_types/sample_data/_format.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,48 @@
# ----------------------------------------------------------------------------

import qiime2.plugin.model as model
from qiime2.plugin import ValidationError

from ..plugin_setup import plugin


class AlphaDiversityFormat(model.TextFileFormat):
def sniff(self):
def _validate_(self, level):
with self.open() as fh:
i = 0
for line, i in zip(fh, range(10)):
cells = line.split('\t')
if len(cells) < 2:
return False
return i > 1
header = None
records_seen = 0
file_ = enumerate(fh) if level == 'min' else zip(range(10), fh)
for i, line in file_:
i = i + 1 # For easier reporting
if line.lstrip(' ') == '\n':
continue # Blank line
elif line.startswith('#'):
continue # Comment line
cells = [c.strip() for c in line.rstrip('\n').split('\t')]

if header is None:
if len(cells) < 2:
raise ValidationError(
'Found header on line %d with the following '
'columns: %s (length: %d), expected at least 2 '
'columns.' % (i, cells, len(cells)))
else:
header = cells
else:
if len(cells) != len(header):
raise ValidationError(
'Line %d has %s cells (%s), expected %s.'
% (i, len(cells), cells, len(header)))

records_seen += 1

if header is None:
raise ValidationError('No header found.')

if records_seen == 0:
raise ValidationError('No records found in file, only '
'observed comments, blank lines, and/or '
'a header row.')


AlphaDiversityDirectoryFormat = model.SingleFileDirectoryFormat(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
shannon extra
Sample1 0.9709505944546688 foo
Sample4 0.7219280948873623
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@

Sample1
Sample4
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
shannon
Sample1 0.9709505944546688
44 changes: 37 additions & 7 deletions q2_types/sample_data/tests/test_format.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,22 +22,52 @@ def test_alpha_diversity_format_validate_positive(self):
filepath = self.get_data_path('alpha-diversity.tsv')
format = AlphaDiversityFormat(filepath, mode='r')

# Should succeed
format.validate()

def test_alpha_diversity_format_validate_negative(self):
filepath = self.get_data_path('not-alpha-diversity.tsv')
format = AlphaDiversityFormat(filepath, mode='r')

with self.assertRaisesRegex(ValidationError, 'AlphaDiversityFormat'):
format.validate()

def test_alpha_diversity_dir_fmt_validate_positive(self):
filepath = self.get_data_path('alpha-diversity.tsv')
shutil.copy(filepath, self.temp_dir.name)
format = AlphaDiversityDirectoryFormat(self.temp_dir.name, mode='r')

# Should succeed
format.validate()

def test_alpha_diversity_format_validate_positive_one_sample(self):
filepath = self.get_data_path('alpha-diversity-one-sample.tsv')
format = AlphaDiversityFormat(filepath, mode='r')

# Should succeed
format.validate()

def test_alpha_diversity_format_validate_positive_md_columns(self):
filepath = self.get_data_path('alpha-diversity-with-metadata.tsv')
format = AlphaDiversityFormat(filepath, mode='r')

# Should succeed
format.validate()

def test_alpha_diversity_format_validate_negative_no_records(self):
filepath = self.get_data_path('alpha-diversity-missing-records.tsv')
format = AlphaDiversityFormat(filepath, mode='r')

with self.assertRaisesRegex(ValidationError, 'No records found.*'):
format.validate()

def test_alpha_diversity_format_validate_negative_too_few_cols(self):
filepath = self.get_data_path('alpha-diversity-one-column.tsv')
format = AlphaDiversityFormat(filepath, mode='r')

with self.assertRaisesRegex(ValidationError, '.*Sample1.*: 1.*'):
format.validate()

def test_alpha_diversity_format_validate_negative_jagged_rows(self):
filepath = self.get_data_path('alpha-diversity-jagged-rows.tsv')
format = AlphaDiversityFormat(filepath, mode='r')

with self.assertRaisesRegex(ValidationError, 'Line 3.*expected 3.*'):
format.validate()


if __name__ == '__main__':
unittest.main()

0 comments on commit f35ee9c

Please sign in to comment.