def test_record_validation_error(self): scheme = TestMafWriter.TestScheme() fd, path = tempfile.mkstemp() # Create the header header_lines = (MafHeader.scheme_header_lines(scheme) + ["#key1 value1", "#key2 value2"] + ["str1\tNone\tstr2"]) header = MafHeader.from_lines( lines=header_lines, validation_stringency=ValidationStringency.Silent) # Create the record values = ["string2", "error", "string1"] record_line = MafRecord.ColumnSeparator.join(values) record = MafRecord.from_line( line=record_line, scheme=scheme, line_number=1, validation_stringency=ValidationStringency.Silent, ) # Write the header, and the record twice with captured_output() as (stdout, stderr): writer = MafWriter.from_path( header=header, validation_stringency=ValidationStringency.Lenient, path=path, ) writer += record writer.write(record) writer.close() stdout = stdout.getvalue().rstrip('\r\n').split("\n") stderr = stderr.getvalue().rstrip('\r\n').split("\n") self.assertListEqual(stdout, ['']) # The errors that should be written stderr errors = [ "HEADER_UNSUPPORTED_VERSION", "HEADER_UNSUPPORTED_ANNOTATION_SPEC", "RECORD_COLUMN_WITH_NO_VALUE", "RECORD_COLUMN_WITH_NO_VALUE", ] self.assertListEqualAndIn(errors, stderr) # The second column should be None err_record_line = record_line.replace("error", "None") self.assertListEqual(read_lines(path), header_lines + [err_record_line, err_record_line])
def add_records(self): scheme = TestMafWriter.TestScheme() fd, path = tempfile.mkstemp() header_lines = MafHeader.scheme_header_lines(scheme) + [ "#key1 value1", "#key2 value2", ] header = MafHeader.from_lines(lines=header_lines) writer = MafWriter.from_path(header=header, path=path) values = ["string2", "3.14", "string1"] record_line = MafRecord.ColumnSeparator.join(values) record = MafRecord.from_line(line=record_line, scheme=scheme, line_number=1) writer += record writer.write(record) writer.close() self.assertListEqual(read_lines(path), header_lines + [record_line, record_line])
def test_with_sorting(self): scheme = TestMafWriter.TestCoordinateScheme() fd, path = tempfile.mkstemp() # Create the header header_lines = (MafHeader.scheme_header_lines(scheme) + ["#key1 value1", "#key2 value2"] + [ "%s%s %s" % ( MafHeader.HeaderLineStartSymbol, MafHeader.SortOrderKey, Coordinate().name(), ) ] + ["\t".join(scheme.column_names())]) header = MafHeader.from_lines( lines=header_lines, validation_stringency=ValidationStringency.Silent) # Write the header, and the record twice writer = MafWriter.from_path( header=header, validation_stringency=ValidationStringency.Lenient, path=path, assume_sorted=False, ) writer += TestMafWriter.DummyRecord("chr1", 2, 2) writer += TestMafWriter.DummyRecord("chr1", 3, 3) writer += TestMafWriter.DummyRecord("chr1", 4, 4) writer.close() reader = MafReader.reader_from(path=path, scheme=scheme) header = reader.header() records = [rec for rec in reader] reader.close() self.assertEqual(header.sort_order().name(), Coordinate.name()) self.assertListEqual([r["Start_Position"].value for r in records], [2, 3, 4]) self.assertListEqual([r["End_Position"].value for r in records], [2, 3, 4])
def test_scheme_header_lines(self): scheme = TestMafHeader.Scheme self.assertListEqual( MafHeader.scheme_header_lines(scheme), [TestMafHeader.__version_line, TestMafHeader.__annotation_line], )