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 |