Envelope parsing: push exception about lack of errors up into parser

fail-fast, rather than return-none-fail-later
This commit is contained in:
Klaas van Schelven
2024-10-14 11:37:30 +02:00
parent 1ca7a1ecd9
commit 1755fa32c0

View File

@@ -95,7 +95,7 @@ class StreamingEnvelopeParser:
self.envelope_headers = None
def _parse_headers(self, eof_after_header_is_error=True):
def _parse_headers(self, empty_is_error=False, eof_after_header_is_error=True):
"""
Quoted from https://develop.sentry.dev/sdk/envelopes/#headers at version 9c7f19f96562
conversion to numbered list mine
@@ -132,6 +132,9 @@ class StreamingEnvelopeParser:
header_stream_value = header_stream.getvalue()
if self.at_eof:
if header_stream_value == b"":
if empty_is_error:
raise ParseError("Expected headers, got EOF")
return None
if eof_after_header_is_error:
@@ -146,8 +149,7 @@ class StreamingEnvelopeParser:
def get_envelope_headers(self):
if self.envelope_headers is None:
# see test_eof_after_envelope_headers for why we don't error on EOF-after-header here
self.envelope_headers = self._parse_headers(eof_after_header_is_error=False)
assert self.envelope_headers is not None
self.envelope_headers = self._parse_headers(empty_is_error=True, eof_after_header_is_error=False)
return self.envelope_headers
@@ -158,7 +160,7 @@ class StreamingEnvelopeParser:
self.get_envelope_headers()
while not self.at_eof:
item_headers = self._parse_headers(eof_after_header_is_error=True)
item_headers = self._parse_headers(empty_is_error=False, eof_after_header_is_error=True)
if item_headers is None:
self.at_eof = True
break