On Tue, Jul 01, 2008 at 03:17:14PM -0500, Christopher Singley wrote: > class DecimalStringValidator(DecimalValidator): > def __init__(self, *args, **kw): > size = kw.pop('size', NoDefault)
size is not used in the __init__(). > precision = kw.pop('precision', NoDefault) > assert precision >= 0, \ > "You must give a precision argument as a positive integer" > self.precision = Decimal(10) ** (-1 * int(precision)) > super(DecimalStringValidator, self).__init__(*args, **kw) > > def to_python(self, value, state): > value = super(DecimalStringValidator, self).to_python(value, state) > if isinstance(value, Decimal): > value = value.quantize(self.precision) > return value > > def from_python(self, value, state): > value = super(DecimalStringValidator, self).from_python(value, state) > if isinstance(value, Decimal): > value = value.quantize(self.precision) > return value from_python() is supposed to return a string - this is Decimal*String*Converter, right? Shouldn't it be implemented as def from_python(self, value, state): value = super(DecimalStringValidator, self).from_python(value, state) if isinstance(value, Decimal): value = str(value.quantize(self.precision)) # or .to_eng_string() return value ? Without str() the query is INSERT INTO test (d) VALUES (10.0000) but converting to floats is exactly what we want to prevent. With str() the query is INSERT INTO test (d) VALUES ('10.0000') Oleg. -- Oleg Broytmann http://phd.pp.ru/ [EMAIL PROTECTED] Programmers don't die, they just GOSUB without RETURN. ------------------------------------------------------------------------- Sponsored by: SourceForge.net Community Choice Awards: VOTE NOW! Studies have shown that voting for your favorite open source project, along with a healthy diet, reduces your potential for chronic lameness and boredom. Vote Now at http://www.sourceforge.net/community/cca08 _______________________________________________ sqlobject-discuss mailing list sqlobject-discuss@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/sqlobject-discuss