[SQLObject] boolean types & python 2.2.x
SQLObject is a Python ORM.
Brought to you by:
ianbicking,
phd
|
From: Greg B. <ge...@po...> - 2003-12-06 21:56:02
|
I've found a minor problem using boolean columns on Pythons that don't
have a builtin boolean type:
File "SQLObject/DBConnection.py", line 72, in _runWithConnection
val = meth(conn, *args)
File "SQLObject/DBConnection.py", line 457, in _queryInsertID
q = self._insertSQL(table, names, values)
File "SQLObject/DBConnection.py", line 154, in _insertSQL
', '.join([self.sqlrepr(v) for v in values])))
File "SQLObject/DBConnection.py", line 365, in sqlrepr
return sqlrepr(v, self.dbName)
File "SQLObject/Converters.py", line 168, in sqlrepr
raise ValueError, "Unknown SQL builtin type: %s for %s" % \
ValueError: Unknown SQL builtin type: <type 'instance'> for TRUE
For Python 2.2, a BOOL class is being defined to simulate the important
behavior of 2.3's builtin 'bool' type. The problem has to do with how
the BOOL is being added to the ConverterRegistry. It's being
registered as:
registerConverter(type(TRUE), BoolConverter)
...which is how the rest of the converters are being registered in
Converters.py. This doesn't work because all the others are new-style
classes that can be discriminated by type(x) while BOOL is an old-style
class, and the type() of all old-style classes is 'instance'.
Old-style classes are being correctly registered with the
ConverterRegistry in SQLBuilder.py, with only the Class object being
passed into registerConverter() instead of the type() of the class.
It seems like the cleanest fix is to make BOOL a new-style class by
changing it's definition to:
class BOOL(object):
so that it can be registered in the same way as all other types in the
Converters.py module regardless of whether it's on Python 2.2 or 2.3.
This is with SQLObject 0.5.1, by the way.
- greg
|