Exemple #1
0
 def validate(self, line: str) -> None:
     try:
         record_id = record_id_from_line(line)
     except ValueError:
         raise InvalidS1Format("Does not contain S1 separator")
     try:
         spec = spec_from_record_id(record_id)
     except KeyError:
         raise UnknownRecordType(
             f"Encountered unknown record id of '{record_id}'")
     try:
         # Tossing away this data, but catching field length errors
         parse_line_with_spec(line, spec)
     except InvalidFieldLength:
         raise InvalidS1Line()
Exemple #2
0
 def handle_new_line(self, line: str) -> Tuple[RecordSpec, RecordType]:
     record_id = record_id_from_line(line)
     try:
         spec = spec_from_record_id(record_id)
     except KeyError:
         raise UnknownRecordType()
     record = parse_line_with_spec(line, spec)
     self.total_lines += 1
     return spec, record
Exemple #3
0
def test_parse_repeat(correct_repeat_line, repeat_spec):
    parsed = parse_line_with_spec(correct_repeat_line, repeat_spec)
    assert parsed == {
        "record_id": "2",
        "a": "1",
        "b": "2",
        "c": "3",
        "repeats": [{"d": "4", "e": "5"}, {"d": "6", "e": "7"}],
    }
Exemple #4
0
def test_parsing_invalid_length_no_repeat(bad_line, basic_spec):
    with pytest.raises(InvalidFieldLength):
        parse_line_with_spec(bad_line, basic_spec)
Exemple #5
0
def test_incorrect_record_ids(basic_spec):
    """ Should raise when a record_id doesn't match the spec.record_id """
    bad_line = "abcd|a|b|c"
    assert basic_spec.record_id == "1"
    with pytest.raises(ValueError):
        parse_line_with_spec(bad_line, basic_spec)
Exemple #6
0
def test_basic_parse(correct_basic_line, basic_spec):
    parsed = parse_line_with_spec(correct_basic_line, basic_spec)
    assert parsed == {"record_id": "1", "a": "foo", "b": "bar", "c": "bat"}