Re: [SQLObject] UnicodeCol and validators
SQLObject is a Python ORM.
Brought to you by:
ianbicking,
phd
From: Oleg B. <ph...@ph...> - 2009-09-16 15:58:37
|
On Wed, Sep 16, 2009 at 05:32:06PM +0200, Frank Wagner wrote: > database didn't have a charset declared at creation time > (although it is de facto in iso-8859-1). > so this was just the first working way that i could figure out. > > i guess the UnicodeCol doesn't do it in a very different way? > > > > NAME = UnicodeCol(length=40, dbName="NAME", dbEncoding='iso-8859-1') It uses a different implementation internally based on validators/converters, but UnicodeValidator does exactly that - converts strings from DB to unicode, and converts unicode to strings for DB. See col.py. BTW, speaking about validators... > def _get_NAME(self): > return self._SO_get_NAME() and unicode(self._SO_get_NAME(), > 'iso-8859-1').strip() or u'' UnicodeCol only converts strings from/to unicode, so if you need to strip and replace None's with u'' you have to do it yourself, but the way to it, especially for many columns, is to create your own validator/converter: from col import validators class StripValidator(validators.Validator): def to_python(self, value, state): if value is None: return None # or u'' if you really want it if isinstance(value, basestring): return value.strip() raise validators.Invalid("expected a str or unicode in column '%s', got %s %r instead" % \ (self.name, type(value), value), value, state) And now you can use it in as many columns as you want: NAME = UnicodeCol(length=40, dbName="NAME", dbEncoding='iso-8859-1', validator=StripValidator(name="NAME")) SURNAME = UnicodeCol(length=40, dbName="SURNAME", dbEncoding='iso-8859-1', validator=StripValidator(name="SURNAME")) SQLObject stacks validators so your validator will be used along with UnicodeValidator in UnicodeCol, not instead of it. Oleg. -- Oleg Broytmann http://phd.pp.ru/ ph...@ph... Programmers don't die, they just GOSUB without RETURN. |