From f718b2f7ef1a2763590b54f541ebb3a18230ffdf Mon Sep 17 00:00:00 2001 From: Matthias Bisping Date: Fri, 3 Jun 2022 16:34:37 +0200 Subject: [PATCH] parser composer checks for either-type --- pyinfra/parser/parser_composer.py | 6 +++++- test/parser/parser_test.py | 8 ++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/pyinfra/parser/parser_composer.py b/pyinfra/parser/parser_composer.py index 8bb16a6..1b22c2d 100644 --- a/pyinfra/parser/parser_composer.py +++ b/pyinfra/parser/parser_composer.py @@ -46,7 +46,11 @@ class EitherParserComposer: self.parser = rcompose(*map(EitherParserWrapper, parsers)) def parse(self, item): - return self.parser(item).item + result = self.parser(item) + if isinstance(result, Right): + return result.bind() + else: + raise ParsingError("All parsers failed.") def __call__(self, item): return self.parse(item) diff --git a/test/parser/parser_test.py b/test/parser/parser_test.py index 348be82..de40692 100644 --- a/test/parser/parser_test.py +++ b/test/parser/parser_test.py @@ -1,5 +1,8 @@ import json +import pytest + +from pyinfra.parser.blob_parser import ParsingError from pyinfra.parser.parser_composer import EitherParserComposer from pyinfra.parser.parsers.identity import IdentityBlobParser from pyinfra.parser.parsers.json import JsonBlobParser @@ -32,3 +35,8 @@ def test_either_parser_composer(): a = 1 assert parser(a) == a + + parser = EitherParserComposer(JsonBlobParser(), StringBlobParser()) + + with pytest.raises(ParsingError): + parser(1)