def validate_dated_value_json(value, state = None): if value is None: return None, None container = state.ancestors[-1] value_converter = dict( boolean = conv.condition( conv.test_isinstance(int), conv.test_in((0, 1)), conv.test_isinstance(bool), ), float = conv.condition( conv.test_isinstance(int), conv.anything_to_float, conv.test_isinstance(float), ), integer = conv.condition( conv.test_isinstance(float), conv.pipe( conv.test(lambda number: round(number) == number), conv.function(int), ), conv.test_isinstance(int), ), rate = conv.condition( conv.test_isinstance(int), conv.anything_to_float, conv.test_isinstance(float), ), )[container.get('format') or 'float'] # Only parameters have a "format". return value_converter(value, state = state or conv.default_state)
def validate_dated_value_json(value, state=None): if value is None: return None, None container = state.ancestors[-1] value_converter = dict( boolean=conv.condition( conv.test_isinstance(int), conv.test_in((0, 1)), conv.test_isinstance(bool), ), float=conv.condition( conv.test_isinstance(int), conv.anything_to_float, conv.test_isinstance(float), ), integer=conv.condition( conv.test_isinstance(float), conv.pipe( conv.test(lambda number: round(number) == number), conv.function(int), ), conv.test_isinstance(int), ), rate=conv.condition( conv.test_isinstance(int), conv.anything_to_float, conv.test_isinstance(float), ), )[container.get('format') or 'float'] # Only parameters have a "format". return value_converter(value, state=state or conv.default_state)
def validate_node_json(node, state=None): if node is None: return None, None if state is None: state = conv.default_state validated_node, errors = conv.pipe( conv.condition( conv.test_isinstance(list), conv.uniform_sequence( validate_node_json, drop_none_items=True, ), conv.pipe( conv.condition( conv.test_isinstance(basestring_type), conv.function(lambda code: dict(code=code)), conv.test_isinstance(dict), ), conv.struct( dict( children=conv.pipe( conv.test_isinstance(list), conv.uniform_sequence( validate_node_json, drop_none_items=True, ), conv.empty_to_none, ), code=conv.pipe( conv.test_isinstance(basestring_type), conv.cleanup_line, ), ), constructor=collections.OrderedDict, default=conv.noop, drop_none_values='missing', keep_value_order=True, ), ), ), conv.empty_to_none, )(node, state=state) if validated_node is None or errors is not None: return validated_node, errors if isinstance(validated_node, dict) and not validated_node.get('children'): validated_node, errors = conv.struct( dict(code=conv.pipe( conv.test_in(tax_benefit_system.variables), conv.not_none, ), ), default=conv.noop, )(validated_node, state=state) return validated_node, errors
def make_json_to_array_by_period(self, period): return conv.condition( conv.test_isinstance(dict), conv.pipe( # Value is a dict of (period, value) couples. conv.uniform_mapping( conv.pipe( conv.function(periods.period), conv.not_none, ), conv.pipe( conv.make_item_to_singleton(), conv.uniform_sequence(self.json_to_dated_python, ), conv.empty_to_none, conv.function(lambda cells_list: np.array( cells_list, dtype=self.dtype)), ), drop_none_values=True, ), conv.empty_to_none, ), conv.pipe( conv.make_item_to_singleton(), conv.uniform_sequence(self.json_to_dated_python, ), conv.empty_to_none, conv.function( lambda cells_list: np.array(cells_list, dtype=self.dtype)), conv.function(lambda array: {period: array}), ), )
def json_to_dated_python(self): return conv.pipe( conv.condition( conv.test_isinstance((float, int)), # YAML stores strings containing only digits as numbers. conv.function(str), ), conv.test_isinstance(basestring_type), )
def json_to_dated_python(self): return conv.pipe( conv.condition( conv.test_isinstance((float, int)), # YAML stores strings containing only digits as numbers. conv.function(str), ), conv.test_isinstance(basestring_type), conv.test(lambda value: len(value) <= self.variable.max_length), )
def json_to_dated_python(self): return conv.pipe( conv.condition( conv.test_isinstance(datetime.date), conv.noop, conv.condition( conv.test_isinstance(int), conv.pipe( conv.test_between(1870, 2099), conv.function(lambda year: datetime.date(year, 1, 1)), ), conv.pipe( conv.test_isinstance(basestring_type), conv.test(year_or_month_or_day_re.match, error = N_('Invalid date')), conv.function(lambda birth: '-'.join((birth.split('-') + ['01', '01'])[:3])), conv.iso8601_input_to_date, ), ), ), conv.test_between(datetime.date(1870, 1, 1), datetime.date(2099, 12, 31)), )
def json_to_python(self): return conv.condition( conv.test_isinstance(dict), conv.pipe( # Value is a dict of (period, value) couples. conv.uniform_mapping( conv.pipe( conv.function(periods.period), conv.not_none, ), self.json_to_dated_python, ), ), self.json_to_dated_python, )
def json_or_python_to_test_case(value, state = None): if value is None: return value, None if state is None: state = conv.default_state column_by_name = self.tax_benefit_system.column_by_name # First validation and conversion step test_case, error = conv.pipe( conv.test_isinstance(dict), conv.struct( dict( familles = conv.pipe( conv.condition( conv.test_isinstance(list), conv.pipe( conv.uniform_sequence( conv.test_isinstance(dict), drop_none_items = True, ), conv.function(lambda values: collections.OrderedDict( (value.pop('id', index), value) for index, value in enumerate(values) )), ), ), conv.test_isinstance(dict), conv.uniform_mapping( conv.pipe( conv.test_isinstance((basestring, int)), conv.not_none, ), conv.pipe( conv.test_isinstance(dict), conv.struct( dict(itertools.chain( dict( enfants = conv.pipe( conv.test_isinstance(list), conv.uniform_sequence( conv.test_isinstance((basestring, int)), drop_none_items = True, ), conv.default([]), ), parents = conv.pipe( conv.test_isinstance(list), conv.uniform_sequence( conv.test_isinstance((basestring, int)), drop_none_items = True, ), conv.default([]), ), ).iteritems(), ( (column.name, column.json_to_python) for column in column_by_name.itervalues() if column.entity == 'fam' ), )), drop_none_values = True, ), ), drop_none_values = True, ), conv.default({}), ), individus = conv.pipe( conv.condition( conv.test_isinstance(list), conv.pipe( conv.uniform_sequence( conv.test_isinstance(dict), drop_none_items = True, ), conv.function(lambda values: collections.OrderedDict( (value.pop('id', index), value) for index, value in enumerate(values) )), ), ), conv.test_isinstance(dict), conv.uniform_mapping( conv.pipe( conv.test_isinstance((basestring, int)), conv.not_none, ), conv.pipe( conv.test_isinstance(dict), conv.struct( dict( (column.name, column.json_to_python) for column in column_by_name.itervalues() if column.entity == 'ind' and column.name not in ( 'idfam', 'idfoy', 'idmen', 'quifam', 'quifoy', 'quimen') ), drop_none_values = True, ), ), drop_none_values = True, ), conv.empty_to_none, conv.not_none, ), ), ), )(value, state = state) if error is not None: return test_case, error # Second validation step familles_individus_id = list(test_case['individus'].iterkeys()) test_case, error = conv.struct( dict( familles = conv.uniform_mapping( conv.noop, conv.struct( dict( enfants = conv.uniform_sequence(conv.test_in_pop(familles_individus_id)), parents = conv.uniform_sequence(conv.test_in_pop(familles_individus_id)), ), default = conv.noop, ), ), ), default = conv.noop, )(test_case, state = state) remaining_individus_id = set(familles_individus_id) if remaining_individus_id: if error is None: error = {} for individu_id in remaining_individus_id: error.setdefault('individus', {})[individu_id] = state._(u"Individual is missing from {}").format( state._(u' & ').join( word for word in [ u'familles' if individu_id in familles_individus_id else None, ] if word is not None )) if error is not None: return test_case, error return test_case, error
def validate_value_json(value, state = None): if value is None: return None, None container = state.ancestors[-1] value_converter = dict( boolean = conv.condition( conv.test_isinstance(int), conv.test_in((0, 1)), conv.test_isinstance(bool), ), float = conv.condition( conv.test_isinstance(int), conv.anything_to_float, conv.test_isinstance(float), ), integer = conv.condition( conv.test_isinstance(float), conv.pipe( conv.test(lambda number: round(number) == number), conv.function(int), ), conv.test_isinstance(int), ), rate = conv.condition( conv.test_isinstance(int), conv.anything_to_float, conv.test_isinstance(float), ), )[container.get('format') or 'float'] # Only parameters have a "format". state = conv.add_ancestor_to_state(state, value) validated_value, errors = conv.pipe( conv.test_isinstance(dict), conv.struct( { u'comment': conv.pipe( conv.test_isinstance(basestring), conv.cleanup_text, ), u'from': conv.pipe( conv.test_isinstance(basestring), conv.iso8601_input_to_date, conv.date_to_iso8601_str, conv.not_none, ), u'to': conv.pipe( conv.test_isinstance(basestring), conv.iso8601_input_to_date, conv.date_to_iso8601_str, conv.not_none, ), u'value': conv.pipe( value_converter, conv.not_none, ), }, constructor = collections.OrderedDict, drop_none_values = 'missing', keep_value_order = True, ), )(value, state = state) conv.remove_ancestor_from_state(state, value) return validated_value, errors
drop_none_values = 'missing', keep_value_order = True, ), )(value, state = state) conv.remove_ancestor_from_state(state, value) return validated_value, errors validate_values_holder_json = conv.pipe( conv.test_isinstance(list), conv.uniform_sequence( validate_value_json, drop_none_items = True, ), make_validate_values_json_dates(require_consecutive_dates = False), conv.empty_to_none, ) # Level-2 Converters validate_any_legislation_json = conv.pipe( conv.test_isinstance(dict), conv.condition( conv.test(lambda legislation_json: 'datesim' in legislation_json), validate_dated_legislation_json, validate_node_json, ), )
def validate_value_json(value, state=None): if value is None: return None, None container = state.ancestors[-1] value_converter = dict( boolean=conv.condition( conv.test_isinstance(int), conv.test_in((0, 1)), conv.test_isinstance(bool), ), float=conv.condition( conv.test_isinstance(int), conv.anything_to_float, conv.test_isinstance(float), ), integer=conv.condition( conv.test_isinstance(float), conv.pipe( conv.test(lambda number: round(number) == number), conv.function(int), ), conv.test_isinstance(int), ), rate=conv.condition( conv.test_isinstance(int), conv.anything_to_float, conv.test_isinstance(float), ), )[container.get('format') or 'float'] # Only parameters have a "format". state = conv.add_ancestor_to_state(state, value) validated_value, errors = conv.pipe( conv.test_isinstance(dict), conv.struct( { u'comment': conv.pipe( conv.test_isinstance(basestring), conv.cleanup_text, ), u'from': conv.pipe( conv.test_isinstance(basestring), conv.iso8601_input_to_date, conv.date_to_iso8601_str, conv.not_none, ), u'to': conv.pipe( conv.test_isinstance(basestring), conv.iso8601_input_to_date, conv.date_to_iso8601_str, conv.not_none, ), u'value': conv.pipe( value_converter, conv.not_none, ), }, constructor=collections.OrderedDict, drop_none_values='missing', keep_value_order=True, ), )(value, state=state) conv.remove_ancestor_from_state(state, value) return validated_value, errors
}, constructor=collections.OrderedDict, drop_none_values='missing', keep_value_order=True, ), )(value, state=state) conv.remove_ancestor_from_state(state, value) return validated_value, errors validate_values_holder_json = conv.pipe( conv.test_isinstance(list), conv.uniform_sequence( validate_value_json, drop_none_items=True, ), make_validate_values_json_dates(require_consecutive_dates=False), conv.empty_to_none, ) # Level-2 Converters validate_any_legislation_json = conv.pipe( conv.test_isinstance(dict), conv.condition( conv.test(lambda legislation_json: 'datesim' in legislation_json), validate_dated_legislation_json, validate_node_json, ), )