def test_validate_float(self): self.assertEqual(types.validate_value(float, 1), 1.0) self.assertEqual(types.validate_value(float, '1'), 1.0) self.assertEqual(types.validate_value(float, 1.1), 1.1) self.assertRaises(ValueError, types.validate_value, float, []) self.assertRaises(ValueError, types.validate_value, float, 'not-a-float')
def test_validate_dict(self): assert types.validate_value({int: str}, {1: '1', 5: '5'}) self.assertRaises(ValueError, types.validate_value, {int: str}, []) assert types.validate_value({int: str}, {'1': '1', 5: '5'}) self.assertRaises(ValueError, types.validate_value, {int: str}, { 1: 1, 5: '5' })
def fromjson_complex(datatype, value): obj = datatype() attributes = atypes.list_attributes(datatype) # Here we check that all the attributes in the value are also defined # in our type definition, otherwise we raise an Error. v_keys = set(value.keys()) a_keys = set(adef.name for adef in attributes) if not v_keys <= a_keys: raise exception.UnknownAttribute(None, v_keys - a_keys) for attrdef in attributes: if attrdef.name in value: try: val_fromjson = fromjson(attrdef.datatype, value[attrdef.name]) except exception.UnknownAttribute as e: e.add_fieldname(attrdef.name) raise if getattr(attrdef, 'readonly', False): raise exception.InvalidInput(attrdef.name, val_fromjson, "Cannot set read only field.") setattr(obj, attrdef.key, val_fromjson) elif attrdef.mandatory: raise exception.InvalidInput(attrdef.name, None, "Mandatory field missing.") return atypes.validate_value(datatype, obj)
def test_validate_int(self): self.assertEqual(types.validate_value(int, 1), 1) self.assertEqual(types.validate_value(int, '1'), 1) self.assertRaises(ValueError, types.validate_value, int, 1.1)
def test_validate_list_empty(self): assert types.validate_value([int], []) == []
def test_validate_list_valid(self): assert types.validate_value([int], [1, 2]) assert types.validate_value([int], ['5'])