From 40da5b6cb64eb2ca1396a3d8c53dc712fc684eb0 Mon Sep 17 00:00:00 2001 From: Victor Shyba Date: Fri, 1 Feb 2019 20:08:01 -0300 Subject: [PATCH] rework data parser --- lbrynet/blob_exchange/serialization.py | 30 +++++++++++--------------- 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/lbrynet/blob_exchange/serialization.py b/lbrynet/blob_exchange/serialization.py index 0b80ea1f9..99baf693d 100644 --- a/lbrynet/blob_exchange/serialization.py +++ b/lbrynet/blob_exchange/serialization.py @@ -146,32 +146,26 @@ def _parse_blob_response(response_msg: bytes) -> typing.Tuple[typing.Optional[ty # # - extra_data = b'' - response = None curr_pos = 0 while True: next_close_paren = response_msg.find(b'}', curr_pos) if next_close_paren == -1: - break + return None, response_msg curr_pos = next_close_paren + 1 try: response = json.loads(response_msg[:curr_pos]) - if not isinstance(response, dict): - raise ValueError() - for key in response.keys(): - if key not in [ - BlobPaymentAddressResponse.key, - BlobAvailabilityResponse.key, - BlobPriceResponse.key, - BlobDownloadResponse.key]: - raise ValueError() - extra_data = response_msg[curr_pos:] - break except ValueError: - response = None - if response is None: - extra_data = response_msg - return response, extra_data + continue + possible_response_keys = { + BlobPaymentAddressResponse.key, + BlobAvailabilityResponse.key, + BlobPriceResponse.key, + BlobDownloadResponse.key + } + if isinstance(response, dict) and response.keys(): + if set(response.keys()).issubset(possible_response_keys): + return response, response_msg[curr_pos:] + return None, response_msg class BlobRequest: