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.
|