ATLAS Offline Software
Loading...
Searching...
No Matches
JobBrowser.JobBrowser Class Reference
Inheritance diagram for JobBrowser.JobBrowser:
Collaboration diagram for JobBrowser.JobBrowser:

Public Member Functions

 __init__ (self)
 content (self, **args)
 configure (self)
 pageName (self)
 addPage (self, name, page, **attrs)
 addLink (self, name, alias, **attrs)
 addToPageHeader (self, snippet)
 index (self, **args)
 configureLinks (self)
 override (self)
 header (self, **args)
 navigation (self, **args)
 footer (self, **args)

Public Attributes

dict pageConfig
 globalConfig = GlobalConfiguration()
bool isConfigured = False

Static Public Attributes

 exposed

Detailed Description

Definition at line 71 of file JobBrowser.py.

Constructor & Destructor Documentation

◆ __init__()

JobBrowser.JobBrowser.__init__ ( self)

Definition at line 73 of file JobBrowser.py.

73 def __init__(self):
74 BeamSpotWebPage.__init__(self)
75 self.pageConfig['pageTitle'] = 'ATLAS Beam Spot Jobs'
76 self.addToPageHeader(tableSorter)
77

Member Function Documentation

◆ addLink()

WebPage.WebPage.addLink ( self,
name,
alias,
** attrs )
inherited
Add a new link to the page tree. Links share page objects with
   other pages through aliasing. This allows using different links
   with different queries to the same page as if they were separate
   pages. For links, highlighting of the current page is disabled
   (if enabled, all links leading to the same page would be
   highlighted).

Definition at line 309 of file WebPage.py.

309 def addLink(self, name, alias, **attrs):
310 """Add a new link to the page tree. Links share page objects with
311 other pages through aliasing. This allows using different links
312 with different queries to the same page as if they were separate
313 pages. For links, highlighting of the current page is disabled
314 (if enabled, all links leading to the same page would be
315 highlighted)."""
316 self.globalConfig.pageList.append(name)
317 self.globalConfig.pageAttributes[name] = dict(attrs)
318 self.globalConfig.pageAttributes[name]['alias'] = alias
319

◆ addPage()

WebPage.WebPage.addPage ( self,
name,
page,
** attrs )
inherited
Add a new web page to the page tree. All pages added via addPage
   share the same GlobalConfiguration object.

Definition at line 300 of file WebPage.py.

300 def addPage(self, name, page, **attrs):
301 """Add a new web page to the page tree. All pages added via addPage
302 share the same GlobalConfiguration object."""
303 page.globalConfig = self.globalConfig
304 page.pageConfig['pageName'] = name
305 self.globalConfig.pageList.append(name)
306 self.globalConfig.pageAttributes[name] = dict(attrs)
307 setattr(self,name,page) # Link page into page tree (for CherryPy)
308

◆ addToPageHeader()

WebPage.WebPage.addToPageHeader ( self,
snippet )
inherited
Add a snippet of code to the page header. Use this e.g. to include JavaScript libraries.

Definition at line 320 of file WebPage.py.

320 def addToPageHeader(self, snippet):
321 """Add a snippet of code to the page header. Use this e.g. to include JavaScript libraries."""
322 self.pageConfig['pageHeaderSnippets'] += snippet
323

◆ configure()

BeamSpotWebPage.BeamSpotWebPage.configure ( self)
inherited
Final configuration of web application after all data is initialized.

Reimplemented from WebPage.WebPage.

Definition at line 49 of file BeamSpotWebPage.py.

49 def configure(self):
50 self.pageConfig['cssName'] = self.globalConfig.baseUrl+'/css/beamspot.css'
51 if not self.pageConfig.get('pageTitle',''):
52 self.pageConfig['pageTitle'] = 'ATLAS Beam Spot Web Page'
53 self.pageConfig['header'] = header
54 self.pageConfig['footer'] = footer
55 WebPage.configure(self)
56
57
bool configure(asg::AnaToolHandle< ITrigGlobalEfficiencyCorrectionTool > &tool, ToolHandleArray< IAsgElectronEfficiencyCorrectionTool > &electronEffToolsHandles, ToolHandleArray< IAsgElectronEfficiencyCorrectionTool > &electronSFToolsHandles, ToolHandleArray< CP::IMuonTriggerScaleFactors > &muonToolsHandles, ToolHandleArray< IAsgPhotonEfficiencyCorrectionTool > &photonEffToolsHandles, ToolHandleArray< IAsgPhotonEfficiencyCorrectionTool > &photonSFToolsHandles, const std::string &triggers, const std::map< std::string, std::string > &legsPerTool, unsigned long nToys, bool debug)
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)
Definition hcg.cxx:130

◆ configureLinks()

WebPage.WebPage.configureLinks ( self)
inherited
Based on configuration data, for each web page create two link entries in pageConfig:
   The first entry has the form url_PAGENAME and contains the complete URL to link to
   a page. The second entry is named href_PAGENAME and contains style information and a
   href= prefix with proper quotation marks in addition to the URL. These link entries
   should be used to generate links in HTML pages with snippets like <a %(href_PAGENAME)s>
   or <a href="%(url_PAGENAME)>. The link entries can only be generated once all
   configuration data is available, ie configureLinks must be called from configure
   and not from __init__.

Definition at line 353 of file WebPage.py.

353 def configureLinks(self):
354 """Based on configuration data, for each web page create two link entries in pageConfig:
355 The first entry has the form url_PAGENAME and contains the complete URL to link to
356 a page. The second entry is named href_PAGENAME and contains style information and a
357 href= prefix with proper quotation marks in addition to the URL. These link entries
358 should be used to generate links in HTML pages with snippets like <a %(href_PAGENAME)s>
359 or <a href="%(url_PAGENAME)>. The link entries can only be generated once all
360 configuration data is available, ie configureLinks must be called from configure
361 and not from __init__."""
362 for p in self.globalConfig.pageList:
363 page = self.globalConfig.pageAttributes[p].get('alias',p)
364 query = self.globalConfig.pageAttributes[p].get('query','')
365 style = self.globalConfig.pageAttributes[p].get('style',None)
366 self.pageConfig['url_'+p] = '%s/%s/%s' % (self.globalConfig.baseUrl,page,query)
367 if p==self.pageName():
368 self.pageConfig['href_'+p] = 'href="%s/%s/%s" class="%s"' % (self.globalConfig.baseUrl,page,query,self.pageConfig['css_currentLink'])
369 else:
370 if style:
371 self.pageConfig['href_'+p] = 'href="%s/%s/%s" class="%s"' % (self.globalConfig.baseUrl,page,query,style)
372 else:
373 self.pageConfig['href_'+p] = 'href="%s/%s/%s"' % (self.globalConfig.baseUrl,page,query)
374

◆ content()

JobBrowser.JobBrowser.content ( self,
** args )
Generate the page content. Default value comes from self.pageConfig['content'].

Reimplemented from WebPage.WebPage.

Definition at line 78 of file JobBrowser.py.

78 def content(self,**args):
79 with TaskManager(self.globalConfig['taskDb']) as taskman:
80 if 'r' in args:
81 table = taskCountForRun % (taskman.getNTasks(['where RUNNR =',DbParam(args['r'])]), args['r'])
82 taskIter = taskman.taskIterDict('*', ['where RUNNR =',DbParam(args['r']),'order by UPDATED'] )
83 elif 'd' in args:
84 table = taskCountForDS % (taskman.getNTasks(["where DSNAME like '%%%s%%'" % args['d']]), args['d'])
85 taskIter = taskman.taskIterDict('*', ["where DSNAME like '%%%s%%' order by UPDATED" % args['d']] )
86 else:
87 limit = int(args['limit']) if 'limit' in args else 50
88 if not limit:
89 limit = 99999999
90 table = taskCount % taskman.getNTasks()
91 taskIter = taskman.taskIterDict(qual=('order by UPDATED desc',))
92 else:
93 table = taskCountLimit % (taskman.getNTasks(),limit)
94 taskIter = taskman.taskIterDict(qual=('order by UPDATED desc',),limit=limit)
95 table += tableHeader
96 for t in taskIter:
97 dsname = t['DSNAME']
98 taskname = t['TASKNAME']
99 table += "<tr>"
100 table += "<td>%s</td>" % (time.ctime(t['UPDATED']))
101 table += "<td>%s</td>" % (dsname)
102 table += "<td>%s</td>" % (taskname)
103 table += "<td>%s</td>" % ('<br>'.join(t['ATLREL'].split(';')))
104 table += "<td>%s</td>" % (t['NJOBS'])
105 stat = t['STATUS']
106 table += '<td class="%s">%s</td>' % (getStatusClass(stat),getKey(TaskManager.StatusCodes,stat))
107 table += '<td>'
108 table += ' <a href="../details?d=%s&t=%s">Details</a>' %(dsname,taskname)
109 table += ' <a href="../files?u=%s/%s">Files</a>' %(dsname,taskname)
110 table += '</td>'
111 table += "<td>%s</td>" % (blankIfNone(t['RESULTLINKS']))
112 table += "</tr>\n"
113 table += "</tbody></table>\n"
114 return table
115
116
117# Code to test or run locally
std::vector< std::string > split(const std::string &s, const std::string &t=":")
Definition hcg.cxx:177

◆ footer()

WebPage.WebPage.footer ( self,
** args )
inherited
Generate the footer. Default value comes from self.pageConfig['footer'].

Definition at line 395 of file WebPage.py.

395 def footer(self, **args):
396 """Generate the footer. Default value comes from self.pageConfig['footer']."""
397 return self.pageConfig['footer'] % self.pageConfig
398
399
400# Example configuration file on how to run CherryPy with Apache mod_python:
401#
402# <Location "/">
403# PythonPath "sys.path+['/whatever']"
404# SetHandler python-program
405# PythonHandler cherrypy._cpmodpy::handler
406# PythonOption cherrypy.setup WebPage::setup_server
407# PythonDebug On
408# </Location>
409#
410#import cherrypy
411#def setup_server():
412# cherrypy.config.update({'environment': 'production',
413# 'log.screen': False,
414# 'server.socket_host': '127.0.0.1',
415# 'log.error_file': '/tmp/site.log',
416# 'show_tracebacks': False})
417# cherrypy.tree.mount(WebPage())
418
419
420# Test code

◆ header()

WebPage.WebPage.header ( self,
** args )
inherited
Generate the page header. Default value comes from self.pageConfig['header'].

Definition at line 383 of file WebPage.py.

383 def header(self, **args):
384 """Generate the page header. Default value comes from self.pageConfig['header']."""
385 return self.pageConfig['header'] % self.pageConfig
386

◆ index()

WebPage.WebPage.index ( self,
** args )
inherited
Return the complete page.

Definition at line 324 of file WebPage.py.

324 def index(self, **args):
325 """Return the complete page."""
326 if not self.isConfigured:
327 self.configure()
328 s = self.override()
329 if not s:
330 self.pageConfig['timeStamp'] = time.strftime('%a %b %d %X %Z %Y')
331 contents = self.content(**args) # Make sure contents is run first (so it
332 # can change any pageConfig entries if desired
333 s = startPage % self.pageConfig
334 s = s + htmlDiv('header', self.header(**args),
335 keepEmptyDiv=self.pageConfig['keepEmptyHeader'])
336 s = s + htmlDiv('navigation', self.navigation(**args),
337 keepEmptyDiv=self.pageConfig['keepEmptyNavigation'])
338 s = s + htmlDiv('content', contents,
339 keepEmptyDiv=self.pageConfig['keepEmptyContent'])
340 s = s + htmlDiv('footer', self.footer(**args),
341 keepEmptyDiv=self.pageConfig['keepEmptyFooter'])
342 s = s + endPage
343 return s
Definition index.py:1

◆ navigation()

WebPage.WebPage.navigation ( self,
** args )
inherited
Generate the navigation bar. Default value comes from self.pageConfig['navigation'].

Definition at line 387 of file WebPage.py.

387 def navigation(self, **args):
388 """Generate the navigation bar. Default value comes from self.pageConfig['navigation']."""
389 return self.pageConfig['navigation'] % self.pageConfig
390

◆ override()

WebPage.WebPage.override ( self)
inherited
Override provides a hook where code to generate or redirect to an alternative
   page can be placed by derived classes. If not override of the normal page is
   desired, override should return None. Otherwise it should either raise an
   appropriate exception or return a string containing the complete alternate page
   to display.

Definition at line 375 of file WebPage.py.

375 def override(self):
376 """Override provides a hook where code to generate or redirect to an alternative
377 page can be placed by derived classes. If not override of the normal page is
378 desired, override should return None. Otherwise it should either raise an
379 appropriate exception or return a string containing the complete alternate page
380 to display."""
381 return None
382

◆ pageName()

WebPage.WebPage.pageName ( self)
inherited
Short cut to retrieve the name (the last element in the URL)
   of the current page. This works only if the page has been
   added into the page tree using addPage.

Definition at line 294 of file WebPage.py.

294 def pageName(self):
295 """Short cut to retrieve the name (the last element in the URL)
296 of the current page. This works only if the page has been
297 added into the page tree using addPage."""
298 return self.pageConfig['pageName']
299

Member Data Documentation

◆ exposed

WebPage.WebPage.exposed
staticinherited

Definition at line 345 of file WebPage.py.

◆ globalConfig

WebPage.WebPage.globalConfig = GlobalConfiguration()
inherited

Definition at line 290 of file WebPage.py.

◆ isConfigured

bool WebPage.WebPage.isConfigured = False
inherited

Definition at line 291 of file WebPage.py.

◆ pageConfig

dict WebPage.WebPage.pageConfig
inherited
Initial value:
= { 'contentType': '', # For plain CGI need: 'Content-type: text/html\n\n'
'pageName': '',
'pageTitle': '',
'pageHeaderSnippets': '',
'cssName': 'default.css',
'css_currentLink': 'acurrentlink',
'header': '',
'navigation': '',
'content': '',
'footer': '',
'keepEmptyHeader': False, # Set to true to anyway generate div if empty
'keepEmptyNavigation': False,
'keepEmptyContent': False,
'keepEmptyFooter': False
}

Definition at line 273 of file WebPage.py.


The documentation for this class was generated from the following file: