Package npsgd :: Module config
[hide private]
[frames] | no frames]

Source Code for Module npsgd.config

  1  # Author: Thomas Dimson [tdimson@gmail.com] 
  2  # Date:   January 2011 
  3  # For distribution details, see LICENSE 
  4  """Config module for reading an NPSGD config file. 
  5   
  6  This module is meant to be a singleton. It is shared across all modules 
  7  in the NPSGD package. The particular daemon will call config.loadConfig("...") 
  8  on the config object contained in this module and then we will be ready to go 
  9  thereafter. 
 10  """ 
 11  import os 
 12  import sys 
 13  import logging 
 14  import ConfigParser 
 15  import tornado.template 
 16  import datetime 
 17   
18 -class ConfigError(RuntimeError): pass
19 -class Config(object):
20 """Internal class for handling NPSGD configs."""
21 - def __init__(self):
22 pass
23
24 - def setupLogging(self, logPath):
25 """Helper method for setting up logging across daemons.""" 26 lLevel = logging.DEBUG 27 lFormat = format="%(asctime)s - %(levelname)s - %(message)s" 28 29 if logPath == "-": 30 logging.basicConfig(level=lLevel, format=lFormat) 31 else: 32 logging.basicConfig(filename=logPath, level=lLevel, format=lFormat)
33
34 - def loadConfig(self, configPath):
35 """Reads config file and loads templates using Tornado's template module.""" 36 37 config = ConfigParser.SafeConfigParser() 38 config.read(configPath) 39 40 self.matlabPath = config.get('Matlab', 'matlabPath') 41 self.matlabRequired = config.getboolean('Matlab', 'required') 42 self.pdfLatexPath = config.get('Latex', 'pdfLatexPath') 43 self.latexNumRuns = config.getint("Latex", "numRuns") 44 self.queueFile = config.get("npsgd", "queueFile") 45 self.resultsEmailBodyPath = config.get("npsgd", "resultsEmailBodyPath") 46 self.resultsEmailSubjectPath = config.get("npsgd", "resultsEmailSubjectPath") 47 self.confirmEmailTemplatePath = config.get("npsgd", "confirmEmailTemplatePath") 48 self.confirmEmailSubjectPath = config.get("npsgd", "confirmEmailSubjectPath") 49 self.failureEmailTemplatePath = config.get("npsgd", "failureEmailTemplatePath") 50 self.failureEmailSubjectPath = config.get("npsgd", "failureEmailSubjectPath") 51 self.confirmationFailedEmailSubjectPath = config.get("npsgd", "confirmationFailedEmailSubjectPath") 52 self.confirmationFailedEmailTemplatePath = config.get("npsgd", "confirmationFailedEmailTemplatePath") 53 self.lostTaskEmailSubjectPath = config.get("npsgd", "lostTaskEmailSubjectPath") 54 self.lostTaskEmailTemplatePath = config.get("npsgd", "lostTaskEmailTemplatePath") 55 self.latexResultTemplatePath = config.get('Latex', 'resultTemplate') 56 self.modelTemplatePath = config.get('npsgd', 'modelTemplatePath') 57 self.modelErrorTemplatePath = config.get('npsgd', 'modelErrorTemplatePath') 58 self.confirmTemplatePath = config.get('npsgd', 'confirmTemplatePath') 59 self.confirmedTemplatePath = config.get('npsgd', 'confirmedTemplatePath') 60 self.confirmTimeout = datetime.timedelta(minutes=config.getint('npsgd', 'confirmTimeout')) 61 self.maxJobFailures = config.getint("npsgd", "maxJobFailures") 62 self.keepAliveInterval = config.getint("npsgd", "keepAliveInterval") 63 self.keepAliveTimeout = config.getint("npsgd", "keepAliveTimeout") 64 self.modelScanInterval = config.getint("npsgd", "modelScanInterval") 65 self.queueServerAddress = config.get("npsgd", "queueServerAddress") 66 self.queueServerPort = config.getint("npsgd", "queueServerPort") 67 self.modelDirectory = config.get("npsgd", "modelDirectory") 68 self.htmlTemplateDirectory = config.get("npsgd", "htmlTemplateDirectory") 69 self.emailTemplateDirectory = config.get("npsgd", "emailTemplateDirectory") 70 self.latexTemplateDirectory = config.get("npsgd", "latexTemplateDirectory") 71 self.requestSecret = config.get("npsgd", "requestSecret") 72 73 self.alreadyConfirmedTemplatePath = config.get('npsgd', 'alreadyConfirmedTemplatePath') 74 75 76 if not os.path.exists(self.htmlTemplateDirectory): 77 raise ConfigError("HTML template directory '%s' does not exist" % self.htmlTemplateDirectory) 78 79 if not os.path.exists(self.emailTemplateDirectory): 80 raise ConfigError("Email template directory '%s' does not exist" % self.emailTemplateDirectory) 81 82 if not os.path.exists(self.latexTemplateDirectory): 83 raise ConfigError("Latex template directory '%s' does not exist" % self.latexTemplateDirectory) 84 85 if not os.path.exists(self.modelDirectory): 86 raise ConfigError("Model directory '%s' does not exist" % self.modelDirectory) 87 88 tLoader = tornado.template.Loader(self.emailTemplateDirectory) 89 self.resultsEmailBodyTemplate = tLoader.load(self.resultsEmailBodyPath) 90 self.confirmEmailTemplate = tLoader.load(self.confirmEmailTemplatePath) 91 self.failureEmailTemplate = tLoader.load(self.failureEmailTemplatePath) 92 self.confirmationFailedEmailTemplate = tLoader.load(self.confirmationFailedEmailTemplatePath) 93 self.lostTaskEmailTemplate = tLoader.load(self.lostTaskEmailTemplatePath) 94 self.resultsEmailSubject = tLoader.load(self.resultsEmailSubjectPath) 95 self.confirmEmailSubject = tLoader.load(self.confirmEmailSubjectPath) 96 self.failureEmailSubject = tLoader.load(self.failureEmailSubjectPath) 97 self.confirmationFailedEmailSubject = tLoader.load(self.confirmationFailedEmailSubjectPath) 98 self.lostTaskEmailSubject = tLoader.load(self.lostTaskEmailSubjectPath) 99 100 tLoader = tornado.template.Loader(self.latexTemplateDirectory) 101 self.latexResultTemplate = tLoader.load(self.latexResultTemplatePath) 102 103 self.loadEmail(config) 104 self.checkIntegrity()
105
106 - def loadEmail(self, config):
107 self.smtpUsername = config.get("email", "smtpUsername") 108 self.smtpPassword = config.get("email", "smtpPassword") 109 self.smtpServer = config.get("email", "smtpServer") 110 self.smtpPort = config.getint("email", "smtpPort") 111 self.smtpUseTLS = config.getboolean("email", "smtpUseTLS") 112 self.smtpUseAuth = config.getboolean("email", "smtpUseAuth") 113 self.fromAddress = config.get("email", "fromAddress") 114 self.bcc = [e.strip() for e in config.get("email", "bcc").split(",") if e.strip() != ""] 115 self.cc = [e.strip() for e in config.get("email", "cc").split(",") if e.strip() != ""]
116 117
118 - def checkIntegrity(self):
119 if self.matlabRequired and not os.path.exists(self.matlabPath): 120 raise ConfigError("Matlab executable does not exist at '%s'" % self.matlabPath) 121 122 if not os.path.exists(self.pdfLatexPath): 123 raise ConfigError("pdflatex executable does not exist at '%s'" % self.pdfLatexPath)
124 125 126 config = Config() 127