# HG changeset patch # User Vincent Michel # Date 1366719238 -7200 # Node ID b167f039b6cbfbbae0cb2fd055478816e655d937 # Parent 58b3b2d9c9659c1b5f8fc720bc2a6227a6592723 [sql] preprocess_entity uses lgdb helper's SQL converters. The preprocess_entity does not yield anymore the conversion logic for different base types, but relies on a new SQL_CONVERTERS dictionary of the db helper. This will allow later inclusion of new base types. diff -r 58b3b2d9c965 -r b167f039b6cb __pkginfo__.py --- a/__pkginfo__.py Wed Apr 24 14:42:43 2013 +0200 +++ b/__pkginfo__.py Tue Apr 23 14:13:58 2013 +0200 @@ -51,7 +51,7 @@ 'Twisted': '', # XXX graphviz # server dependencies - 'logilab-database': '>= 1.8.2', + 'logilab-database': '>= 1.10', 'pysqlite': '>= 2.5.5', # XXX install pysqlite2 'passlib': '', } diff -r 58b3b2d9c965 -r b167f039b6cb debian/control --- a/debian/control Wed Apr 24 14:42:43 2013 +0200 +++ b/debian/control Tue Apr 23 14:13:58 2013 +0200 @@ -42,7 +42,7 @@ Conflicts: cubicweb-multisources Replaces: cubicweb-multisources Provides: cubicweb-multisources -Depends: ${misc:Depends}, ${python:Depends}, cubicweb-common (= ${source:Version}), cubicweb-ctl (= ${source:Version}), python-logilab-database (>= 1.8.2), cubicweb-postgresql-support | cubicweb-mysql-support | python-pysqlite2, python-passlib +Depends: ${misc:Depends}, ${python:Depends}, cubicweb-common (= ${source:Version}), cubicweb-ctl (= ${source:Version}), python-logilab-database (>= 1.10.0), cubicweb-postgresql-support | cubicweb-mysql-support | python-pysqlite2, python-passlib Recommends: pyro (<< 4.0.0), cubicweb-documentation (= ${source:Version}) Suggests: python-zmq Description: server part of the CubicWeb framework diff -r 58b3b2d9c965 -r b167f039b6cb server/sqlutils.py --- a/server/sqlutils.py Wed Apr 24 14:42:43 2013 +0200 +++ b/server/sqlutils.py Tue Apr 23 14:13:58 2013 +0200 @@ -297,12 +297,16 @@ """ attrs = {} eschema = entity.e_schema + converters = getattr(self.dbhelper, 'TYPE_CONVERTERS', {}) for attr, value in entity.cw_edited.iteritems(): if value is not None and eschema.subjrels[attr].final: atype = str(entity.e_schema.destination(attr)) - if atype == 'Boolean': - value = self.dbhelper.boolean_value(value) - elif atype == 'Password': + if atype in converters: + # It is easier to modify preprocess_entity rather + # than add_entity (native) as this behavior + # may also be used for update. + value = converters[atype](value) + elif atype == 'Password': # XXX could be done using a TYPE_CONVERTERS callback # if value is a Binary instance, this mean we got it # from a query result and so it is already encrypted if isinstance(value, Binary): @@ -310,16 +314,6 @@ else: value = crypt_password(value) value = self._binary(value) - # XXX needed for sqlite but I don't think it is for other backends - # Note: use is __class__ since issubclass(datetime, date) - elif atype in ('Datetime', 'TZDatetime') and type(value) is date: - value = todatetime(value) - elif atype == 'Date' and isinstance(value, datetime): - value = todate(value) - elif atype == 'TZDatetime' and getattr(value, 'tzinfo', None): - value = utcdatetime(value) - elif atype == 'TZTime' and getattr(value, 'tzinfo', None): - value = utctime(value) elif isinstance(value, Binary): value = self._binary(value.getvalue()) attrs[SQL_PREFIX+str(attr)] = value