albmarin/badX12

Errors when the Segment Terminator is a '\n' character

Opened this issue · 0 comments

  • badX12 version: '0.2.2'
  • Python version: Python 3.6.8
  • Operating System: Ubuntu

Description

I'm trying to parse an incoming X12 (834) document. The error is an IndexError but the actual issue seems to be that this file is using a newline character as the segment terminator but newlines are stripped in the "_validate_document" method that is run prior to the parsing step.

There seems to be some discussion on weather or not newline characters are valid segment terminators: kputnam/stupidedi#106

I've gotten things working for me by changing the return statement of the _validate_document method from "return document.replace("\n", "").strip()" to "return document" but I'm not sure if that will change things for other use cases.

What I Did

I have a small test script to start understanding how to use the library:

from badx12 import Parser
parser = Parser()
document = parser.parse_document("test_file.834")
  File "t.py", line 4, in <module>
    document = parser.parse_document("test_file.834")
  File "/usr/local/lib/python3.6/dist-packages/badx12/parser.py", line 37, in parse_document
    self._separate_and_route_segments()
  File "/usr/local/lib/python3.6/dist-packages/badx12/parser.py", line 101, in _separate_and_route_segments
    self._route_segment_to_parser(segment)
  File "/usr/local/lib/python3.6/dist-packages/badx12/parser.py", line 114, in _route_segment_to_parser
    self._parse_transaction_set_header(segment)
  File "/usr/local/lib/python3.6/dist-packages/badx12/parser.py", line 193, in _parse_transaction_set_header
    self._parse_segment(transaction_header, header_field_list)
  File "/usr/local/lib/python3.6/dist-packages/badx12/parser.py", line 134, in _parse_segment
    raise e
  File "/usr/local/lib/python3.6/dist-packages/badx12/parser.py", line 129, in _parse_segment
    segment.fields[index].content = value
IndexError: list index out of range