xref: /aosp_15_r20/external/autotest/frontend/db/backends/afe/base.py (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
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