Merge "Omaha #3599 Update grid inventory scirpts to DAF." into omaha_14.4.1

Former-commit-id: e5ed793542 [formerly c656afbd93 [formerly bcaaf60fd1] [formerly e5ed793542 [formerly 2da2aa5af20a75edde85e566f680322106dd04ae]]]
Former-commit-id: c656afbd93 [formerly bcaaf60fd1]
Former-commit-id: c656afbd93
Former-commit-id: 6a62f01e60
This commit is contained in:
Nate Jensen 2014-11-04 08:48:32 -06:00 committed by Gerrit Code Review
commit d54fb901a4
2 changed files with 220 additions and 78 deletions

View file

@ -1,4 +1,23 @@
#!/bin/csh
##
# 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.
##
#
# A script wrapper that is meant to get inventories of gridded data
# from the A-II database. The data is output to stdout as ASCII.
@ -53,6 +72,15 @@
# submitted to the UEngine instead of cleaning it up. The path to the
# finalized python is /tmp/a2rdmdlNNNNN.py where NNNNN is a unix process id.
#
# Gets all available raob data in the A-II database over a specified range of
# times. The data is output to stdout as ASCII.
#
# SOFTWARE HISTORY
#
# Date Ticket# Engineer Description
# ------------ ---------- ----------- --------------------------
# 2014-10-22 3599 nabowle Initial modification. Changed to properly call DAF version.
#
set rmpy = yes
if ( "$1" == "p" ) then
set rmpy = no
@ -112,16 +140,7 @@ if ( $status == 0 || $#ids > 1 ) then
endif
set sss = $mmm
endif
#
if ( "$*" == "+" ) then
set varList = `$me $sss`
foreach onevar ( $varList )
echo ${onevar}:
$me $sss $onevar | tr '\n' ' '
echo
end
exit
endif
#
# Locate python stub that we will modify to create the final python logic.
#
@ -142,12 +161,36 @@ endif
#
grep DataAccessLayer $stubpy >& /dev/null
if ( $status == 0 ) then
set method = "daf"
if ( "$*" == "+" ) then
/awips2/python/bin/python $stubpy --mode fieldplane --srcId $sss
else if ( "$1" == "" ) then
/awips2/python/bin/python $stubpy --mode field --srcId $sss
else if ( "$1" == "@" ) then
/awips2/python/bin/python $stubpy --mode time --srcId $sss
else if ( "$2" == "" ) then
/awips2/python/bin/python $stubpy --mode plane --srcId $sss --varAbrev $1
else if ( "$3" == "" ) then
/awips2/python/bin/python $stubpy --mode time --srcId $sss --lvlName $1 --varAbrev $2
else if ( "$4" == "" ) then
/awips2/python/bin/python $stubpy --mode time --srcId $sss --lvlName $1 --lvlOne $2 --varAbrev $3
else
/awips2/python/bin/python $stubpy --mode time --srcId $sss --lvlName $1 --lvlOne $2 --lvlTwo $3 --varAbrev $4
endif
else
#
if ( "$*" == "+" ) then
set varList = `$me $sss`
foreach onevar ( $varList )
echo ${onevar}:
$me $sss $onevar | tr '\n' ' '
echo
end
exit
endif
#
# Set up the environment we need to run the UEngine.
#
set method = "uengine"
if ( -e ./UEngine.cshsrc ) then
set ueenv = ./UEngine.cshsrc
else if ( -e $mydir/UEngine.cshsrc ) then
@ -161,53 +204,51 @@ else
exit
endif
source $ueenv
endif
#
# Modify the text of special tags in stub to create finalized script.
#
set specpy = /tmp/a2invmdl${$}.py
rm -rf $specpy >& /dev/null
touch $specpy
chmod 775 $specpy
set plane = no
if ( "$1" == "" ) then
cat $stubpy | sed "s/MMMMM/field/g" | sed "s/SSSSS/$sss/g" | \
sed 's/^.*TTTTT.*$//g' | sed 's/^.*LLLLL.*$//g' | \
sed 's/^.*22222.*$//g' | sed 's/^.*VVVVV.*$//g' >> $specpy
else if ( "$1" == "@" ) then
cat $stubpy | sed "s/MMMMM/time/g" | sed "s/SSSSS/$sss/g" | \
sed 's/^.*TTTTT.*$//g' | sed 's/^.*LLLLL.*$//g' | \
sed 's/^.*22222.*$//g' | sed 's/^.*VVVVV.*$//g' >> $specpy
else if ( "$2" == "" ) then
set plane = yes
cat $stubpy | sed "s/MMMMM/plane/g" | sed "s/SSSSS/$sss/g" | \
sed 's/^.*TTTTT.*$//g' | sed 's/^.*LLLLL.*$//g' | \
sed 's/^.*22222.*$//g' | sed "s/VVVVV/$1/g" >> $specpy
else if ( "$3" == "" ) then
cat $stubpy | sed "s/MMMMM/time/g" | sed "s/SSSSS/$sss/g" | \
sed "s/TTTTT/$1/g" | sed 's/^.*LLLLL.*$//g' | \
sed 's/^.*22222.*$//g' | sed "s/VVVVV/$2/g" >> $specpy
else if ( "$4" == "" ) then
cat $stubpy | sed "s/MMMMM/time/g" | sed "s/SSSSS/$sss/g" | \
sed "s/TTTTT/$1/g" | sed "s/LLLLL/$2/g"| \
sed 's/^.*22222.*$//g' | sed "s/VVVVV/$3/g" >> $specpy
else
cat $stubpy | sed "s/MMMMM/time/g" | sed "s/SSSSS/$sss/g" | \
sed "s/TTTTT/$1/g" | sed "s/LLLLL/$2/g" | \
sed "s/22222/$3/g" | sed "s/VVVVV/$4/g" >> $specpy
endif
if ( "$method" == "daf" ) then
/awips2/python/bin/python $specpy
else if ( "$plane" == "no" ) then
cd $UE_BIN_PATH
( uengine -r python < $specpy ) |& grep attributes | cut '-d"' -f4
else
cd $UE_BIN_PATH
( uengine -r python < $specpy ) |& sed 's|.*</items>.*|@|g' | \
grep -E 'attributes|@' | cut '-d"' -f4 | tr '\n' ' ' | tr '@' '\n' | \
sed 's/ -999999.0//g' | sed 's/^ *//g' | sed 's/ *$//g'
endif
if ( "$rmpy" == "yes" ) rm -rf $specpy >& /dev/null
#
#
# Modify the text of special tags in stub to create finalized script.
#
set specpy = /tmp/a2invmdl${$}.py
rm -rf $specpy >& /dev/null
touch $specpy
chmod 775 $specpy
set plane = no
if ( "$1" == "" ) then
cat $stubpy | sed "s/MMMMM/field/g" | sed "s/SSSSS/$sss/g" | \
sed 's/^.*TTTTT.*$//g' | sed 's/^.*LLLLL.*$//g' | \
sed 's/^.*22222.*$//g' | sed 's/^.*VVVVV.*$//g' >> $specpy
else if ( "$1" == "@" ) then
cat $stubpy | sed "s/MMMMM/time/g" | sed "s/SSSSS/$sss/g" | \
sed 's/^.*TTTTT.*$//g' | sed 's/^.*LLLLL.*$//g' | \
sed 's/^.*22222.*$//g' | sed 's/^.*VVVVV.*$//g' >> $specpy
else if ( "$2" == "" ) then
set plane = yes
cat $stubpy | sed "s/MMMMM/plane/g" | sed "s/SSSSS/$sss/g" | \
sed 's/^.*TTTTT.*$//g' | sed 's/^.*LLLLL.*$//g' | \
sed 's/^.*22222.*$//g' | sed "s/VVVVV/$1/g" >> $specpy
else if ( "$3" == "" ) then
cat $stubpy | sed "s/MMMMM/time/g" | sed "s/SSSSS/$sss/g" | \
sed "s/TTTTT/$1/g" | sed 's/^.*LLLLL.*$//g' | \
sed 's/^.*22222.*$//g' | sed "s/VVVVV/$2/g" >> $specpy
else if ( "$4" == "" ) then
cat $stubpy | sed "s/MMMMM/time/g" | sed "s/SSSSS/$sss/g" | \
sed "s/TTTTT/$1/g" | sed "s/LLLLL/$2/g"| \
sed 's/^.*22222.*$//g' | sed "s/VVVVV/$3/g" >> $specpy
else
cat $stubpy | sed "s/MMMMM/time/g" | sed "s/SSSSS/$sss/g" | \
sed "s/TTTTT/$1/g" | sed "s/LLLLL/$2/g" | \
sed "s/22222/$3/g" | sed "s/VVVVV/$4/g" >> $specpy
endif
if ( "$plane" == "no" ) then
cd $UE_BIN_PATH
( uengine -r python < $specpy ) |& grep attributes | cut '-d"' -f4
else
cd $UE_BIN_PATH
( uengine -r python < $specpy ) |& sed 's|.*</items>.*|@|g' | \
grep -E 'attributes|@' | cut '-d"' -f4 | tr '\n' ' ' | tr '@' '\n' | \
sed 's/ -999999.0//g' | sed 's/^ *//g' | sed 's/ *$//g'
endif
#if ( "$rmpy" == "yes" ) rm -rf $specpy >& /dev/null
#
endif

View file

@ -1,22 +1,123 @@
# Get inventories
##
# 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.
##
import CatalogQuery
query = CatalogQuery.CatalogQuery("grid")
mode = "MMMMM"
# Gets inventories of gridded data from the A-II database. The data is output
# to stdout as ASCII.
#
# SOFTWARE HISTORY
#
# Date Ticket# Engineer Description
# ------------ ---------- ----------- --------------------------
# 2014-10-22 3599 nabowle Initial modification. Convert to DAF.
#
if mode == "field" :
query.setDistinctField("info.parameter.abbreviation")
elif mode == "plane" :
query.setDistinctField("info.level.masterLevel.name")
query.setDistinctField("info.level.levelonevalue")
query.setDistinctField("info.level.leveltwovalue")
else :
query.setDistinctField("dataTime")
import argparse
import numpy
import sys
query.addConstraint("info.datasetId", "SSSSS")
query.addConstraint("info.level.masterLevel.name", "TTTTT")
query.addConstraint("info.level.levelonevalue", "LLLLL")
query.addConstraint("info.level.leveltwovalue", "22222")
query.addConstraint("info.parameter.abbreviation", "VVVVV")
from ufpy.dataaccess import DataAccessLayer
return query.executeWrapped()
def get_args():
parser = argparse.ArgumentParser(conflict_handler="resolve")
parser.add_argument("-h", action="store", dest="host",
help="EDEX server hostname (optional)", metavar="hostname")
parser.add_argument("--srcId", action="store", dest="srcId",
help="Unique alphanumeric name for gridded data source",
metavar="srcId")
parser.add_argument("--varAbrev", action="store", dest="varAbrev",
help="Variable abreviation", metavar="varAbrev")
parser.add_argument("--lvlOne", action="store", dest="lvlOne",
help="Level One value", metavar="lvlOne", type=float)
parser.add_argument("--lvlTwo", action="store", dest="lvlTwo",
help="Level Two value", metavar="lvlTwo", type=float)
parser.add_argument("--lvlName", action="store", dest="lvlName",
help="Master level name", metavar="lvlName")
parser.add_argument("--mode", action="store", dest="mode", default="time",
help="Mode - time, plane, field, or fieldplane")
return parser.parse_args()
def main():
user_args = get_args()()
if user_args.host:
DataAccessLayer.changeEDEXHost(user_args.host)
req = DataAccessLayer.newDataRequest("grid")
if not user_args.srcId:
print >> sys.stderr, "srcId not provided"
return
req.addIdentifier("info.datasetId", user_args.srcId)
if user_args.varAbrev:
req.setParameters(user_args.varAbrev)
if user_args.lvlName is not None:
req.addIdentifier("info.level.masterLevel.name", user_args.lvlName)
if user_args.lvlOne is not None:
req.addIdentifier("info.level.levelonevalue", numpy.float64(user_args.lvlOne))
if user_args.lvlTwo is not None:
req.addIdentifier("info.level.leveltwovalue", numpy.float64(user_args.lvlTwo))
mode = user_args.mode
if mode not in ["time", "plane", "field", "fieldplane"]:
print >> sys.stderr, "mode must be one of time, plane, field, or fieldplane."
return
msg = "";
if mode == "time":
times = DataAccessLayer.getAvailableTimes(req)
for time in times:
timeStr = str(time)
if "--" in timeStr:
timeStr = timeStr[0:-22] + ".0" + timeStr[-22:-1] + ".0" + timeStr[-1]
msg += timeStr[0:19] + ".0" + timeStr[19:] + "\n"
elif mode == "plane":
levels = DataAccessLayer.getAvailableLevels(req)
for level in levels:
msg += level_to_string(level) + "\n"
elif mode == "field":
params = DataAccessLayer.getAvailableParameters(req)
msg = "\n".join(params)
else: #fieldplane
params = DataAccessLayer.getAvailableParameters(req)
for param in params:
msg += param + ":\n"
req.setParameters(param)
levels = DataAccessLayer.getAvailableLevels(req)
if levels:
levelStr = []
for level in levels:
levelStr.append(level_to_string(level))
msg += " ".join(levelStr) + " \n"
print msg.strip("\n")
def level_to_string(level):
name = level.getMasterLevel().getName()
lvlOne = str(level.getLevelonevalue())
lvlTwo = str(level.getLeveltwovalue())
msg = name + " " + lvlOne
if lvlTwo not in ["None", "-999999.0"]:
msg += " " + lvlTwo
return msg
if __name__ == '__main__':
main()