12Script to upload local database to ConditionsDB.
14This script takes a local database file and will upload all payloads defined in
15this file to the ConditionsDB and create iovs for each payload. It assumes that
16all tags already exist.
20from basf2
import B2ERROR, LogLevel, logging
21from conditions_db
import file_checksum
26 """Class to keep information about an entry in the testing payloads storage file"""
29 """Create new entry from line in testing payloads storage file"""
31 name, revision, iov = line.split()
33 raise ValueError(
"line must be of the form 'dbstore/<payloadname> <revision> "
34 "<firstExp>,<firstRun>,<finalExp>,<finalRun>'")
43 raise ValueError(
"payload name must be of the form dbstore/<payloadname>")
46 iov = [int(e)
for e
in iov.split(
",")]
48 raise ValueError(
"experiment and run numbers must be integers")
51 raise ValueError(
"IoV needs to be four values (firstExp,firstRun,finalExp,finalRun)")
54 self.
filename = os.path.join(basedir, f
"dbstore_{self.module}_rev_{self.revision}.root")
69 """Normalize the root file to have the same checksum for the same content"""
70 normalize_file(self.
filename, in_place=
True, name=name, root_version=root_version)
75 """Return checksum, calculated on first access"""
81 """Convert to useful string representation"""
85 """Compare to other entries, only consider package, module and iov for equality"""
86 return self.
__id == other.__id
89 """Compare to other entries, only consider package, module and iov for equality"""
90 return self.
__id <= other.__id
93 """Compare to other entries, only consider package, module and iov for equality"""
94 return self.
__id < other.__id
97 """Provide hash function to be able to create a set"""
98 return hash(self.
__id)
102 """Return a tuple with the valid exp,run range"""
106 """String representation of IoV"""
107 return f
"{self.firstRun['exp']}/{self.firstRun['run']} - {self.finalRun['exp']}/{self.finalRun['run']}"
110def parse_testing_payloads_file(filename, check_existing=True):
112 Parse a testing payload storage file
114 This is the python equivalent of TestingPayloadStorage::read implemented
in
115 python. Each line
in in the file should be of the form
117 "dbstore/{payloadname} {revision} {firstExp},{firstRun},{finalExp},{finalRun}"
119 Comments can be started using
"#", everything including this character to
120 the end of the line will be ignored.
123 filename (str): filename of the testing payload storage file to parse
124 check_existing (bool):
if True check
if the payloads actually exist where
128 a list of TestingPayloadEntry objects
or None if there were any errors
132 if not os.path.exists(filename):
133 B2ERROR(
"Given database file does not exist")
137 payload_dir = os.path.dirname(filename)
141 old_error_count = logging.log_stats[LogLevel.ERROR]
143 with open(filename)
as dbfile:
144 for lineno, line
in enumerate(dbfile, 1):
146 line = line.split(
"#", 1)[0].strip()
153 except ValueError
as e:
154 B2ERROR(f
"{filename}:{lineno} error: {e}")
157 if check_existing
and not os.path.exists(entry.filename):
158 B2ERROR(f
"{filename}:{lineno} error: cannot find payload file {entry.filename}")
161 entries.append(entry)
164 if logging.log_stats[LogLevel.ERROR] > old_error_count:
finalRun
experiment/run of the final run
firstRun
experiment/run of the first run
def __init__(self, line, basedir)
def normalize(self, name=None, root_version=61408)
__checksum
variable for checksum, calculated on first access
payload
payload id, to be filled later
revision
revision stored in the file
iov
iov id, to be filled later
__id
object to uniquely identify this entry (payload + iov)