187 lines
7.3 KiB
Python
187 lines
7.3 KiB
Python
##
|
|
# This software was developed and / or modified by Raytheon Company,
|
|
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
#
|
|
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
# This software product contains export-restricted data whose
|
|
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
# to non-U.S. persons whether in the United States or abroad requires
|
|
# an export license or other authorization.
|
|
#
|
|
# Contractor Name: Raytheon Company
|
|
# Contractor Address: 6825 Pine Street, Suite 340
|
|
# Mail Stop B8
|
|
# Omaha, NE 68106
|
|
# 402.291.0100
|
|
#
|
|
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
# further licensing information.
|
|
##
|
|
|
|
##
|
|
# This is an absolute override file, indicating that a higher priority version
|
|
# of the file will completely replace a lower priority version of the file.
|
|
##
|
|
|
|
import ProcessVariableList, types
|
|
|
|
class VarDictGroker:
|
|
def __init__(self, module, definition, name, issuedBy=None, dataMgr=None):
|
|
self._module = module
|
|
self._definition = definition
|
|
self._name = name
|
|
self._issuedBy = issuedBy
|
|
self._dataMgr = dataMgr
|
|
|
|
def getVarDict(self):
|
|
# Create and display the User Dialog for this product.
|
|
#
|
|
# If the product has a _processVariableList method,
|
|
# use it to get the varDict
|
|
# Otherwise,
|
|
# Create the User Dialog entries from the VariableList (if present)
|
|
# and the _issuanceList (if present)
|
|
# Return a text string command line argument for the User Responses
|
|
# Return None if user cancelled
|
|
|
|
varDict = {}
|
|
|
|
# Look for method _processVariableList
|
|
try: # Try to instantiate the smart text product
|
|
product = self._module.TextProduct()
|
|
processVariableList = product._processVariableList
|
|
except: # Simple table product
|
|
processVariableList = None
|
|
product = None
|
|
|
|
if processVariableList is not None:
|
|
print("processVariableList is not None")
|
|
co = processVariableList.__func__.__code__
|
|
if co.co_argcount > 2:
|
|
argValues = [self._definition, self._dataMgr]
|
|
else:
|
|
argValues = [self._definition]
|
|
|
|
import tkinter,sys
|
|
sys.argv = ["FormatterRunner"]
|
|
root=tkinter.Tk()
|
|
root.title("FormatterRunner")
|
|
root.withdraw()
|
|
|
|
varDict = processVariableList(*argValues)
|
|
|
|
root.destroy()
|
|
|
|
if varDict is None:
|
|
return None
|
|
|
|
else:
|
|
|
|
# Get _issuanceList entries for the User Dialog
|
|
print("TextProduct()")
|
|
try: # Try to instantiate the smart text product
|
|
product = self._module.TextProduct()
|
|
product._definition = product.Definition
|
|
except: # Simple table product
|
|
product = None
|
|
|
|
varList = []
|
|
try: # Try to find an issuance list in the smart text product
|
|
issuanceList = product._issuance_list({})
|
|
if len(issuanceList) > 0:
|
|
issuanceEntry = self._createVariableListEntry(
|
|
("Product Issuance", "productIssuance"), issuanceList)
|
|
varList = [issuanceEntry]
|
|
except:
|
|
pass
|
|
|
|
# Add in module VariableList
|
|
try: # Try to find a VariableList in the smart text product
|
|
productVarList = product.VariableList
|
|
varList += productVarList
|
|
except:
|
|
pass
|
|
|
|
# Look for "runTime" variables in the Definition
|
|
varList = self._addRunTimeVariables(varList, self._definition)
|
|
|
|
if varList is not None and len(varList):
|
|
# Display User Dialog
|
|
print("ProcessVariableList.ProcessVariableList")
|
|
processVarList = ProcessVariableList.ProcessVariableList(
|
|
self._name, varList, varDict={}, dataMgr=self._dataMgr)
|
|
self._selectionStatus = processVarList.status()
|
|
if not self._selectionStatus == "OK":
|
|
return None # User Cancelled
|
|
varDict = processVarList.varDict()
|
|
|
|
# Add "issuedBy" to the varDict if applicable
|
|
varDict[("Issued By","issuedBy")] = self._issuedBy
|
|
|
|
# Return a text string version of the User Responses (varDict)
|
|
return str(varDict)
|
|
|
|
def _createVariableListEntry(self, entryName, entryList, entryType="radio",
|
|
default=""):
|
|
# Create a VariableList entry for the entryList
|
|
# and the given entryType and default value
|
|
# "entryList" is a list of items for a radio or checkbutton
|
|
# VariableList entry. If entryList items are tuples, the first
|
|
# value of the tuple is used.
|
|
if len(entryList) == 1:
|
|
# Do not need to put in the dialog
|
|
return None
|
|
entries = []
|
|
for entry in entryList:
|
|
if type(entry) is tuple:
|
|
entry = entry[0]
|
|
entries.append(entry)
|
|
result = (entryName, default, entryType, entries)
|
|
return result
|
|
|
|
def _addRunTimeVariables(self, varList, definition):
|
|
# Add entries to varList to solicit variables designated as
|
|
# "runTime" in the product definition
|
|
|
|
for item, default, rtItem, varType in [
|
|
("language","english","runTimeLanguage", ["radio",
|
|
["english","french","spanish"]]),
|
|
("outputFile","/tmp/forecast.out","runTimeOutputFile",
|
|
["alphaNumeric"]),
|
|
("appendFile",None,"runTimeAppendFile", ["alphaNumeric"]),
|
|
("lineLength",69,"runTimeLineLength",["alphaNumeric"]),
|
|
("timePeriod",3, "runTimePeriod", ["alphaNumeric"]),
|
|
]:
|
|
value = definition.setdefault(item, default)
|
|
rtValue = definition.setdefault(item, default)
|
|
if rtValue == "yes":
|
|
varEntry = [item, value] + varType
|
|
varEntry = tuple(varEntry)
|
|
varList.append(varEntry)
|
|
|
|
# Handle Edit Areas
|
|
rtEditAreas = definition.setdefault("runTimeEditAreas", "no")
|
|
if rtEditAreas == "yes":
|
|
# Add an entry to varList to solicit edit areas at run time
|
|
# Use the defaultEdit areas as choices
|
|
dfEditAreas = definition.setdefault("defaultEditAreas", [])
|
|
editAreaList = []
|
|
for name, label in dfEditAreas:
|
|
if type(name) is tuple:
|
|
# use label instead of lat/lon values
|
|
editAreaList.append(label)
|
|
else:
|
|
editAreaList.append(name)
|
|
varList.append(
|
|
("Choose Edit Areas", [],"check", editAreaList))
|
|
|
|
# Handle Time Ranges
|
|
rtRanges = definition.setdefault("runTimeRanges", "no")
|
|
if rtRanges == "yes":
|
|
# Add an entry to varList to solicit time ranges at run time
|
|
# Use the defaultRanges as choices
|
|
dfRanges = definition.setdefault("defaultRanges", [])
|
|
varList.append(
|
|
("Choose Time Ranges", [],"check", dfRanges))
|
|
|
|
return varList
|