def _build_validator(self): self._sig = inspect.signature(self.Regressor) default_hyperpars = { key: value.default for key, value in self._sig.parameters.items() if value.default not in [None, inspect._empty] } schema = Schema.infer(default_hyperpars).schema coerce_schema = { key: Coerce(value) for key, value in schema.items() if key != "kwargs" } coerce_schema.update(self.override_validation) self._coerce_schema = Schema(coerce_schema, extra=ALLOW_EXTRA) def validator(pars): dpars = default_hyperpars.copy() dpars.update({ key: value for key, value in pars.items() if value is not None }) pars = self._coerce_schema(dpars) return pars return validator
def test_schema_infer_list(): schema = Schema.infer({ 'list': ['foo', True, 42, 3.14] }) assert_equal(schema, Schema({ Required('list'): [str, bool, int, float] }))
def test_schema_infer_dict(): schema = Schema.infer({'a': {'b': {'c': 'foo'}}}) assert_equal( schema, Schema({Required('a'): { Required('b'): { Required('c'): str } }}))
def test_schema_infer_scalar(): assert_equal(Schema.infer('foo'), Schema(str)) assert_equal(Schema.infer(True), Schema(bool)) assert_equal(Schema.infer(42), Schema(int)) assert_equal(Schema.infer(3.14), Schema(float)) assert_equal(Schema.infer({}), Schema(dict)) assert_equal(Schema.infer([]), Schema(list))
def test_schema_infer_scalar(): assert Schema.infer('foo') == Schema(str) assert Schema.infer(True) == Schema(bool) assert Schema.infer(42) == Schema(int) assert Schema.infer(3.14) == Schema(float) assert Schema.infer({}) == Schema(dict) assert Schema.infer([]) == Schema(list)
def test_schema_infer(): schema = Schema.infer({ 'str': 'foo', 'bool': True, 'int': 42, 'float': 3.14 }) assert_equal(schema, Schema({ Required('str'): str, Required('bool'): bool, Required('int'): int, Required('float'): float }))
def test_schema_infer_dict(): schema = Schema.infer({ 'a': { 'b': { 'c': 'foo' } } }) assert_equal(schema, Schema({ Required('a'): { Required('b'): { Required('c'): str } } }))
def test_schema_infer_accepts_kwargs(): schema = Schema.infer({ 'str': 'foo', 'bool': True }, required=False, extra=True) # Subset of schema should be acceptable thanks to required=False. schema({'bool': False}) # Keys that are in schema should still match required types. try: schema({'str': 42}) except Invalid: pass else: assert False, 'Did not raise Invalid for Number' # Extra fields should be acceptable thanks to extra=True. schema({'str': 'bar', 'int': 42})