import repository from arizona
[raven.git] / apps / errorlog / db.py
1
2 # This is not the right way to implement database connections, but it will do for now
3
4 import MySQLdb
5 import traceback
6 from errlogging import *
7
8 class DB:
9     host = None
10     name = None
11     user = None
12     passwd = None
13     _conns = {}
14
15     def __init__(self, host=None, name=None, user=None, passwd=None):
16         if host == None:
17             host = DB.host
18         if user == None:
19             user = DB.user
20         if passwd == None:
21             passwd = DB.passwd
22         if name == None:
23             name = DB.name
24         key = "%s:%s:%s" % (host, name, user)
25         if key not in DB._conns:
26             debug(None, "DB connect %s %s %s %s" % (str(host),str(user),str(passwd),str(name)))
27             try:
28                 self._conn = MySQLdb.connect(host=host, user=user, passwd=passwd, db=name)
29             except MySQLdb.Error, e:
30                 debug(None, "DB Error %d: %s" % (e.args[0], e.args[1]))
31                 raise
32         #DB._conns[key] = self._conn
33         self._cursor = self._conn.cursor()
34
35     def cursor(self):
36         if self._cursor:
37             self._cursor.close()
38         self._cursor = self._conn.cursor()
39         return self._cursor
40
41     def dict_cursor(self):
42         if self._cursor:
43             self._cursor.close()
44         self._cursor = self._conn.cursor(MySQLdb.cursors.DictCursor)
45         return self._cursor
46
47     def execute(self, query, args=None):
48         if args is not None:
49              query = query % self._conn.literal(args)
50         debug(None, "DB execute: %s" % (query))
51         try:
52             self._cursor.execute(query)
53         except:
54             debug(None, traceback.format_exc())
55             raise
56         return self._cursor
57
58     def close(self):
59         self._close()
60         return
61
62     def _close(self):
63         debug(None, "DB close %s" % (self.name))
64         try:
65             if self._cursor != None:
66                 self._cursor.close()
67             if self._conn != None:
68                 self._conn.close()
69             self._cursor = None
70             self._conn = None
71         except MySQLdb.Error, e:
72             #print "Error %d: %s" % (e.args[0], e.args[1])
73             raise
74