1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
#!/usr/bin/env python3
from contentValuesLib import *
class OptionParser(optparse.OptionParser):
""" Option parser class """
def __init__(self):
optparse.OptionParser.__init__(self, usage="%prog [options] root_file ...", version="%prog 0.0.1", conflict_handler="resolve")
self.add_option("--silent", "-s", action="store_true", dest="silent", default=False, help="silent mode: specify return code and exit")
self.add_option("--subsystem", "-c", action="store", type="string", dest="subsystem", default=None, help="Specify test subsystem")
if __name__ == "__main__":
# Create option parser and get options/arguments
optManager = OptionParser()
(opts, args) = optManager.parse_args()
opts = opts.__dict__
# Check if at least one root file defined (can be many!)
if len(args) == 0:
print("At least one ROOT file must be priovided, use --help for hit")
sys.exit(1)
# Check if all files exists and are accessible
for rfile in args:
try:
os.stat(rfile)
except:
print("File [", rfile, "] not exists or is not accessible?")
sys.exit(2)
ss = opts['subsystem']
# Lets extract values from files one-by-one, construct hashmap and check values
for rfile in args:
(run_number, values) = getSummaryValues(file_name = rfile, shift_type = None, translate = False, filters = None)
if values == None or len(values) == 0:
print("No content summary values found. Skipping file: %s" % rfile)
continue
messages = []
for sub in SUBSYSTEMS.keys():
if not ss == None and not sub == ss:
continue
if sub not in values:
messages.append("%s: missing subsystem!" % sub)
continue
skeys = {}
sfolders = []
for folder in FOLDERS.keys():
if folder not in values[sub]:
messages.append("%s: missing folder EventInfo/%s" % (sub, folder))
continue
if len(values[sub][folder]) == 0:
messages.append("%s: empty folder EventInfo/%s" % (sub, FOLDERS[folder][1]))
continue
sfolders.append(folder)
if 'Summary' not in values[sub][folder]:
messages.append("%s: missing summary value EventInfo/%s" % (sub, FOLDERS[folder][1]))
for key in values[sub][folder].keys():
if key == 'Summary':
continue
if key not in skeys:
skeys[key] = []
skeys[key].append(folder)
for key in skeys:
nfound = []
for folder in sfolders:
if skeys[key].count(folder) == 0: nfound.append(folder)
if len(nfound) > 0:
messages.append("%s: value (%s)/%s not found in (%s)" % (sub, ','.join(skeys[key]), key, ','.join(nfound)))
if not opts['silent']:
for message in sorted(messages): print(message)
print("%d errors found" % len(messages))
if len(messages) > 0: sys.exit(1)
sys.exit(0)
|