190 lines
No EOL
6.4 KiB
Python
190 lines
No EOL
6.4 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 a base file that is not intended to be overridden.
|
|
##
|
|
|
|
##
|
|
# uengine is deprecated and will be removed from the system soon. Migrate your
|
|
# apps to using the Data Access Framework (DAF).
|
|
##
|
|
|
|
#
|
|
# GempakParmDict
|
|
#
|
|
# This code has been developed by the SIB for use in the AWIPS2 system.
|
|
# Creates a dictionary for GEMPAK GRIB names and fullnames from $GEMTBL/grid tables,
|
|
# and updates the dictionary when changes are made to the tables.
|
|
#
|
|
# Usage:
|
|
# import GempakParmDict
|
|
# dataRequest = GempakParmDict.GempakParmDict()
|
|
# return dataRequest.execute("UREL")
|
|
#
|
|
# SOFTWARE HISTORY
|
|
#
|
|
# Date Ticket# Engineer Description
|
|
# ------------ ---------- ----------- --------------------------
|
|
# 06/02/10 173_partC mgamazaychikov Initial Creation
|
|
#
|
|
import os
|
|
import time
|
|
import pickle
|
|
from com.raytheon.uf.common.message.response import ResponseMessageGeneric
|
|
|
|
class GempakParmDict():
|
|
"""This module defines a dictionary for translating
|
|
GEMPAK variables/parameter names to A2DB ones."""
|
|
def __init__ (self):
|
|
self.dictDirName = "/usr1/" + os.getlogin() + "/to11dr11/workspace/build.edex/esb/data/utility/edex_static/base/ncep/dictionary/"
|
|
self.dictName = "gempakParmDict.pkl"
|
|
self.tableDirName = "/export-1/cdbsrv/nawdev/nawips/gempak/tables/grid/"
|
|
self.fullDictName = self.dictDirName + self.dictName
|
|
|
|
#
|
|
# create the dictionary if it does not exist
|
|
#
|
|
if not self.__dictionaryExists ():
|
|
self.__createDictionary()
|
|
else:
|
|
#
|
|
# check if the update is needed
|
|
#
|
|
if self.__dictionaryUpdateNeeded():
|
|
self.__updateDictionary()
|
|
|
|
#
|
|
# load the dictionary
|
|
#
|
|
self.gempakNames = []
|
|
self.gempakNames = self.__loadDictionary()
|
|
|
|
def __dictionaryExists(self):
|
|
return os.access(self.fullDictName, os.F_OK)
|
|
|
|
def __dictionaryUpdateNeeded(self):
|
|
return os.stat(self.tableDirName).st_mtime > os.stat(self.fullDictName).st_mtime
|
|
|
|
def __updateDictionary(self):
|
|
self.__deleteDictionary()
|
|
self.__createDictionary()
|
|
|
|
def __deleteDictionary(self):
|
|
os.remove(self.fullDictName)
|
|
|
|
def __createDictionary (self):
|
|
dictDirName = self.dictDirName
|
|
dictName = self.dictName
|
|
tableDirName = self.tableDirName
|
|
files = [
|
|
"wmogrib1.tbl", "wmogrib2.tbl", "wmogrib3.tbl",
|
|
"wmogrib128.tbl", "wmogrib128.tbl", "wmogrib128.tbl", "wmogrib128.tbl",
|
|
"ncepgrib1.tbl", "ncepgrib2.tbl",
|
|
"ncepgrib129.tbl", "ncepgrib130.tbl", "ncepgrib133.tbl",
|
|
"nmcgrib1.tbl", "nmcgrib2.tbl",
|
|
"ecmwfgrib128.tbl", "gwcgrib2.tbl",
|
|
"g2vars.tbl", "g2varswmo2.tbl", "g2varsncep1.tbl"
|
|
]
|
|
dictFinal = {}
|
|
nameList = []
|
|
abbrList = []
|
|
g1NameStart = 4
|
|
g1NameEnd = 38
|
|
g1AbbrStart = 59
|
|
g1AbbrEnd = 72
|
|
g2NameStart = 16
|
|
g2NameEnd = 47
|
|
g2AbbrStart = 70
|
|
g2AbbrEnd = 81
|
|
for j,fi in enumerate(files):
|
|
file = open(tableDirName + files[j])
|
|
if files[j][:2] == 'g2':
|
|
nameStart = g2NameStart
|
|
nameEnd = g2NameEnd
|
|
abbrStart = g2AbbrStart
|
|
abbrEnd = g2AbbrEnd
|
|
else:
|
|
nameStart = g1NameStart
|
|
nameEnd = g1NameEnd
|
|
abbrStart = g1AbbrStart
|
|
abbrEnd = g1AbbrEnd
|
|
kk = 0
|
|
ii = 0
|
|
while 1:
|
|
line = file.readline()
|
|
#
|
|
# check if the end of file is reached
|
|
#
|
|
if not line:
|
|
break
|
|
#
|
|
# if the end of file is not reached
|
|
# check if the line is commented out with '!'
|
|
#
|
|
skipping = False
|
|
if line[0] != '!':
|
|
name = line[nameStart:nameEnd].rstrip()
|
|
abbr = line[abbrStart:abbrEnd].rstrip()
|
|
#
|
|
# if the line is not commented out with '!',
|
|
# add name and abbr to lists,
|
|
# if the abbreviation is not already in the list
|
|
# and not an empty string or 'NONE'
|
|
#
|
|
if abbr in abbrList:
|
|
skipping = True
|
|
else:
|
|
if not abbr.isalnum():
|
|
if abbr.find('-') == -1:
|
|
skipping = True
|
|
else:
|
|
skipping = False
|
|
if abbr == 'NONE':
|
|
skipping = True
|
|
|
|
if skipping:
|
|
pass
|
|
ii = ii + 1
|
|
else:
|
|
kk = kk + 1
|
|
nameList.append(name)
|
|
abbrList.append(abbr)
|
|
file.close()
|
|
dictFinal = dict(zip(abbrList, nameList))
|
|
output = open(self.fullDictName, 'wb')
|
|
pickle.dump(dictFinal, output, -1)
|
|
output.close()
|
|
|
|
def __loadDictionary(self):
|
|
pklFile = open(self.fullDictName,'rb')
|
|
nameDict = pickle.load(pklFile)
|
|
pklFile.close()
|
|
return nameDict
|
|
|
|
def execute(self, aParm):
|
|
try:
|
|
name = self.gempakNames[aParm]
|
|
except KeyError:
|
|
print "Accessing a non-existent dictionary key"
|
|
name = ''
|
|
return (ResponseMessageGeneric(name))
|
|
|
|
|