def read(data): lines = data.splitlines() records = [] current_line = lines.pop(0) records.append(Record.extract(current_line, FILE_HEADER)) while len(lines) > 1: current_line = lines.pop(0) if Record.valid(current_line, SENDER_HEADER): record = Record.extract(current_line, SENDER_HEADER) elif Record.valid(current_line, INDIVIDUAL_RECORD): record = Record.extract(current_line, INDIVIDUAL_RECORD) elif Record.valid(current_line, SENDER_FOOTER): record = Record.extract(current_line, SENDER_FOOTER) else: raise BaseException('Invalid record: "%s"' % current_line) records.append(record) current_line = lines.pop(0) records.append(Record.extract(current_line, FILE_FOOTER)) return records