1*9c5db199SXin Lifrom django.db.backends.mysql.base import DatabaseCreation as MySQLCreation 2*9c5db199SXin Lifrom django.db.backends.mysql.base import DatabaseOperations as MySQLOperations 3*9c5db199SXin Lifrom django.db.backends.mysql.base import DatabaseWrapper as MySQLDatabaseWrapper 4*9c5db199SXin Lifrom django.db.backends.mysql.base import DatabaseIntrospection as MySQLIntrospection 5*9c5db199SXin Li 6*9c5db199SXin Litry: 7*9c5db199SXin Li import MySQLdb as Database 8*9c5db199SXin Liexcept ImportError as e: 9*9c5db199SXin Li from django.core.exceptions import ImproperlyConfigured 10*9c5db199SXin Li raise ImproperlyConfigured("Error loading MySQLdb module: %s" % e) 11*9c5db199SXin Li 12*9c5db199SXin Li 13*9c5db199SXin Liclass DatabaseOperations(MySQLOperations): 14*9c5db199SXin Li """Custom database backend wrapper.""" 15*9c5db199SXin Li compiler_module = "autotest_lib.frontend.db.backends.afe.compiler" 16*9c5db199SXin Li 17*9c5db199SXin Li 18*9c5db199SXin Liclass DatabaseWrapper(MySQLDatabaseWrapper): 19*9c5db199SXin Li """Custom database backend wrapper.""" 20*9c5db199SXin Li 21*9c5db199SXin Li def __init__(self, *args, **kwargs): 22*9c5db199SXin Li self.connection = None 23*9c5db199SXin Li super(DatabaseWrapper, self).__init__(*args, **kwargs) 24*9c5db199SXin Li self.creation = MySQLCreation(self) 25*9c5db199SXin Li try: 26*9c5db199SXin Li self.ops = DatabaseOperations() 27*9c5db199SXin Li except TypeError: 28*9c5db199SXin Li self.ops = DatabaseOperations(connection=kwargs.get('connection')) 29*9c5db199SXin Li self.introspection = MySQLIntrospection(self) 30*9c5db199SXin Li 31*9c5db199SXin Li def _valid_connection(self): 32*9c5db199SXin Li if self.connection is not None: 33*9c5db199SXin Li if self.connection.open: 34*9c5db199SXin Li try: 35*9c5db199SXin Li self.connection.ping() 36*9c5db199SXin Li return True 37*9c5db199SXin Li except Database.DatabaseError: 38*9c5db199SXin Li self.connection.close() 39*9c5db199SXin Li self.connection = None 40*9c5db199SXin Li return False 41