Belle II Software  release-08-01-10
cli_upload.py
1 #!/usr/bin/env python3
2 
3 
10 
11 """
12 Script to upload local database to ConditionsDB.
13 
14 This script takes a local database file and will upload all payloads defined in
15 this file to the ConditionsDB and create iovs for each payload. It assumes that
16 all tags already exist.
17 """
18 
19 from basf2 import LogInfo, LogLevel, logging
20 from conditions_db import set_cdb_authentication_token
21 
22 
23 def command_upload(args, db=None):
24  """
25  Upload a local database to the conditions database.
26 
27  This command allows uploading a local database which was created by basf2 to
28  the central database. It assumes that the globaltag already exists so
29  please create it before if necessary using 'tag create'.
30 
31  The command requires the tagname to upload the payloads to and a
32  database.txt containing the payloads and their iovs. One can supply a
33  directory where to look for the payloads, by default they are assumed to be
34  in the same directory as the database text file.
35  """
36 
37  if db is None:
38  args.add_argument("tag", metavar="TAGNAME",
39  help="globaltag to use for iov creation")
40  args.add_argument("payloadsfile", metavar="PAYLOADSFILE",
41  help="Testing payload storage file containing list of iovs")
42  normalize_group = args.add_mutually_exclusive_group()
43  normalize_group.add_argument('--normalize', dest="normalize", default=False, action="store_true",
44  help="Normalize the payload files to have reproducible checksums. "
45  "This option should only be used if the payload files were created "
46  "with an older software version (before release-04)")
47  normalize_group.add_argument('--normalize-name', type=str,
48  help="Set the file name in the root file metadata to the given value. "
49  "This implicitly enables ``--normalize`` and should only be used if "
50  "the payload files were created with an older software version (before release-04)")
51  args.add_argument("-j", type=int, default=1, dest="nprocess",
52  help="Number of concurrent connections to use for database "
53  "connection (default: %(default)s)")
54  args.add_argument("--retries", type=int, default=3,
55  help="Number of retries on connection problems (default: "
56  "%(default)s)")
57  args.add_argument("--ignore-existing", action="store_true", default=False,
58  help="Don't check if payloads or iovs already exist in database. "
59  "Speeds up initialization as the list of existing payloads "
60  "doesn't need to be downloaded. Can be used on first upload "
61  "but the script cannot resume an upload if this option is given")
62  return
63 
64  set_cdb_authentication_token(db, args.auth_token)
65 
66  # modify logging to remove the useless module: lines
67  for level in LogLevel.values.values():
68  logging.set_info(level, LogInfo.LEVEL | LogInfo.MESSAGE | LogInfo.TIMESTAMP)
69 
70  # do the upload
71  normalize = args.normalize_name if args.normalize_name is not None else args.normalize
72  return 0 if db.upload(args.payloadsfile, args.tag, normalize, args.ignore_existing, args.nprocess) else 1