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)