8 import xml.etree.ElementTree 
as ET
 
   14     __import__(grlconfmod)
 
   15     m = sys.modules[grlconfmod]
 
   17         grlobj = grlconfmod.rsplit(
'.')[-1]
 
   18     return m.__dict__[grlobj]()
 
   21     from CoolRunQuery.AtlRunQueryLib 
import AtlRunQuery, AtlRunQueryOptions
 
   22     from CoolRunQuery.AtlRunQueryParser 
import ArgumentParser
 
   26     config.setdqfolder(folder)
 
   27     config.setdqctag(cooltag)
 
   30     query  = config.getsearchquery()
 
   31     print (
">> Calling cmd equivalent of: ")
 
   32     print (
"%s \"%s\"" % (config.querytool,query))
 
   36     atlqueryarg = config.querytool + 
" " + ap.ParseArgument( query )
 
   37     (options, args) = AtlRunQueryOptions().
parse(atlqueryarg)
 
   43     proc = multiprocessing.Process(target=AtlRunQuery, args=(options,), 
 
   44            kwargs={
'html':
"NO", 
'origQuery':query, 
'loglevel':0}) 
 
   47     xmlfile = 
'data/'+config.listname
 
   53     sys.path.append(os.path.dirname(grlconf))
 
   55     tmpdir = tempfile.mkdtemp()
 
   59     os.chdir(os.environ[
'TMPDIR'])
 
   62     queue.put((rv, rfile))
 
   66     tagxml = urllib.urlopen(
'http://voatlas11.cern.ch:8080/cooldb/ATLAS_COOLPROD/ATLAS_COOLOFL_GLOBAL/COMP200/GLOBAL/DETSTATUS/%s/tags' 
   68     xml = ET.parse(tagxml)
 
   70     for t 
in xml.findall(
'tag'):
 
   72         lock = t.attrib.get(
'lock', 
'unlocked')
 
   73         description = t.attrib.get(
'description')
 
   74         rv.append((text, description, lock))
 
   77 GRL_DIRECTORY=
'/afs/cern.ch/user/a/atlasdqm/grl' 
   80 TAGS_TO_SUPPRESS = [
'DetStatusLBSumm_m4initial',
 
   81                     'DetStatusLBSumm-cos08-01',
 
   82                     'DetStatusLBSumm-cos09-01',
 
   83                     'DetStatusLBSumm-cos08-02',
 
   85                     'DetStatusLBSumm_RECP']
 
   89     def walker(rl, d, children):
 
   90         for child 
in children:
 
   91             if child[-3:] == 
'.py' and child != 
'__init__.py':
 
   92                 fullpath = os.path.join(d, child)
 
   93                 classname = fullpath.replace(GRL_DIRECTORY, 
'')[:-3].lstrip(
'/').
replace(
'/', 
'.') 
 
   94                 rl.append((fullpath, classname))
 
   95     os.path.walk(GRL_DIRECTORY, walker, rl)
 
  106             '<title>GRL generator</title>' 
  107             '<script type="text/javascript" src="/static/js/grl.js"><!-- -->' 
  109             '</head><body onload="onLoad()">' 
  110             '<h1>Good Run List Generator</h1>' 
  111             '<p>This generator allows you to create good run list XML files from ' 
  112             'configurations that are currently kept on AFS, in <tt>~atlasdqm/grl</tt>.' 
  114             '<p>CoolRunQuery-00-01-92' 
  115             '<p>GoodRunsLists-00-00-71' 
  117         rv.append(
'<div><form method="get" action="generate" style="border-width: 2px; border-style:solid">')
 
  118         rv.append(
'Configuration file: <select name="configuration" id="confselect">')
 
  120             rv.append(
'<option value="%(config)s">%(config)s</option>'  
  122         rv.append(
'</select> <a href="javascript:downloadPython()">(Click to download)</a> <br/>\n')
 
  123         rv.append(
'DQ folder: <select name="folder" id="folderselect" onchange="adjustTagList(this)">\n' 
  124         '<option value="LBSUMM" selected>LBSUMM: Full DQ summary (default, recommended)</option>\n' 
  125         '<option value="SHIFTOFL">SHIFTOFL: Offline shifters (experts)</option>\n' 
  126         '<option value="DQCALCOFL">DQCALCOFL: Automatic checks + online shifters (experts)</option>\n' 
  127         '</select> If in doubt, leave as LBSUMM<br/>' 
  129         rv.append(
'COOL tag: <select name="cooltag" id ="cooltagselect">')
 
  130         for folder 
in (
'LBSUMM', 
'SHIFTOFL', 
'DQCALCOFL'):
 
  132                 if t 
in TAGS_TO_SUPPRESS: 
continue 
  135                     apptext.append(
'(%s)' % descr)
 
  136                 if lock == 
'unlocked':
 
  137                     apptext.append(
'Tag unlocked, all runs may change')
 
  138                 elif lock == 
'partial':
 
  139                     apptext.append(
'Tag partially locked, recent runs may change')
 
  141                     apptext.append(
'Tag locked')
 
  143                     apptext.insert(0, 
'—')
 
  144                 rv.append(
'<option value="%(tag)s">%(tag)s %(apptext)s</option>'  
  145                          % {
'tag': t, 
'apptext': 
' '.
join(apptext)})
 
  148         '<option value="">HEAD</option>' 
  151         '<input type="submit" value="Submit"/>\n' 
  154         rv.append(
'</body></html>') 
 
  160     def generate(self, configuration=None, folder='LBSUMM', cooltag='HEAD'):
 
  161         if configuration 
is None:
 
  164             q = multiprocessing.Queue()
 
  165             proc = multiprocessing.Process(target=_get_grl_info, 
 
  166                 args = [os.path.join(GRL_DIRECTORY, configuration),
 
  168                 kwargs = {
'queue': q, 
'folder': folder})
 
  172             cherrypy.response.headers[
'content-type'] = 
'text/xml' 
  173             cherrypy.response.headers[
'content-disposition'] = 
'attachment; filename=%s' % rv[1]