From ea2d3223fbcc7b57388534c143412f86aede9f0d Mon Sep 17 00:00:00 2001 From: Matthias Bisping Date: Fri, 3 Jun 2022 14:55:04 +0200 Subject: [PATCH] parsing strategy error handling for bytes as not an encoded string --- pyinfra/visitor.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/pyinfra/visitor.py b/pyinfra/visitor.py index 1705c61..e6dbb10 100644 --- a/pyinfra/visitor.py +++ b/pyinfra/visitor.py @@ -175,7 +175,10 @@ class ParsingStrategy(abc.ABC): class DynamicParsingStrategy(ParsingStrategy): @staticmethod def attempt_parse_json(data): - return json.loads(data.decode()) + data = json.loads(data) + if "data" in data: + data["data"] = string_to_bytes(data["data"]) + return data @staticmethod def fallback(data): @@ -183,10 +186,12 @@ class DynamicParsingStrategy(ParsingStrategy): def parse(self, data: bytes) -> Union[bytes, dict]: try: - data = self.attempt_parse_json(data) - if "data" in data: - data["data"] = string_to_bytes(data["data"]) - return data + data = data.decode() + except UnicodeDecodeError: + return self.fallback(data) + + try: + return self.attempt_parse_json(data) except json.JSONDecodeError: pass