Back to home page

Project CMSSW displayed by LXR

 
 

    


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()