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

Public Member Functions

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

Public Attributes

dict pageConfig
 globalConfig = GlobalConfiguration()
bool isConfigured = False

Static Public Attributes

 exposed

Detailed Description

Base class for creating CSS-based dynamic web pages.

Definition at line 267 of file WebPage.py.

Constructor & Destructor Documentation

◆ __init__()

WebPage.WebPage.__init__ ( self,
** args )
Constructor. You may override any of the default values in self.pageConfig by
   passing the corresponding value in a named variable.

Definition at line 270 of file WebPage.py.

270 def __init__(self, **args):
271 """Constructor. You may override any of the default values in self.pageConfig by
272 passing the corresponding value in a named variable."""
273 self.pageConfig = { 'contentType': '', # For plain CGI need: 'Content-type: text/html\n\n'
274 'pageName': '',
275 'pageTitle': '',
276 'pageHeaderSnippets': '',
277 'cssName': 'default.css',
278 'css_currentLink': 'acurrentlink',
279 'header': '',
280 'navigation': '',
281 'content': '',
282 'footer': '',
283 'keepEmptyHeader': False, # Set to true to anyway generate div if empty
284 'keepEmptyNavigation': False,
285 'keepEmptyContent': False,
286 'keepEmptyFooter': False
287 }
288 for k in args:
289 self.pageConfig[k] = args[k]
290 self.globalConfig = GlobalConfiguration()
291 self.isConfigured = False
292 pass
293

Member Function Documentation

◆ addLink()

WebPage.WebPage.addLink ( self,
name,
alias,
** attrs )
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 )
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 )
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()

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

Reimplemented in BeamSpotWebPage.BeamSpotWebPage.

Definition at line 347 of file WebPage.py.

347 def configure(self):
348 """Final configuration of web application after all data is initialized."""
349 self.configureLinks()
350 self.isConfigured = True
351 return
352
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)

◆ configureLinks()

WebPage.WebPage.configureLinks ( self)
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
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)
Definition hcg.cxx:130

◆ content()

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

Reimplemented in BeamSpotSummary.BeamSpotSummary, DebugPage.DebugPage, FileBrowser.FileBrowser, JobBrowser.JobBrowser, JobDetails.JobDetails, MyPlots.MyPlots, PlotServer.PlotServer, WebPage.HelloWorld, and WebPlots.WebPlots.

Definition at line 391 of file WebPage.py.

391 def content(self, **args):
392 """Generate the page content. Default value comes from self.pageConfig['content']."""
393 return self.pageConfig['content'] % self.pageConfig
394

◆ footer()

WebPage.WebPage.footer ( self,
** args )
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 )
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 )
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 )
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)
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)
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
static

Definition at line 345 of file WebPage.py.

◆ globalConfig

WebPage.WebPage.globalConfig = GlobalConfiguration()

Definition at line 290 of file WebPage.py.

◆ isConfigured

bool WebPage.WebPage.isConfigured = False

Definition at line 291 of file WebPage.py.

◆ pageConfig

dict WebPage.WebPage.pageConfig
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: