def array(factory, vals): '''Decode string/value as list array :: (a -> Result e b) -> List a -> Result e (List b) >>> from pydecoder.primitives import to_int >>> array(to_int, [1, 2, 3]) Result(status='Ok', value=[1, 2, 3]) >>> array(to_int, None) Result(status='Error', value="'None' isn't list or tuple.") ''' if not isinstance(vals, (list, tuple)): return error(u('\'{}\' isn\'t list or tuple.').format(vals)) result = [] for val in vals: rv = factory(val) if is_error(rv): return rv result.append(value(rv)) return ok(result)
def test_and_then_dont_run_next_decoder(): def dec(_val): return error('ERROR') rv = and_then(dec, to_int, 5) assert is_error(rv) assert rv.value == 'ERROR'
def test_to_val_return_error_result_if_iterator_is_empty(): @to_val def ftest(val): return val i = iter([]) rv = ftest(i) assert is_error(rv) assert rv.value == 'Value is empty.'
def test_to_string_return_error_if_value_isnt_string(val): rv = to_string(val) assert is_error(rv)
def test_to_bool_return_error_result_if_value_isnt_valid_string(): rv = to_bool('foo') assert is_error(rv)
def test_to_bool_return_error_result_if_value_isnt_string_or_bool(): rv = to_bool(1) assert is_error(rv)
def test_to_float_return_error_result(): rv = to_float('aaa') assert is_error(rv)
def test_to_int_return_error_result(): rv = to_int(None) assert is_error(rv)
def test_none_return_error_result(): rv = null('aaaa') assert is_error(rv)
def test_array_returns_error_if_value_isnt_valid_list(val): rv = array(to_int, val) assert is_error(rv) assert isinstance(rv.value, string_types)
def test_stop_on_first_error_and_returns_it(ins): rv = array(to_int, ins) assert is_error(rv) assert isinstance(rv.value, string_types)
def test_required_return_error(data): rv = required('field', error, getter(data)) # pylint: disable=no-value-for-parameter assert is_error(rv)