parser composer checks for either-type
This commit is contained in:
parent
730bdfb220
commit
f718b2f7ef
@ -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)
|
||||
|
||||
@ -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)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user