Skip to content

Commit

Permalink
remove duplicate code, fix resultdb InterfaceError bug
Browse files Browse the repository at this point in the history
  • Loading branch information
binux committed Nov 5, 2014
1 parent 7fc3df2 commit 8047880
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 88 deletions.
46 changes: 46 additions & 0 deletions database/mysql/mysqlbase.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# vim: set et sw=4 ts=4 sts=4 ff=unix fenc=utf8:
# Author: Binux<[email protected]>
# http://binux.me
# Created on 2014-11-05 10:42:24

class MySQLMixin(object):
@property
def dbcur(self):
try:
if self.conn.unread_result:
self.conn.get_rows()
return self.conn.cursor()
except (mysql.connector.OperationalError, mysql.connector.InterfaceError) as e:
self.conn.ping(reconnect=True)
self.conn.database = self.database_name
return self.conn.cursor()

class SplitTableMixin(object):

def _tablename(self, project):
if self.__tablename__:
return '%s_%s' % (self.__tablename__, project)
else:
return project

def _list_project(self):
self.projects = set()
if self.__tablename__:
prefix = '%s_' % self.__tablename__
else:
prefix = ''
for project, in self._execute('show tables;'):
if project.startswith(prefix):
project = project[len(prefix):]
self.projects.add(project)

def drop(self, project):
if project not in self.projects:
self._list_project()
if project not in self.projects:
return
tablename = self._tablename(project)
self._execute("DROP TABLE %s" % self.escape(tablename))
self._list_project()
14 changes: 2 additions & 12 deletions database/mysql/projectdb.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,9 @@

from database.base.projectdb import ProjectDB as BaseProjectDB
from database.basedb import BaseDB
from mysqlbase import MySQLMixin

class ProjectDB(BaseProjectDB, BaseDB):
class ProjectDB(MySQLMixin, BaseProjectDB, BaseDB):
__tablename__ = 'projectdb'
def __init__(self, host='localhost', port=3306, database='projectdb',
user='root', passwd=None):
Expand All @@ -35,17 +36,6 @@ def __init__(self, host='localhost', port=3306, database='projectdb',
`updatetime` double(16, 4)
) ENGINE=MyISAM CHARSET=utf8''' % self.escape(self.__tablename__))

@property
def dbcur(self):
try:
if self.conn.unread_result:
self.conn.get_rows()
return self.conn.cursor()
except mysql.connector.OperationalError as e:
self.conn.ping(reconnect=True)
self.conn.database = self.database_name
return self.conn.cursor()

def insert(self, name, obj={}):
obj = dict(obj)
obj['name'] = name
Expand Down
41 changes: 3 additions & 38 deletions database/mysql/resultdb.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,12 @@
import time
import json
import mysql.connector

from database.base.resultdb import ResultDB as BaseResultDB
from database.basedb import BaseDB
from mysqlbase import MySQLMixin, SplitTableMixin

class ResultDB(BaseResultDB, BaseDB):
class ResultDB(MySQLMixin, SplitTableMixin, BaseResultDB, BaseDB):
__tablename__ = ''
def __init__(self, host='localhost', port=3306, database='resultdb',
user='root', passwd=None):
Expand All @@ -24,34 +26,6 @@ def __init__(self, host='localhost', port=3306, database='resultdb',
self.conn.database = database;
self._list_project()

@property
def dbcur(self):
try:
if self.conn.unread_result:
self.conn.get_rows()
return self.conn.cursor()
except mysql.connector.OperationalError as e:
self.conn.ping(reconnect=True)
self.conn.database = self.database_name
return self.conn.cursor()

def _tablename(self, project):
if self.__tablename__:
return '%s_%s' % (self.__tablename__, project)
else:
return project

def _list_project(self):
self.projects = set()
if self.__tablename__:
prefix = '%s_' % self.__tablename__
else:
prefix = ''
for project, in self._execute('show tables;'):
if project.startswith(prefix):
project = project[len(prefix):]
self.projects.add(project)

def _create_project(self, project):
assert re.match(r'^\w+$', project) is not None
tablename = self._tablename(project)
Expand Down Expand Up @@ -118,12 +92,3 @@ def get(self, project, taskid, fields=None):
for task in self._select2dic(tablename, what=fields,
where=where, where_values=(taskid, )):
return self._parse(task)

def drop(self, project):
if project not in self.projects:
self._list_project()
if project not in self.projects:
return
tablename = self._tablename(project)
self._execute("DROP TABLE %s" % self.escape(tablename))
self._list_project()
40 changes: 2 additions & 38 deletions database/mysql/taskdb.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,10 @@

from database.base.taskdb import TaskDB as BaseTaskDB
from database.basedb import BaseDB
from mysqlbase import MySQLMixin, SplitTableMixin


class TaskDB(BaseTaskDB, BaseDB):
class TaskDB(MySQLMixin, SplitTableMixin, BaseTaskDB, BaseDB):
__tablename__ = ''
def __init__(self, host='localhost', port=3306, database='taskdb',
user='root', passwd=None):
Expand All @@ -27,34 +28,6 @@ def __init__(self, host='localhost', port=3306, database='taskdb',
self.conn.database = database;
self._list_project()

@property
def dbcur(self):
try:
if self.conn.unread_result:
self.conn.get_rows()
return self.conn.cursor()
except (mysql.connector.OperationalError, mysql.connector.InterfaceError) as e:
self.conn.ping(reconnect=True)
self.conn.database = self.database_name
return self.conn.cursor()

def _tablename(self, project):
if self.__tablename__:
return '%s_%s' % (self.__tablename__, project)
else:
return project

def _list_project(self):
self.projects = set()
if self.__tablename__:
prefix = '%s_' % self.__tablename__
else:
prefix = ''
for project, in self._execute('show tables;'):
if project.startswith(prefix):
project = project[len(prefix):]
self.projects.add(project)

def _create_project(self, project):
assert re.match(r'^\w+$', project) is not None
tablename = self._tablename(project)
Expand Down Expand Up @@ -152,12 +125,3 @@ def update(self, project, taskid, obj={}, **kwargs):
obj.update(kwargs)
obj['updatetime'] = time.time()
return self._update(tablename, where="`taskid` = %s" % self.placeholder, where_values=(taskid, ), **self._stringify(obj))

def drop(self, project):
if project not in self.projects:
self._list_project()
if project not in self.projects:
return
tablename = self._tablename(project)
self._execute("DROP TABLE %s" % self.escape(tablename))
self._list_project()

0 comments on commit 8047880

Please sign in to comment.