def main(): args = validateArgs() if args.drt: import offsetTime offsetTime.setDrtOffset(args.drt) if args.varDict: exec "args.varDict = " + args.varDict runProcedure(args) if args.drt: import offsetTime offsetTime.reset()
endTime = val elif switch == "-a": editArea = val elif switch == "-t": timeRange = val elif switch == "-h": host = val elif switch == "-p": port = int(val) elif switch == "-u": userName = val elif switch == "-c": configFile = val elif switch == "-z": import offsetTime offsetTime.setDrtOffset(val) elif switch == "-m": mutableModel = val elif switch == "-V": exec "varDict = " + val if userName is None: userName = getProperty("user.name") if procName is None or configFile is None: usage() sys.exit(1) runProc = RunProcedure(procName, host, port, userName, configFile, startTime, endTime, timeRange, editArea, mutableModel, varDict)
def runFormatter(databaseID, site, forecastList, cmdLineVarDict, vtecMode, username, dataMgr, serverFile=None, editAreas=[], timeRanges=[], timePeriod=None, drtTime=None, vtecActiveTable='active', testMode=0, experimentalMode=0, serverOutputFile=None, startTime=None, endTime=None, language=None, outputFile=None, appendFile=None): if cmdLineVarDict: exec "cmdLineVarDict = " + cmdLineVarDict else: cmdLineVarDict = {} # Set default Forecast Type if len(forecastList) == 0: usage() logger.error("ForecastList [-t] is empty or missing") return # Can't have both T and E modes if testMode and experimentalMode: usage() logger.error("Can't have both -T and -E switches") return if drtTime is not None: import offsetTime offsetTime.setDrtOffset(drtTime) # Create Time Range useRawTR = 0 if startTime is not None and endTime is not None: start = getAbsTime(startTime) end = getAbsTime(endTime) timeRange = TimeRange.TimeRange(start, end) # Set so this time range will override all others useRawTR = 1 else: timeRange = None # Handle the VTEC modes if vtecMode is not None and vtecMode not in ['X', 'O', 'T', 'E']: usage() logger.error("-v vtecMode must be ['X', 'O', 'T', 'E']") sys.exit(1) #force VTEC mode to "T" if in TEST mode and another vtecCode is specified if testMode and vtecMode is not None: vtecMode = "T" #force VTEC mode to "E" if in EXPERIMENTAL mode and another vtecCode #is specified elif experimentalMode and vtecMode is not None: vtecMode = "E" #force into TEST mode, if vtec code is 'T' if vtecMode == "T": testMode = 1 experimentalMode = 0 elif vtecMode == "E": experimentalMode = 1 testMode = 0 # Create an ifpClient ifpClient = PyFPClient(VizApp.getWsId(), site) global GridLoc GridLoc = ifpClient.getDBGridLocation() #importer = TextIFPImporter(ifpClient) #importer.install() import Utility import ForecastNarrative import ForecastTable import Analysis site = str(ifpClient.getSiteID()[0]) # Create dictionary of arguments argDict = { #"host" : host, #"port" : port, "databaseID": databaseID, "site": site, "cmdLineVarDict": cmdLineVarDict, "serverFile": serverFile, "editAreas": editAreas, "timeRanges": timeRanges, "timeRange": timeRange, "timePeriod": timePeriod, "useRawTR": useRawTR, "vtecMode": vtecMode, "vtecActiveTable": vtecActiveTable, "testMode": testMode, "experimentalMode": experimentalMode, "serverOutputFile": serverOutputFile, } # Handle command line switches for variables that can be # set elsewhere i.e. in the command line varDict OR the # product definition section. # If there was a command line switch for these items, # make an entry in argDict. Otherwise, do not. for item in ["language", "outputFile", "appendFile"]: exec "if " + item + " is not None: argDict['" + item + "'] = " + item logger.info("Arguments: " + str(argDict)) argDict["ifpClient"] = ifpClient argDict["utility"] = Utility.Utility(None, None, ifpClient) #argDict["AFPS"] = AFPS #argDict["AFPSSup"] = AFPSSup argDict["Analysis"] = Analysis argDict["ForecastNarrative"] = ForecastNarrative argDict["ForecastTable"] = ForecastTable # get product creation time to the minute - almost all fmtrs use this argDict['creationTime'] = int(time.time() / 60) * 60.0 # Set the Site Time Zone tz = str(ifpClient.getSiteTimeZone()) os.environ['TZ'] = tz time.tzset() # Create the formatter formatter = TextFormatter.TextFormatter(dataMgr, ifpClient) # For each Forecast Type, # Create generate forecast forecasts = "" # returned value outForecasts = "" # written to output files for forecastType in forecastList: forecast = formatter.getForecast(forecastType, argDict) forecasts += forecast # Convert data written to files to upper case if required if argDict["mixedCaseEnabled"]: outForecasts += forecast else: outForecasts += forecast.upper() logger.info("Text:\n" + str(forecasts)) try: outputFile = argDict["outputFile"] success = writeToFile(outForecasts, outputFile, "w") if success == 0: print "Couldn't open output file", outputFile logger.error("Couldn't open output file: ", outputFile) sys.exit(1) except: pass try: outputFile = argDict["serverOutputFile"] success = writeToFile(outForecasts, outputFile, "w") if success == 0: print "Couldn't open output file", outputFile logger.error("Couldn't open output file: ", outputFile) sys.exit(1) except: pass try: appendFile = argDict["appendFile"] success = writeToFile(outForecasts, appendFile, "a") if success == 0: print "Couldn't open append file", appendFile logger.error("Couldn't write to append file: ", appendFile) sys.exit(1) except: pass try: serverFile = argDict["serverFile"] writeToSite = (username == "SITE") success = writeToServerFile(outForecasts, serverFile, writeToSite) if success == 0: print "Couldn't open server output file", serverFile logger.error("Couldn't open server output file: ", serverFile) sys.exit(1) except: pass del outForecasts # Remove any lat/lon areas created temporarily #global LatLonIds #argDict["ifpClient"].deleteReferenceData(LatLonIds) # Somebody is holding onto an ifpClient and thus the C++ # object is not being destroyed. This causes the network # connection to stay open. Below is a kludge to force # the destruction of the C++ object. #del ifpClient.this # This also means that you may not import any new modules after this # point!!!!!!!!!!!!!!! return forecasts
def runFormatter(databaseID, site, forecastList, cmdLineVarDict, vtecMode, username, dataMgr, serverFile=None, editAreas=[], timeRanges=[], timePeriod=None, drtTime=None, vtecActiveTable='active', testMode=0, experimentalMode=0, serverOutputFile=None, startTime=None, endTime=None, language=None, outputFile=None, appendFile=None ): if cmdLineVarDict: exec "cmdLineVarDict = " + cmdLineVarDict else: cmdLineVarDict = {} # Set default Forecast Type if len(forecastList) == 0: usage() logger.error("ForecastList [-t] is empty or missing") return # Can't have both T and E modes if testMode and experimentalMode: usage() logger.error("Can't have both -T and -E switches") return if drtTime is not None: import offsetTime offsetTime.setDrtOffset(drtTime) # Create Time Range useRawTR = 0 if startTime is not None and endTime is not None: start = getAbsTime(startTime) end = getAbsTime(endTime) timeRange = TimeRange.TimeRange(start, end) # Set so this time range will override all others useRawTR = 1 else: timeRange = None # Handle the VTEC modes if vtecMode is not None and vtecMode not in ['X','O','T','E']: usage() logger.error("-v vtecMode must be ['X', 'O', 'T', 'E']") sys.exit(1) #force VTEC mode to "T" if in TEST mode and another vtecCode is specified if testMode and vtecMode is not None: vtecMode = "T" #force VTEC mode to "E" if in EXPERIMENTAL mode and another vtecCode #is specified elif experimentalMode and vtecMode is not None: vtecMode = "E" #force into TEST mode, if vtec code is 'T' if vtecMode == "T": testMode = 1 experimentalMode = 0 elif vtecMode == "E": experimentalMode = 1 testMode = 0 # Create an ifpClient ifpClient = dataMgr.getClient() global GridLoc GridLoc = ifpClient.getDBGridLocation() #importer = TextIFPImporter(ifpClient) #importer.install() import Utility import ForecastNarrative import ForecastTable import Analysis site = str(ifpClient.getSiteID().get(0)) # Create dictionary of arguments argDict = { #"host" : host, #"port" : port, "databaseID": databaseID, "site" : site, "cmdLineVarDict": cmdLineVarDict, "serverFile": serverFile, "editAreas": editAreas, "timeRanges": timeRanges, "timeRange": timeRange, "timePeriod": timePeriod, "useRawTR": useRawTR, "vtecMode": vtecMode, "vtecActiveTable": vtecActiveTable, "testMode": testMode, "experimentalMode": experimentalMode, "serverOutputFile": serverOutputFile, } # Handle command line switches for variables that can be # set elsewhere i.e. in the command line varDict OR the # product definition section. # If there was a command line switch for these items, # make an entry in argDict. Otherwise, do not. for item in ["language", "outputFile", "appendFile"]: exec "if " + item + " is not None: argDict['" + item + "'] = " + item logger.info("Arguments: " + str(argDict)) argDict["ifpClient"] = ifpClient argDict["utility"] = Utility.Utility(None, None, ifpClient) #argDict["AFPS"] = AFPS #argDict["AFPSSup"] = AFPSSup argDict["Analysis"] = Analysis argDict["ForecastNarrative"] = ForecastNarrative argDict["ForecastTable"] = ForecastTable # get product creation time to the minute - almost all fmtrs use this argDict['creationTime'] = int(time.time()/60)*60.0 # Set the Site Time Zone #tz = ifpClient.getSiteTimeZone(site) #os.environ['TZ'] = tz tz = str(ifpClient.getSiteTimeZone()) os.environ['TZ'] = tz # Create the formatter formatter = TextFormatter.TextFormatter(dataMgr) # For each Forecast Type, # Create generate forecast forecasts = "" for forecastType in forecastList: forecast = formatter.getForecast(forecastType, argDict) forecasts = forecasts + forecast logger.info("Text:\n" + str(forecasts)) try: outputFile = argDict["outputFile"] success = writeToFile(forecasts, outputFile, "w") if success == 0: print "Couldn't open output file", outputFile logger.error("Couldn't open output file: ", outputFile) sys.exit(1) except: pass try: outputFile = argDict["serverOutputFile"] success = writeToFile(forecasts, outputFile, "w") if success == 0: print "Couldn't open output file", outputFile logger.error("Couldn't open output file: ", outputFile) sys.exit(1) except: pass try: appendFile = argDict["appendFile"] success = writeToFile(forecasts, appendFile, "a") if success == 0: print "Couldn't open append file", appendFile logger.error("Couldn't write to append file: ", appendFile) sys.exit(1) except: pass try: serverFile = argDict["serverFile"] writeToSite = (username == "SITE") success = writeToServerFile(forecasts, serverFile, writeToSite) if success == 0: print "Couldn't open server output file", serverFile logger.error("Couldn't open server output file: ", serverFile) sys.exit(1) except: pass # Remove any lat/lon areas created temporarily #global LatLonIds #argDict["ifpClient"].deleteReferenceData(LatLonIds) # Somebody is holding onto an ifpClient and thus the C++ # object is not being destroyed. This causes the network # connection to stay open. Below is a kludge to force # the destruction of the C++ object. #del ifpClient.this # This also means that you may not import any new modules after this # point!!!!!!!!!!!!!!! return forecasts