3 Command line module that the "command line" script. 5 Works by taking the main keyword (first command given to the script), 6 passing that to the function that will deal with that action, along with the following arguments as parameters for that function. 8 from __future__
import print_function
17 connection =
querying.connect(arguments.db, secrets=arguments.secrets, mode=arguments.mode)
19 options = [
"tag",
"gt",
"gts_for_tag"]
20 number_of_options_given = 0
21 for option
in options:
22 if getattr(arguments, option):
23 number_of_options_given += 1
24 if number_of_options_given != 1:
25 print(
"You must specify a single object to list.")
29 tag_name = arguments.tag
30 tag = connection.tag(name=tag_name)
32 iovs = tag.iovs(amount=arguments.limit)
35 print(
"The Tag '%s' was not found in the database '%s'." % (tag_name, arguments.db))
39 gt_name = arguments.gt
40 gt = connection.global_tag(name=gt_name)
42 gt_maps = gt.tags(amount=arguments.limit)
43 gt_maps.as_table(hide=[
"global_tag_name"])
45 print(
"The Global Tag '%s' was not found in the database '%s'." % (gt_name, arguments.db))
48 elif arguments.gts_for_tag:
49 tag_name = arguments.gts_for_tag
50 tag = connection.tag(name=tag_name)
51 gts = tag.parent_global_tags(amount=arguments.limit)
52 gts.as_table(columns=[
"name",
"insertion_time",
"snapshot_time"])
59 connection =
querying.connect(arguments.db, secrets=arguments.secrets, mode=arguments.mode)
61 tag1 = connection.tag(name=arguments.tag1)
62 tag2 = connection.tag(name=arguments.tag2)
64 tag1.diff(tag2).as_table(columns=[
"since", arguments.tag1, arguments.tag2])
71 connection =
querying.connect(arguments.db, secrets=arguments.secrets, mode=arguments.mode)
73 gt1 = connection.global_tag(name=arguments.gt1)
74 gt2 = connection.global_tag(name=arguments.gt2)
76 gt1.diff(gt2).as_table(columns=[
"Record",
"Label",
"%s Tag" % arguments.gt1,
"%s Tag" % arguments.gt2])
80 raise NotImplementedError(
"Todo")
82 connection =
querying.connect(arguments.db, secrets=arguments.secrets, mode=arguments.mode)
84 search_string = connection.regexp(
".*%s.*" % arguments.string)
89 source_connection =
querying.connect(arguments.db, secrets=arguments.secrets, mode=arguments.mode, map_blobs=
True)
90 dest_connection =
querying.connect(arguments.dest_db, secrets=arguments.secrets, mode=arguments.mode, map_blobs=
True)
94 print(
"Reading source Tag.")
95 source_tag = source_connection.tag(name=arguments.input_tag)
96 if source_tag ==
None:
97 raise Exception(
"Source Tag doesn't exist.")
100 print(
"Reading source IOVs.")
101 since_range = source_connection.range(arguments.start, arguments.end)
102 source_iovs = source_tag.iovs(since=since_range).
data()
105 print(
"Reading source Payloads.")
106 hashes = source_tag.iovs().get_members(
"payload_hash").
data()
107 payloads = source_connection.payload(hash=hashes)
109 print(
"Writing to destination database...")
112 source_tag.end_of_validity = -1
113 source_tag.name = arguments.dest_tag
114 source_tag.modification_time = datetime.datetime.now()
118 for iov
in source_iovs:
119 new_iovs.append(dest_connection.models[
"iov"](iov.as_dicts(convert_timestamps=
False), convert_timestamps=
False))
122 print(
"Writing destination Tag.")
123 if dest_connection.tag(name=arguments.dest_tag) !=
None:
124 dest_connection.write_and_commit(source_tag)
127 print(
"Writing IOVs to destination Tag.")
129 if dest_connection.iov(tag_name=iov.tag_name, since=iov.since, insertion_time=iov.insertion_time) ==
None:
130 dest_connection.write_and_commit(iov)
133 print(
"Copying Payloads over.")
134 for payload
in payloads:
135 if dest_connection.payload(hash=payload.hash) ==
None:
136 dest_connection.write_and_commit(payload)
138 print(
"Copy complete.")
141 raise NotImplementedError(
"Copying Global Tags is currently not supported for this transition command-line interface for CondDBFW.")
144 source_connection =
querying.connect(arguments.db, secrets=arguments.secrets, mode=arguments.mode, map_blobs=
True)
145 dest_connection =
querying.connect(arguments.dest_db, secrets=arguments.secrets, mode=arguments.mode, map_blobs=
True)
148 global_tag = source_connection.global_tag(name=arguments.input_gt)
149 if global_tag ==
None:
150 raise Exception(
"Source Global Tag doesn't exist.")
152 tag_names = global_tag.tags().get_members(
"tag_name").
data()
153 tags = source_connection.tag(name=tags)
156 global_tag.insertion_time = datetime.datetime.now()
157 global_tag.validity = -1
158 dest_connection.write_and_commit(global_tag)
164 self.input_tag = tag.name
165 self.dest_tag = tag.name
167 self.end = tag.latest_iov()+1
168 for attribute
in dir(arguments):
169 self.__dict__[attribute] = getattr(arguments, attribute)
175 Assumes script name has been removed from the list of arguments. 176 Hence, arguments[0] is the subcommand. 178 top_level_parser = argparse.ArgumentParser(description=
"CondDBFW Command line tool")
179 top_level_parser.add_argument(
"--db", type=str, required=
False, default=
"frontier://FrontierProd/CMS_CONDITIONS")
180 top_level_parser.add_argument(
"--mode", type=str, required=
False, default=
"w")
181 top_level_parser.add_argument(
"--secrets", type=str, required=
False)
182 top_level_parser.add_argument(
"--limit", type=int, required=
False, default=10)
184 subparser = top_level_parser.add_subparsers(title=
"Subcommands")
186 list_parser = subparser.add_parser(
"list", description=
"Lists the Metadata objects contained within the given object.")
187 list_parser.add_argument(
"--tag", required=
False, help=
"List all IOVs in a Tag.")
188 list_parser.add_argument(
"--gt", required=
False, help=
"List all Global Tag Maps linked to a Global Tag.")
189 list_parser.add_argument(
"--gts-for-tag", required=
False, help=
"List all Global Tags that contain a Tag.")
191 list_parser.set_defaults(func=list_object)
193 diff_parser = subparser.add_parser(
"diff-tags", description=
"Gives the differences in payload hashes used by IOVs between Tags.")
194 diff_parser.add_argument(
"--tag1", required=
True, help=
"First Tag to use in the comparison.")
195 diff_parser.add_argument(
"--tag2", required=
True, help=
"Second Tag to use in the comparison.")
197 diff_parser.set_defaults(func=diff_of_tags)
199 gt_diff_parser = subparser.add_parser(
"diff-gts", description=
"Gives the differences in Global Tag Maps contained within Global Tag.")
200 gt_diff_parser.add_argument(
"--gt1", required=
True, help=
"First Global Tag to use in the comparison.")
201 gt_diff_parser.add_argument(
"--gt2", required=
True, help=
"Second Global Tag to use in the comparison.")
203 gt_diff_parser.set_defaults(func=diff_of_gts)
205 copy_tag_parser = subparser.add_parser(
"copy-tag", description=
"Copies a Tag with its IOVs and Payloads to a destination database." 206 +
"\nFor copying to official databases, use cmsDbCondUpload (https://cms-conddb-dev.cern.ch/cmsDbCondUpload).")
207 copy_tag_parser.add_argument(
"--dest-db", required=
True, help=
"Database to copy the Tag and its IOVs to.")
208 copy_tag_parser.add_argument(
"--input-tag", required=
True, help=
"Tag to take data from in source database.")
209 copy_tag_parser.add_argument(
"--dest-tag", required=
True, help=
"Tag to copy input Tag to in the destination database.")
210 copy_tag_parser.add_argument(
"--start", required=
True, help=
"Since to start from. If this is between two, the highest one is taken (no adjustments are made).")
211 copy_tag_parser.add_argument(
"--end", required=
True, help=
"Since to finidh at. If this is between two, the lowest one is taken (no adjustments are made).")
213 copy_tag_parser.set_defaults(func=copy_tag)
215 parsed_arguments = top_level_parser.parse_args()
217 print(
"Using database '%s'." % parsed_arguments.db)
219 parsed_arguments.func(parsed_arguments)
221 if __name__ ==
"__main__":
def connect(connection_data, mode="r", map_blobs=False, secrets=None, pooling=True)
def diff_of_gts(arguments)
S & print(S &os, JobReport::InputFile const &f)
def diff_of_tags(arguments)
def parse_command_line(arguments)
def list_object(arguments)
def copy_global_tag(arguments)
char data[epos_bytes_allocation]