+
+class CurrencyValidator(validators.FancyValidator):
+ "A validator to convert to Currency objects."
+ messages = {'amount': "Please enter a valid currency amount",
+ 'precision': "Only two digits after the decimal, please"}
+
+ def _to_python(self, value, state):
+ try:
+ dec = Decimal(value)
+ except InvalidOperation:
+ raise Invalid(self.message('amount', state),
+ value, state)
+ else:
+ ret = dec.quantize(Decimal('1.00'))
+ if ret != dec:
+ raise Invalid(self.message('precision', state),
+ value, state)
+ else:
+ return Currency(int(ret * 100))
+
+