blob: cd547e8bd448501c5127308ddf82b54c15bef692 [file] [log] [blame]
mbligh237bed32007-09-05 13:05:57 +00001import sqlite, re, os
mblighd5c33db2006-10-08 21:34:16 +00002
3class db:
4 def __init__(self):
5 self.con = sqlite.connect('tko_db')
6 self.cur = self.con.cursor()
7
8
mbligh608c3252007-08-31 13:53:00 +00009 def select(self, fields, table, where_dict):
10 """\
11 select fields from table where {dictionary}
12 """
13 keys = [field + '=%s' for field in where_dict.keys()]
14 values = [where_dict[field] for field in where_dict.keys()]
15
16 where = 'and'.join(keys)
17 cmd = 'select %s from %s where %s' % (fields, table, where)
18 print cmd
19 print values
20 self.cur.execute(cmd, values)
mblighd5c33db2006-10-08 21:34:16 +000021 return self.cur.fetchall()
22
mbligh056d0d32006-10-08 22:31:10 +000023
mbligh608c3252007-08-31 13:53:00 +000024 def insert(self, table, data):
25 """\
26 'insert into table (keys) values (%s ... %s)', values
27
28 data:
29 dictionary of fields and data
30 """
31 fields = data.keys()
32 refs = ['%s' for field in fields]
33 values = [data[field] for field in fields]
34 cmd = 'insert into %s (%s) values (%s)' % \
35 (table, ','.join(fields), ','.join(refs))
36 print cmd
37 print values
38 self.cur.execute(cmd, values)
39 self.con.commit()
40
41
mbligh056d0d32006-10-08 22:31:10 +000042 def insert_job(self, tag, job):
mbligh608c3252007-08-31 13:53:00 +000043 self.insert('jobs', {'tag':tag, 'machine':'UNKNOWN'})
44 job.index = self.find_job(tag)
45 for test in job.tests:
46 self.insert_test(job, test)
47
mbligh237bed32007-09-05 13:05:57 +000048
mbligh608c3252007-08-31 13:53:00 +000049 def insert_test(self, job, test):
mbligh237bed32007-09-05 13:05:57 +000050 kver = self.insert_kernel_version(test.kernel)
mbligh608c3252007-08-31 13:53:00 +000051 data = {'job_idx':job.index, 'test':test.testname,
52 'subdir':test.dir,
53 'status':test.status, 'reason':test.reason}
54 self.insert('tests', data)
mblighe9cf9d42007-08-31 08:56:00 +000055
56
mbligh237bed32007-09-05 13:05:57 +000057 def lookup_kversion(self, kernel):
58 rows = self.select('kversion', 'kversions',
59 {'kversion_hash':kernel.kversion_hash})
60 if rows:
61 return rows[0][0]
62 else:
63 return None
mblighe9cf9d42007-08-31 08:56:00 +000064
65
mbligh237bed32007-09-05 13:05:57 +000066 def insert_kernel_version(self, kernel):
67 kver = self.lookup_kversion(kernel)
68 if kver:
69 return kver
70 self.insert('kversions', {'base':kernel.base,
71 'kversion_hash':kernel.kversion_hash})
72 kver = self.lookup_kversion(kernel)
73 for patch in kernel.patches:
74 self.insert_patch(kver, patch)
75 return kver
76
77
78 def insert_patch(self, kver, patch):
79 print patch.reference
80 name = os.path.basename(patch.reference)[:80]
81 self.insert('patches', {'kversion': kver,
82 'name':name,
83 'url':patch.reference,
84 'hash':patch.hash})
mbligh056d0d32006-10-08 22:31:10 +000085
86
87 def find_job(self, tag):
mbligh608c3252007-08-31 13:53:00 +000088 rows = self.select('job_idx', 'jobs', {'tag': tag})
89 if rows:
90 return rows[0][0]
91 else:
92 return None