diff --git a/pynmea2/nmea.py b/pynmea2/nmea.py index a7c13d0..a6ef745 100644 --- a/pynmea2/nmea.py +++ b/pynmea2/nmea.py @@ -108,15 +108,16 @@ def parse(line, check=False): sentence_type = match.group('sentence_type').upper() data = data_str.split(',') - if checksum: - cs1 = int(checksum, 16) - cs2 = NMEASentence.checksum(nmea_str) - if cs1 != cs2: + if check: + if checksum: + cs1 = int(checksum, 16) + cs2 = NMEASentence.checksum(nmea_str) + if cs1 != cs2: + raise ChecksumError( + 'checksum does not match: %02X != %02X' % (cs1, cs2), data) + else: raise ChecksumError( - 'checksum does not match: %02X != %02X' % (cs1, cs2), data) - elif check: - raise ChecksumError( - 'strict checking requested but checksum missing', data) + 'strict checking requested but checksum missing', data) talker_match = NMEASentence.talker_re.match(sentence_type) if talker_match: diff --git a/pynmea2/stream.py b/pynmea2/stream.py index 31970fb..8f4d3fb 100644 --- a/pynmea2/stream.py +++ b/pynmea2/stream.py @@ -9,7 +9,7 @@ class NMEAStreamReader(object): ''' Reads NMEA sentences from a stream. ''' - def __init__(self, stream=None, errors='raise'): + def __init__(self, stream=None, errors='raise', validate=True): ''' Create NMEAStreamReader object. @@ -23,6 +23,8 @@ def __init__(self, stream=None, errors='raise'): stream, and continue reading at the next line `'ignore'` completely ignore and suppress the error, and continue reading at the next line + + `validate`: If `False`, do not perform checksum validation on the incoming data. ''' if errors not in ERRORS: @@ -30,6 +32,7 @@ def __init__(self, stream=None, errors='raise'): .format(ERRORS, errors)) self.errors = errors + self.validate = validate self.stream = stream self.buffer = '' @@ -50,7 +53,7 @@ def next(self, data=None): for line in lines: try: - msg = nmea.NMEASentence.parse(line) + msg = nmea.NMEASentence.parse(line, check=self.validate) yield msg except nmea.ParseError as e: if self.errors == 'raise':