|
2 | 2 | import json |
3 | 3 | import mimetypes |
4 | 4 |
|
5 | | -from sentry_sdk._compat import text_type |
| 5 | +from sentry_sdk._compat import text_type, PY2 |
6 | 6 | from sentry_sdk._types import MYPY |
7 | 7 | from sentry_sdk.session import Session |
8 | 8 | from sentry_sdk.utils import json_dumps, capture_internal_exceptions |
|
18 | 18 | from sentry_sdk._types import Event, EventDataCategory |
19 | 19 |
|
20 | 20 |
|
| 21 | +def parse_json(data): |
| 22 | + # type: (Union[bytes, text_type]) -> Any |
| 23 | + # on some python 3 versions this needs to be bytes |
| 24 | + if not PY2 and isinstance(data, bytes): |
| 25 | + data = data.decode("utf-8", "replace") |
| 26 | + return json.loads(data) |
| 27 | + |
| 28 | + |
21 | 29 | class Envelope(object): |
22 | 30 | def __init__( |
23 | 31 | self, |
@@ -114,7 +122,7 @@ def deserialize_from( |
114 | 122 | cls, f # type: Any |
115 | 123 | ): |
116 | 124 | # type: (...) -> Envelope |
117 | | - headers = json.loads(f.readline()) |
| 125 | + headers = parse_json(f.readline()) |
118 | 126 | items = [] |
119 | 127 | while 1: |
120 | 128 | item = Item.deserialize_from(f) |
@@ -236,6 +244,8 @@ def data_category(self): |
236 | 244 | return "transaction" |
237 | 245 | elif ty == "event": |
238 | 246 | return "error" |
| 247 | + elif ty == "client_report": |
| 248 | + return "internal" |
239 | 249 | else: |
240 | 250 | return "default" |
241 | 251 |
|
@@ -284,11 +294,11 @@ def deserialize_from( |
284 | 294 | line = f.readline().rstrip() |
285 | 295 | if not line: |
286 | 296 | return None |
287 | | - headers = json.loads(line) |
| 297 | + headers = parse_json(line) |
288 | 298 | length = headers["length"] |
289 | 299 | payload = f.read(length) |
290 | 300 | if headers.get("type") in ("event", "transaction"): |
291 | | - rv = cls(headers=headers, payload=PayloadRef(json=json.loads(payload))) |
| 301 | + rv = cls(headers=headers, payload=PayloadRef(json=parse_json(payload))) |
292 | 302 | else: |
293 | 303 | rv = cls(headers=headers, payload=payload) |
294 | 304 | f.readline() |
|
0 commit comments