Beispiel #1
0
 def test_can_write_delimited(self):
     with io.StringIO() as delimited_stream:
         with validio.Writer(self._standard_delimited_cid, delimited_stream) as delimited_writer:
             delimited_writer.write_row(['Miller', '173', '1967-05-23'])
             delimited_writer.write_row(['Webster', '167', '1983-11-02'])
         data_written = dev_test.unified_newlines(delimited_stream.getvalue())
     self.assertEqual('%r' % 'Miller,173,1967-05-23\nWebster,167,1983-11-02\n', '%r' % data_written)
Beispiel #2
0
 def test_can_write_too_short_fixed_field(self):
     with io.StringIO() as fixed_stream:
         with validio.Writer(self._standard_fixed_cid, fixed_stream) as fixed_writer:
             broken_rows_to_write = [
                 ['Miller    ', '173', '1967-05-23'],
                 ['Webster   ', '7', '1983-11-02'],
             ]
             fixed_writer.write_rows(broken_rows_to_write)
Beispiel #3
0
 def test_can_write_fixed_multiple_rows(self):
     with io.StringIO() as fixed_stream:
         with validio.Writer(self._standard_fixed_cid, fixed_stream) as fixed_writer:
             fixed_writer.write_rows([
                 ['Miller    ', '173', '1967-05-23'],
                 ['Webster   ', '167', '1983-11-02']])
         data_written = dev_test.unified_newlines(fixed_stream.getvalue())
     self.assertEqual('%r' % 'Miller    1731967-05-23\nWebster   1671983-11-02\n', '%r' % data_written)
Beispiel #4
0
 def test_fails_on_writing_broken_field(self):
     with io.StringIO() as delimited_stream:
         with validio.Writer(self._standard_delimited_cid, delimited_stream) as delimited_writer:
             delimited_writer.write_row(['Miller', '173', '1967-05-23'])
             try:
                 delimited_writer.write_row(['Webster', 'not_a_number', '1983-11-02'])
             except errors.FieldValueError as anticipated_error:
                 dev_test.assert_fnmatches(
                     self, str(anticipated_error),
                     "* (R2C2): cannot accept field 'height': value must be an integer number: *'not_a_number'")
Beispiel #5
0
 def test_fails_on_error_after_header(self):
     cid_with_header_text = '\n'.join([
         'd,format,delimited',
         'd,header,2',
         ' ,name   ,,empty,length,type,rule',
         'f,height ,,     ,      ,Integer',
     ])
     cid_with_header = interface.create_cid_from_string(cid_with_header_text)
     with io.StringIO() as delimited_stream:
         with validio.Writer(cid_with_header, delimited_stream) as delimited_writer:
             delimited_writer.write_row(['some', 'header', 'columns'])
             delimited_writer.write_row(['height'])
             self.assertRaises(errors.FieldValueError, delimited_writer.write_row, ['abc'])
Beispiel #6
0
 def test_can_write_delimited_header(self):
     cid_with_header_text = '\n'.join([
         'd,format,delimited',
         'd,header,2',
         ' ,name   ,,empty,length,type,rule',
         'f,height ,,     ,      ,Integer',
     ])
     cid_with_header = interface.create_cid_from_string(cid_with_header_text)
     with io.StringIO() as delimited_stream:
         with validio.Writer(cid_with_header, delimited_stream) as delimited_writer:
             delimited_writer.write_row(['some', 'header', 'columns'])
             delimited_writer.write_row(['height'])
             delimited_writer.write_row(['173'])
Beispiel #7
0
 def test_fails_on_writing_fixed_row_with_too_few_fields(self):
     with io.StringIO() as fixed_stream:
         with validio.Writer(self._standard_fixed_cid, fixed_stream) as fixed_writer:
             broken_rows_to_write = [
                 ['Miller    ', '173', '1967-05-23'],
                 ['Webster   ', 'abc'],
             ]
             try:
                 fixed_writer.write_rows(broken_rows_to_write)
                 self.fail()
             except errors.DataError as anticipated_error:
                 dev_test.assert_fnmatches(
                     self, str(anticipated_error),
                     "* row must contain 3 fields but only has 2: *'Webster   ', *'abc'?")
Beispiel #8
0
 def test_fails_on_writing_fixed_integer_field_with_non_numeric_value(self):
     with io.StringIO() as fixed_stream:
         with validio.Writer(self._standard_fixed_cid, fixed_stream) as fixed_writer:
             broken_rows_to_write = [
                 ['Miller    ', '173', '1967-05-23'],
                 ['Webster   ', 'abc', '1983-11-02'],
             ]
             try:
                 fixed_writer.write_rows(broken_rows_to_write)
                 self.fail()
             except errors.DataError as anticipated_error:
                 dev_test.assert_fnmatches(
                     self, str(anticipated_error),
                     "* (R2C2): cannot accept field 'height': value must be an integer number: 'abc'")
Beispiel #9
0
 def test_fails_on_writing_too_long_fixed_field(self):
     with io.StringIO() as fixed_stream:
         with validio.Writer(self._standard_fixed_cid, fixed_stream) as fixed_writer:
             broken_rows_to_write = [
                 ['Miller    ', '173', '1967-05-23'],
                 ['Webster   ', '16789', '1983-11-02'],
             ]
             try:
                 fixed_writer.write_rows(broken_rows_to_write)
                 self.fail()
             except errors.DataError as anticipated_error:
                 dev_test.assert_fnmatches(
                     self, str(anticipated_error),
                     "* (R2C2): cannot accept field 'height': fixed format field must have at most 3 characters "
                     + "instead of 5: '16789'")