Re: [SQLObject] datetime column conversions
SQLObject is a Python ORM.
Brought to you by:
ianbicking,
phd
From: Max I. <ma...@uc...> - 2005-01-06 10:58:21
|
Oleg Broytmann wrote: >>register a coersion method, as Carlos suggests. > > > class Converting(SQLObject): > age = IntCol(validator=validators.Wrapper(fromPython=int), default=100) That's great. But why not: class Converting(SQLObject): age = IntCol(toPython=int, default=100) Yes, it's just a shortcut but it streamlines an API. Another use case. Here is my current version to plug-in my own currency type: class CurrencyMoneyValidator(validators.Validator): def fromPython(self, value, state): if isinstance(value, Money): return value.getValue() return value def toPython(self, value, state): if isinstance(value, float): return Money(value=value) return value class SOMoneyCol(SOCurrencyCol): def __init__(self, **kw): SOCurrencyCol.__init__(self, **kw) self.validator = validators.All.join( CurrencyMoneyValidator(), self.validator) class MoneyCol(Col): baseClass = SOMoneyCol IMO, it's clumsy and unnecessarily complex. I'd prefer something like this: class Foo(SQLObject): total = CurrencyCol(fromPython=convertFromMoney, toPython=Money) Hmm...after some thoughts, I don't really want to duplicate this declaration for every column of the currency type, but say it just once. After all, my current version does exactly that, if a bit verbose. ;-) Still, I'm eager to see a more succint notation for this particular use case. May be like this: MyCurrencyCol = Col.newClass(base=CurrencyCol, fromPython=lambda v: v.asString(), toPython=Money) Btw, have another question with regard to validators. See the class above: class CurrencyMoneyValidator(validators.Validator): def fromPython(self, value, state): if isinstance(value, Money): return value.getValue() return value def toPython(self, value, state): if isinstance(value, float): return Money(value=value) return value Here I have to check if passed in value is not None. Woudn't it be better if fromPython/toPython to be called if the value is *not* None - to get rid of these if statements. |