From 79fea328f32c64081a4e3ff6257789321fbca40e Mon Sep 17 00:00:00 2001 From: Nathan Bowler Date: Mon, 3 Nov 2014 12:18:48 -0500 Subject: [PATCH] Omaha #3599 Update grid inventory scirpts to DAF. Change-Id: I0ede4fae07d4b393348bf636612df0f81eb80bef Former-commit-id: 881f242499a9130dd21fba9e5f65788627a95180 --- pythonPackages/msaslaps/grid/a2invmdl.csh | 161 ++++++++++++------- pythonPackages/msaslaps/grid/a2invmdlStub.py | 137 +++++++++++++--- 2 files changed, 220 insertions(+), 78 deletions(-) diff --git a/pythonPackages/msaslaps/grid/a2invmdl.csh b/pythonPackages/msaslaps/grid/a2invmdl.csh index 16f8c122ce..b7f9df8413 100644 --- a/pythonPackages/msaslaps/grid/a2invmdl.csh +++ b/pythonPackages/msaslaps/grid/a2invmdl.csh @@ -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|.*.*|@|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|.*.*|@|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 diff --git a/pythonPackages/msaslaps/grid/a2invmdlStub.py b/pythonPackages/msaslaps/grid/a2invmdlStub.py index d5c88bd497..aabc075778 100644 --- a/pythonPackages/msaslaps/grid/a2invmdlStub.py +++ b/pythonPackages/msaslaps/grid/a2invmdlStub.py @@ -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()