From eddb17dea7bd40df77d10cfc6ea4578c7622b0cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Mon, 15 Jun 2015 01:18:07 +0200 Subject: [PATCH] Re-factor dict* methods on each cursor into the interface issue4807 review7241002 --- trytond/backend/database.py | 19 ++++++++++++++++++ trytond/backend/mysql/database.py | 27 +------------------------- trytond/backend/postgresql/database.py | 25 +----------------------- trytond/backend/sqlite/database.py | 24 +---------------------- 4 files changed, 22 insertions(+), 73 deletions(-) diff --git a/trytond/backend/database.py b/trytond/backend/database.py index 6168a03593..400117690d 100644 --- a/trytond/backend/database.py +++ b/trytond/backend/database.py @@ -219,3 +219,22 @@ class CursorInterface(object): :return: a boolean ''' + + def __build_dict(self, row): + return dict((desc[0], row[i]) + for i, desc in enumerate(self.description)) + + def dictfetchone(self): + row = self.fetchone() + if row: + return self.__build_dict(row) + else: + return row + + def dictfetchmany(self, size): + rows = self.fetchmany(size) + return [self.__build_dict(row) for row in rows] + + def dictfetchall(self): + rows = self.fetchall() + return [self.__build_dict(row) for row in rows] diff --git a/trytond/backend/mysql/database.py b/trytond/backend/mysql/database.py index 880680c542..5f034dcadc 100644 --- a/trytond/backend/mysql/database.py +++ b/trytond/backend/mysql/database.py @@ -247,31 +247,6 @@ class Database(DatabaseInterface): (0, module_id, dependency)) -class _Cursor(MySQLdb.cursors.Cursor): - - def __build_dict(self, row): - return dict((desc[0], row[i]) - for i, desc in enumerate(self.description)) - - def dictfetchone(self): - row = self.fetchone() - if row: - return self.__build_dict(row) - else: - return row - - def dictfetchmany(self, size): - rows = self.fetchmany(size) - return [self.__build_dict(row) for row in rows] - - def dictfetchall(self): - rows = self.fetchall() - return [self.__build_dict(row) for row in rows] - - def fetchall(self): - return list(super(_Cursor, self).fetchall()) - - class Cursor(CursorInterface): def __init__(self, conn, database_name): @@ -279,7 +254,7 @@ class Cursor(CursorInterface): self._conn = conn self.database_name = database_name self.dbname = self.database_name # XXX to remove - self.cursor = conn.cursor(_Cursor) + self.cursor = conn.cursor() def __getattr__(self, name): return getattr(self.cursor, name) diff --git a/trytond/backend/postgresql/database.py b/trytond/backend/postgresql/database.py index e78d896033..ef59545cbf 100644 --- a/trytond/backend/postgresql/database.py +++ b/trytond/backend/postgresql/database.py @@ -15,7 +15,6 @@ try: except ImportError: pass from psycopg2.pool import ThreadedConnectionPool -from psycopg2.extensions import cursor as PsycopgCursor from psycopg2.extensions import ISOLATION_LEVEL_REPEATABLE_READ from psycopg2.extensions import ISOLATION_LEVEL_AUTOCOMMIT from psycopg2.extensions import register_type, register_adapter @@ -269,28 +268,6 @@ class Database(DatabaseInterface): (0, module_id, dependency)) -class _Cursor(PsycopgCursor): - - def __build_dict(self, row): - return dict((desc[0], row[i]) - for i, desc in enumerate(self.description)) - - def dictfetchone(self): - row = self.fetchone() - if row: - return self.__build_dict(row) - else: - return row - - def dictfetchmany(self, size): - rows = self.fetchmany(size) - return [self.__build_dict(row) for row in rows] - - def dictfetchall(self): - rows = self.fetchall() - return [self.__build_dict(row) for row in rows] - - class Cursor(CursorInterface): def __init__(self, connpool, conn, database): @@ -298,7 +275,7 @@ class Cursor(CursorInterface): self._connpool = connpool self._conn = conn self._database = database - self.cursor = conn.cursor(cursor_factory=_Cursor) + self.cursor = conn.cursor() self.commit() self.sql_from_log = {} self.sql_into_log = {} diff --git a/trytond/backend/sqlite/database.py b/trytond/backend/sqlite/database.py index d901f9ad03..2fcc1a3970 100644 --- a/trytond/backend/sqlite/database.py +++ b/trytond/backend/sqlite/database.py @@ -321,28 +321,6 @@ class Database(DatabaseInterface): cursor.execute(*insert) -class _Cursor(sqlite.Cursor): - - def __build_dict(self, row): - return dict((desc[0], row[i]) - for i, desc in enumerate(self.description)) - - def dictfetchone(self): - row = self.fetchone() - if row: - return self.__build_dict(row) - else: - return row - - def dictfetchmany(self, size): - rows = self.fetchmany(size) - return [self.__build_dict(row) for row in rows] - - def dictfetchall(self): - rows = self.fetchall() - return [self.__build_dict(row) for row in rows] - - class Cursor(CursorInterface): IN_MAX = 200 @@ -351,7 +329,7 @@ class Cursor(CursorInterface): self._conn = conn self.database_name = database_name self.dbname = self.database_name # XXX to remove - self.cursor = conn.cursor(_Cursor) + self.cursor = conn.cursor() def __getattr__(self, name): if _FIX_ROWCOUNT and name == 'rowcount':