from cloudkitty import validation_utils as vutils # NOTE(peschk_l): qty and price are converted to strings to avoid # floating-point conversion issues: # Decimal(0.121) == Decimal('0.12099999999999999644728632119') # Decimal(str(0.121)) == Decimal('0.121') DATAPOINT_SCHEMA = voluptuous.Schema({ voluptuous.Required('vol'): { voluptuous.Required('unit'): vutils.get_string_type(), voluptuous.Required('qty'): voluptuous.Coerce(str), }, voluptuous.Required('rating', default={}): { voluptuous.Required('price', default=0): voluptuous.Coerce(str), }, voluptuous.Required('groupby'): vutils.DictTypeValidator(str, str), voluptuous.Required('metadata'): vutils.DictTypeValidator(str, str), }) _DataPointBase = collections.namedtuple( "DataPoint", field_names=("unit", "qty", "price", "groupby", "metadata")) class DataPoint(_DataPointBase): def __new__(cls, unit, qty, price, groupby, metadata): return _DataPointBase.__new__( cls, unit or "undefined",
def test_dictvalidator_invalid_type_str(self): validator = validation_utils.DictTypeValidator(str, int) self.assertRaises(voluptuous.error.Invalid, validator, 'aaaa')
def test_dictvalidator_invalid_dict_without_cast(self): validator = validation_utils.DictTypeValidator(str, str, cast=False) self.assertRaises(voluptuous.error.Invalid, validator, { 'a': '1', 'b': 2 })
def test_dictvalidator_invalid_dict_with_cast(self): validator = validation_utils.DictTypeValidator(str, int) self.assertRaises(voluptuous.error.Invalid, validator, { 'a': '1', 'b': 'aa' })
def test_dictvalidator_valid_dict_without_cast(self): validator = validation_utils.DictTypeValidator(str, str, cast=False) self.assertEqual(validator({'a': '1', 'b': '2'}), {'a': '1', 'b': '2'})