import repository from arizona
[raven.git] / owl / server / 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 owllib 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):
48         debug(None, "DB execute: %s" % (query))
49         try:
50             self._cursor.execute(query)
51         except:
52             debug(None, traceback.format_exc())
53             raise
54         return self._cursor
55
56     def close(self):
57         self._close()
58         return
59
60     def _close(self):
61         debug(None, "DB close %s" % (self.name))
62         try:
63             if self._cursor != None:
64                 self._cursor.close()
65             if self._conn != None:
66                 self._conn.close()
67             self._cursor = None
68             self._conn = None
69         except MySQLdb.Error, e:
70             #print "Error %d: %s" % (e.args[0], e.args[1])
71             raise
72