root/timingandestimationplugin/branches/trac0.10/scripts/adw_tracdb.py

Revision 1283, 3.8 kB (checked in by bobbysmith007, 2 years ago)

TimingAndEstimationPlugin:

Moved everything into the trunk folder

Line 
1 from pysqlite2 import dbapi2 as sqlite
2 from datetime import datetime, timedelta
3 from time import mktime
4 import os
5
6 tracDir = '/var/trac'
7 projectDBLocationFormat = '/var/trac/%s/db/trac.db'
8 # all directories in the trac directory
9 projects = [f for f in os.listdir(tracDir) if os.path.isdir('/'.join ([tracDir, f]))]
10
11 def makeDb(proj):
12     return projectDBLocationFormat % proj
13
14 def collectResultsFromAllTracs( sql ):
15     lst = []
16     for proj in projects:
17         try:
18             lst.extend([( proj , getResultSet( proj, sql ))])
19         except Exception, e:
20             print "collectResultsFromAllTracs: sql failed to execute on %s : %s " % (proj, e.args)
21            
22     return lst
23
24 def executeAgainstAllTracs( sql ):
25     for proj in projects:
26         try:
27             executeNonQuery( proj, sql )
28         except:
29             print "executeAgainstAllTracs: sql failed to execute on %s" % proj
30    
31
32 def executeNonQuery(proj, sql, *params):
33     """Executes the query on the given project"""
34     con = sqlite.connect(makeDb(proj))
35     cur = con.cursor()
36     try:
37         cur.execute(sql, params)
38         con.commit()
39     finally:
40         cur.close()
41         con.close()
42
43 def getColumnAsList(db, sql, col=0, *params):
44     return [valueList[col] for valueList in get_all(db, sql, *params)[1]]
45
46 def getScalar(proj , sql, col=0, *params):
47     db = sqlite.connect(makeDb(proj))
48     cur = db.cursor()
49     try:
50         cur.execute(sql, params)
51         data = cur.fetchone()
52     finally:
53         cur.close()
54     return data[col]
55
56
57 def getVector(proj, sql, *params):
58     db = sqlite.connect(makeDb(proj))
59     cur = db.cursor()
60     try:
61         cur.execute(sql, params)
62         data = cur.fetchone()
63     finally:
64         cur.close()
65     return data
66
67 def getAll(proj, sql, *params):
68     """Executes the query and returns the (description, data)"""
69     con = sqlite.connect(makeDb(proj))
70     cur = con.cursor()
71     try:
72         cur.execute(sql, params)
73         data = cur.fetchall()
74         desc = cur.description
75     finally:
76         cur.close()
77         con.close()
78     return (desc, data)
79        
80 def getResultSet(proj, sql, *params):
81     """Executes the query and returns a Result Set"""
82     return ResultSet(getAll(proj, sql, *params))
83
84 def _columnName( columnDescription ):
85     """ given a the columnHeader from the result set from getAll gives you the column Headers """
86     return columnDescription[0];
87
88 class ResultSet:
89     """ the result of calling getResultSet """
90     def __init__ (self, (columnDescription, rows)):
91         self.columnDescription, self.rows = columnDescription, rows
92         self.columnNames = [_columnName(_) for _ in self.columnDescription]
93         self.columnMap = self.getColumnMap()
94
95     def getColumnMap ( self ):
96         """This function will take the result set from getAll and will
97         return a hash of the column names to their index """
98         h = {}
99         i = 0
100         if self.columnDescription:
101             for col in self.columnNames:
102                 h[ col ] = i
103                 i+=1
104         return h;
105    
106     def value(self, col, row ):
107         """ given a row(list or idx) and a column( name or idx ), retrieve the appropriate value"""
108         tcol = type(col)
109         trow = type(row)
110         if tcol == str:
111             if(trow == list or trow == tuple):
112                 return row[self.columnMap[col]]
113             elif(trow == int):
114                 return self.rows[row][self.columnMap[col]]
115             else:
116                 print ("rs.value Type Failed col:%s  row:%s" % (type(col), type(row)))
117         elif tcol == int:
118             if(trow == list or trow == tuple):
119                 return row[col]
120             elif(trow == int):
121                 return self.rows[row][col]
122             else:
123                 print ("rs.value Type Failed col:%s  row:%s" % (type(col), type(row)))
124         else:
125             print ("rs.value Type Failed col:%s  row:%s" % (type(col), type(row)))
126            
Note: See TracBrowser for help on using the browser.