I have a patch for a bug I found in the DecimalValidator class in col.py.† I am getting messages saying no attribute 'name' of DecimalValidator.† This is is traceable to col.py, about line 1300:

def from_python(self, value, state):

††† if value is None:

††††††† return None

††† if isinstance(value, float):

††††††† value = str(value)

††† if isinstance(value, (str, unicode)):

††††††† connection = state.soObject._connection

††††††† if hasattr(connection, "decimalSeparator"):

††††††††††† value = value.replace(connection.decimalSeparator, ".")

††††††† try:

††††††††††† return Decimal(value)

††††††† except:

††††††††††† raise validators.Invalid("can not parse Decimal value '%s' in the DecimalCol from '%s'" %

††††††††††††††† (value, getattr(state, 'soObject', '(unknown)')), value, state)

††† if not isinstance(value, (int, long, Decimal, sqlbuilder.SQLExpression)):

††††††† raise validators.Invalid("expected a decimal in the DecimalCol '%s', got %s %r instead" % \

††††††††††† (getattr(self, 'name', '(unknown name)'), type(value), value), value, state)

††† return value

The change is in the next-to-last line (the raise() call).† The problem, as I mentioned, is DecimalValidator having no attribute 'name' (a reference to self.name).Changing self.name to getattr(self, 'name', '(unknown name)') eliminates this problem and preserves a nice error message showing you what the problem is.

Likewise, thereís a line above this in the to_python() method that could/should be changed similarly.

Sorry, I donít know how to create a test for this, my code is rather complex.

-- Kevin