[Sqlalchemy-tickets] [sqlalchemy] #2596: type level events for bind/result processors
Brought to you by:
zzzeek
From: sqlalchemy <mi...@zz...> - 2012-10-25 16:15:38
|
#2596: type level events for bind/result processors -------------------------+------------------------------------ Reporter: zzzeek | Owner: zzzeek Type: enhancement | Status: new Priority: medium | Milestone: 0.8.xx Component: sql | Severity: major - 1-3 hours Keywords: | Progress State: not decided upon -------------------------+------------------------------------ this would allow easy addition of bind and result handlers across existing types without the need for using custom types. {{{ #!diff diff -r d576b5fd0cb9 lib/sqlalchemy/types.py --- a/lib/sqlalchemy/types.py Thu Oct 25 12:07:38 2012 -0400 +++ b/lib/sqlalchemy/types.py Thu Oct 25 12:14:41 2012 -0400 @@ -273,7 +273,14 @@ return dialect._type_memos[self]['bind'] except KeyError: d = self._dialect_info(dialect) - d['bind'] = bp = d['impl'].bind_processor(dialect) + if self.dispatch.bind_processor: + bp = self.dispatch.bind_processor(self, dialect) + if bp is None: + bp = d['impl'].bind_processor(dialect) + else: + bp = d['impl'].bind_processor(dialect) + + d['bind'] = bp return bp def _cached_result_processor(self, dialect, coltype): @@ -283,10 +290,18 @@ return dialect._type_memos[self][coltype] except KeyError: d = self._dialect_info(dialect) + + if self.dispatch.result_processor: + rp = self.dispatch.result_processor(self, dialect, coltype) + if rp is None: + rp = d['impl'].result_processor(dialect, coltype) + else: + rp = d['impl'].result_processor(dialect, coltype) + # key assumption: DBAPI type codes are # constants. Else this dictionary would # grow unbounded. - d[coltype] = rp = d['impl'].result_processor(dialect, coltype) + d[coltype] = rp return rp def _dialect_info(self, dialect): }}} -- Ticket URL: <http://www.sqlalchemy.org/trac/ticket/2596> sqlalchemy <http://www.sqlalchemy.org/> The Database Toolkit for Python |