| Total Complexity | 35 |
| Total Lines | 109 |
| Duplicated Lines | 27.52 % |
Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.
Common duplication problems, and corresponding solutions are:
| 1 | #!/usr/bin/env python |
||
| 16 | class BaseDB: |
||
| 17 | |||
| 18 | ''' |
||
| 19 | BaseDB |
||
| 20 | |||
| 21 | dbcur should be overwirte |
||
| 22 | ''' |
||
| 23 | __tablename__ = None |
||
| 24 | placeholder = '%s' |
||
| 25 | |||
| 26 | @staticmethod |
||
| 27 | def escape(string): |
||
| 28 | return '`%s`' % string |
||
| 29 | |||
| 30 | @property |
||
| 31 | def dbcur(self): |
||
| 32 | raise NotImplementedError |
||
| 33 | |||
| 34 | def _execute(self, sql_query, values=[]): |
||
| 35 | dbcur = self.dbcur |
||
| 36 | dbcur.execute(sql_query, values) |
||
| 37 | return dbcur |
||
| 38 | |||
| 39 | def _select(self, tablename=None, what="*", where="", where_values=[], offset=0, limit=None): |
||
| 40 | tablename = self.escape(tablename or self.__tablename__) |
||
| 41 | if isinstance(what, list) or isinstance(what, tuple) or what is None: |
||
| 42 | what = ','.join(self.escape(f) for f in what) if what else '*' |
||
| 43 | |||
| 44 | sql_query = "SELECT %s FROM %s" % (what, tablename) |
||
| 45 | if where: |
||
| 46 | sql_query += " WHERE %s" % where |
||
| 47 | if limit: |
||
| 48 | sql_query += " LIMIT %d, %d" % (offset, limit) |
||
| 49 | logger.debug("<sql: %s>", sql_query) |
||
| 50 | |||
| 51 | for row in self._execute(sql_query, where_values): |
||
| 52 | yield row |
||
| 53 | |||
| 54 | def _select2dic(self, tablename=None, what="*", where="", where_values=[], |
||
| 55 | order=None, offset=0, limit=None): |
||
| 56 | tablename = self.escape(tablename or self.__tablename__) |
||
| 57 | if isinstance(what, list) or isinstance(what, tuple) or what is None: |
||
| 58 | what = ','.join(self.escape(f) for f in what) if what else '*' |
||
| 59 | |||
| 60 | sql_query = "SELECT %s FROM %s" % (what, tablename) |
||
| 61 | if where: |
||
| 62 | sql_query += " WHERE %s" % where |
||
| 63 | if order: |
||
| 64 | sql_query += ' ORDER BY %s' % order |
||
| 65 | if limit: |
||
| 66 | sql_query += " LIMIT %d, %d" % (offset, limit) |
||
| 67 | logger.debug("<sql: %s>", sql_query) |
||
| 68 | |||
| 69 | dbcur = self._execute(sql_query, where_values) |
||
| 70 | fields = [f[0] for f in dbcur.description] |
||
| 71 | |||
| 72 | for row in dbcur: |
||
| 73 | yield dict(zip(fields, row)) |
||
| 74 | |||
| 75 | View Code Duplication | def _replace(self, tablename=None, **values): |
|
|
|
|||
| 76 | tablename = self.escape(tablename or self.__tablename__) |
||
| 77 | if values: |
||
| 78 | _keys = ", ".join(self.escape(k) for k in values) |
||
| 79 | _values = ", ".join([self.placeholder, ] * len(values)) |
||
| 80 | sql_query = "REPLACE INTO %s (%s) VALUES (%s)" % (tablename, _keys, _values) |
||
| 81 | else: |
||
| 82 | sql_query = "REPLACE INTO %s DEFAULT VALUES" % tablename |
||
| 83 | logger.debug("<sql: %s>", sql_query) |
||
| 84 | |||
| 85 | if values: |
||
| 86 | dbcur = self._execute(sql_query, list(itervalues(values))) |
||
| 87 | else: |
||
| 88 | dbcur = self._execute(sql_query) |
||
| 89 | return dbcur.lastrowid |
||
| 90 | |||
| 91 | View Code Duplication | def _insert(self, tablename=None, **values): |
|
| 92 | tablename = self.escape(tablename or self.__tablename__) |
||
| 93 | if values: |
||
| 94 | _keys = ", ".join((self.escape(k) for k in values)) |
||
| 95 | _values = ", ".join([self.placeholder, ] * len(values)) |
||
| 96 | sql_query = "INSERT INTO %s (%s) VALUES (%s)" % (tablename, _keys, _values) |
||
| 97 | else: |
||
| 98 | sql_query = "INSERT INTO %s DEFAULT VALUES" % tablename |
||
| 99 | logger.debug("<sql: %s>", sql_query) |
||
| 100 | |||
| 101 | if values: |
||
| 102 | dbcur = self._execute(sql_query, list(itervalues(values))) |
||
| 103 | else: |
||
| 104 | dbcur = self._execute(sql_query) |
||
| 105 | return dbcur.lastrowid |
||
| 106 | |||
| 107 | def _update(self, tablename=None, where="1=0", where_values=[], **values): |
||
| 108 | tablename = self.escape(tablename or self.__tablename__) |
||
| 109 | _key_values = ", ".join([ |
||
| 110 | "%s = %s" % (self.escape(k), self.placeholder) for k in values |
||
| 111 | ]) |
||
| 112 | sql_query = "UPDATE %s SET %s WHERE %s" % (tablename, _key_values, where) |
||
| 113 | logger.debug("<sql: %s>", sql_query) |
||
| 114 | |||
| 115 | return self._execute(sql_query, list(itervalues(values)) + list(where_values)) |
||
| 116 | |||
| 117 | def _delete(self, tablename=None, where="1=0", where_values=[]): |
||
| 118 | tablename = self.escape(tablename or self.__tablename__) |
||
| 119 | sql_query = "DELETE FROM %s" % tablename |
||
| 120 | if where: |
||
| 121 | sql_query += " WHERE %s" % where |
||
| 122 | logger.debug("<sql: %s>", sql_query) |
||
| 123 | |||
| 124 | return self._execute(sql_query, where_values) |
||
| 125 | |||
| 155 |