Warning, /HLTrigger/Configuration/scripts/hltPrintMenuVersions is written in an unsupported language. File is not indexed.
0001 #!/usr/bin/env python3
0002 """hltPrintMenuVersions: print to stdout metadata on the history of an HLT configuration in ConfDB
0003 """
0004 import argparse
0005 import os
0006 import cx_Oracle
0007
0008 def getHLTMenuVersions(configName, connect_string, add_hyperlinks = True, do_twiki_edits = True):
0009 # connect to ConfDB
0010 conn = cx_Oracle.connect(connect_string)
0011 curs = conn.cursor()
0012
0013 ret = []
0014 # loop on the different versions of the target configuration
0015 version = 0
0016 while True:
0017 version += 1
0018 configuration = f'{configName}/V{version}'
0019 # get only Config description and "release template"
0020 query = 'SELECT u_confversions.description, u_softreleases.releaseTag FROM u_confversions, u_softreleases'
0021 query += f" WHERE u_confversions.id_release = u_softreleases.id AND u_confversions.name='{configuration}'"
0022 curs.execute(query)
0023 rows = curs.fetchall()
0024 if len(rows) == 0:
0025 break
0026 for rows in rows:
0027 ## get description, if it is not empty
0028 try:
0029 description = rows[0].read()
0030 except:
0031 description = ''
0032
0033 ## get release template, if it is not empty
0034 try:
0035 releaseTemplate = rows[1]
0036 except:
0037 releaseTemplate = ''
0038
0039 ## add link to JIRA tickets
0040 if add_hyperlinks:
0041 posInit = description.find('CMSHLT-')
0042 if posInit >= 0:
0043 posFinal = posInit+7
0044 while (posFinal < len(description) and description[posFinal].isdigit()):
0045 posFinal += 1
0046 cmshlt = description[posInit:posFinal]
0047 description = description.replace(cmshlt, f'[[https://its.cern.ch/jira/browse/{cmshlt}][{cmshlt}]]')
0048
0049 ## add '!' in front of capital letters (Twiki syntax)
0050 if do_twiki_edits:
0051 for i in range(len(description)):
0052 if description[i].isupper() and (i == 0 or description[i-1] == ' '):
0053 description = description[:i] + '!' + description[i:]
0054
0055 ret.append((f'{configuration} ({releaseTemplate})', description))
0056
0057 # anti-chronological order
0058 ret.reverse()
0059
0060 return ret
0061
0062 ###
0063 ### main
0064 ###
0065 if __name__ == '__main__':
0066
0067 ### args
0068 parser = argparse.ArgumentParser(
0069 prog = './'+os.path.basename(__file__),
0070 formatter_class = argparse.RawDescriptionHelpFormatter,
0071 description = __doc__
0072 )
0073
0074 parser.add_argument('config',
0075 type = str,
0076 help = 'Name of HLT configuration in ConfDB (without specifying its version number)')
0077
0078 parser.add_argument('-d', '--db',
0079 dest = 'db',
0080 action = 'store',
0081 default = 'run3',
0082 choices = ['run3', 'run2', 'dev', 'adg'],
0083 help = 'Keyword to identify the target database (must be "run3", "run2", "dev", or "adg") [default: "run3"]')
0084
0085 parser.add_argument('-c', '--connect-string',
0086 dest = 'connect_string',
0087 action = 'store',
0088 default = None,
0089 help = 'Argument of cx_Oracle.connect (argument of "--db" will be ignored) [default: None]')
0090
0091 parser.add_argument('--no-hyperlinks',
0092 dest = 'add_hyperlinks',
0093 action = 'store_false',
0094 default = True,
0095 help = 'Do not include hyperlinks [default: False]')
0096
0097 parser.add_argument('--no-twiki',
0098 dest = 'do_twiki_edits',
0099 action = 'store_false',
0100 default = True,
0101 help = 'Do not adapt to Twiki syntax [default: False]')
0102
0103 opts, opts_unknown = parser.parse_known_args()
0104 ### ----
0105
0106 if len(opts_unknown) > 0:
0107 raise RuntimeError('unsupported command-line arguments: '+str(opts_unknown))
0108
0109 connect_string = opts.connect_string
0110
0111 if connect_string != None:
0112 print(f'HLT Configuration: {opts.config} (connect = "{opts.connect_string}")\n')
0113 else:
0114 print(f'HLT Configuration: {opts.config} (database = "{opts.db}")\n')
0115 if opts.db == 'run3':
0116 # Run-3 (offline) db
0117 connect_string = 'cms_hlt_v3_r/convertMe!@cmsr'
0118 elif opts.db == 'run2':
0119 # Run-2 (offline) db
0120 connect_string = 'cms_hlt_gdr_r/convertMe!@cmsr'
0121 elif opts.db == 'dev':
0122 # dev db
0123 connect_string = 'cms_hlt_gdrdev_r/convertMe1!@cmsr'
0124 elif opts.db == 'adg':
0125 # ADG (read-only copy of online db)
0126 connect_string = 'cms_hlt_gdr_r/convertMe!@cms_orcon_adg'
0127 else:
0128 raise RuntimeError(f'invalid keyword for target database: "{opts.db}"')
0129
0130 hltMenuVersions = getHLTMenuVersions(
0131 configName = opts.config,
0132 connect_string = connect_string,
0133 add_hyperlinks = opts.add_hyperlinks,
0134 do_twiki_edits = opts.do_twiki_edits
0135 )
0136
0137 if len(hltMenuVersions) == 0:
0138 print('No Configuration Found !!\n')
0139 raise SystemExit(1)
0140
0141 for (configuration, description) in hltMenuVersions:
0142 print(f' * ={configuration}=: {description}')
0143 print()