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))
|
self.parser = rcompose(*map(EitherParserWrapper, parsers))
|
||||||
|
|
||||||
def parse(self, item):
|
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):
|
def __call__(self, item):
|
||||||
return self.parse(item)
|
return self.parse(item)
|
||||||
|
|||||||
@ -1,5 +1,8 @@
|
|||||||
import json
|
import json
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from pyinfra.parser.blob_parser import ParsingError
|
||||||
from pyinfra.parser.parser_composer import EitherParserComposer
|
from pyinfra.parser.parser_composer import EitherParserComposer
|
||||||
from pyinfra.parser.parsers.identity import IdentityBlobParser
|
from pyinfra.parser.parsers.identity import IdentityBlobParser
|
||||||
from pyinfra.parser.parsers.json import JsonBlobParser
|
from pyinfra.parser.parsers.json import JsonBlobParser
|
||||||
@ -32,3 +35,8 @@ def test_either_parser_composer():
|
|||||||
|
|
||||||
a = 1
|
a = 1
|
||||||
assert parser(a) == a
|
assert parser(a) == a
|
||||||
|
|
||||||
|
parser = EitherParserComposer(JsonBlobParser(), StringBlobParser())
|
||||||
|
|
||||||
|
with pytest.raises(ParsingError):
|
||||||
|
parser(1)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user