Пример #1
0
 def testGetIdentifierValues(self):
     req = DAL.newDataRequest(self.datatype)
     optionalIds = set(DAL.getOptionalIdentifiers(req))
     requiredIds = set(DAL.getRequiredIdentifiers(req))
     ids = requiredIds | optionalIds
     for id in ids:
         req = DAL.newDataRequest(self.datatype)
         if id == 'accumHrs':
             req.setParameters('ARI6H2YR')
             req.addIdentifier('wfo', params.SITE_ID)
             req.addIdentifier('siteKey', self.location)
             req.addIdentifier('huc', 'ALL')
         idValues = DAL.getIdentifierValues(req, id)
         self.assertTrue(hasattr(idValues, '__iter__'))
         print(id + " values: " + str(idValues))
Пример #2
0
 def testGetVectorGridData(self):
     req = DAL.newDataRequest(self.datatype)
     req.addIdentifier('parmId.dbId.modelName', 'Fcst')
     req.addIdentifier('parmId.dbId.siteId', params.SITE_ID)
     req.setParameters('Wind')
     times = DAL.getAvailableTimes(req)
     if not (times):
         raise unittest.SkipTest('No Wind Data available for testing')
     gridData = DAL.getGridData(req, [times[0]])
     rawWind = None
     rawDir = None
     for grid in gridData:
         if grid.getParameter() == 'Wind':
             self.assertEqual(grid.getUnit(), 'kts')
             rawWind = grid.getRawData()
         elif grid.getParameter() == 'WindDirection':
             self.assertEqual(grid.getUnit(), 'deg')
             rawDir = grid.getRawData()
     self.assertIsNotNone(rawWind, 'Wind Magnitude grid is not present')
     self.assertIsNotNone(rawDir, 'Wind Direction grid is not present')
     # rawWind and rawDir are numpy.ndarrays so comparison will result in boolean ndarrays.
     self.assertTrue((rawWind >= 0).all(),
                     'Wind Speed should not contain negative values')
     self.assertTrue((rawDir >= 0).all(),
                     'Wind Direction should not contain negative values')
     self.assertTrue((rawDir <= 360).all(),
                     'Wind Direction should be less than or equal to 360')
     self.assertFalse((rawDir == rawWind).all(),
                      'Wind Direction should be different from Wind Speed')
Пример #3
0
 def _runConstraintTest(self, key, operator, value):
     req = DAL.newDataRequest(self.datatype)
     constraint = RequestConstraint.new(operator, value)
     req.addIdentifier(key, constraint)
     req.setLocationNames(params.SITE_ID)
     req.setParameters('T')
     return self.runGridDataTest(req)
Пример #4
0
 def _runConstraintTest(self, key, operator, value):
     req = DAL.newDataRequest(self.datatype)
     constraint = RequestConstraint.new(operator, value)
     req.addIdentifier(key, constraint)
     req.setParameters("Imager 11 micron IR")
     req.setLocationNames("West CONUS")
     return self.runGridDataTest(req)
Пример #5
0
 def _runConstraintTest(self, key, operator, value):
     req = DAL.newDataRequest(self.datatype)
     constraint = RequestConstraint.new(operator, value)
     req.setParameters("temperature", "reportType")
     req.setLocationNames(params.OBS_STATION)
     req.addIdentifier(key, constraint)
     return self.runGeometryDataTest(req)
Пример #6
0
 def _runConstraintTest(self, key, operator, value):
     req = DAL.newDataRequest(self.datatype)
     req.addIdentifier('table', 'cli_asos_monthly')
     constraint = RequestConstraint.new(operator, value)
     req.addIdentifier(key, constraint)
     req.setParameters('station_code', 'avg_daily_max')
     return self.runGeometryDataTest(req)
Пример #7
0
 def testGetGridData(self):
     req = DAL.newDataRequest(self.datatype)
     req.setEnvelope(params.ENVELOPE)
     req.setLocationNames(self.radarLoc)
     req.setParameters(*self.parameterList)
     # Don't test shapes since they may differ.
     self.runGridDataTest(req, testSameShape=False)
Пример #8
0
 def _runConstraintTest(self, key, operator, value):
     req = DAL.newDataRequest(self.datatype)
     constraint = RequestConstraint.new(operator, value)
     req.setParameters('dataURI')
     req.setLocationNames(params.OBS_STATION, 'KORD', 'KOFK', 'KLNK')
     req.addIdentifier(key, constraint)
     return self.runGeometryDataTest(req)
Пример #9
0
 def testGetGeometryData(self):
     req = DAL.newDataRequest(self.datatype)
     req.addIdentifier("reportType", "ETA")
     req.setLocationNames(params.OBS_STATION)
     req.setParameters("temperature", "pressure", "specHum", "sfcPress",
                       "temp2", "q2")
     print("Testing getGeometryData()")
     geomData = DAL.getGeometryData(req)
     print("Number of geometry records: " + str(len(geomData)))
     print("Sample geometry data:")
     for record in geomData[:self.sampleDataLimit]:
         print("level=" + record.getLevel(), end="")
         # One dimensional parameters are reported on the 0.0UNKNOWN level.
         # 2D parameters are reported on MB levels from pressure.
         if record.getLevel() == "0.0UNKNOWN":
             print(" sfcPress=" + record.getString("sfcPress") +
                   record.getUnit("sfcPress"),
                   end="")
             print(" temp2=" + record.getString("temp2") +
                   record.getUnit("temp2"),
                   end="")
             print(" q2=" + record.getString("q2") + record.getUnit("q2"),
                   end="")
         else:
             print(" pressure=" + record.getString("pressure") +
                   record.getUnit("pressure"),
                   end="")
             print(" temperature=" + record.getString("temperature") +
                   record.getUnit("temperature"),
                   end="")
             print(" specHum=" + record.getString("specHum") +
                   record.getUnit("specHum"),
                   end="")
         print(" geometry=" + str(record.getGeometry()))
     print("getGeometryData() complete\n\n")
Пример #10
0
 def testSuccessfulQuery(self):
     req = DAL.newDataRequest('grid')
     req.setLocationNames('RAP13')
     req.setParameters('T', 'GH')
     req.setLevels('300MB', '500MB', '700MB')
     times = CTQ.getAvailableTimes(req)
     self.assertNotEqual(len(times), 0)
Пример #11
0
    def testGetGeometryData(self):
        req = DAL.newDataRequest(self.datatype)
        req.setParameters("temperature", "pressure", "uComponent",
                          "vComponent")

        print("Testing getGeometryData()")

        geomData = DAL.getGeometryData(req)
        self.assertIsNotNone(geomData)
        print("Number of geometry records: " + str(len(geomData)))
        print("Sample geometry data:")
        for record in geomData[:self.sampleDataLimit]:
            print("level:", record.getLevel(), end="")
            # One dimensional parameters are reported on the 0.0UNKNOWN level.
            # 2D parameters are reported on MB levels from pressure.
            if record.getLevel() == "0.0UNKNOWN":
                print(" temperature=" + record.getString("temperature") +
                      record.getUnit("temperature"),
                      end="")
                print(" pressure=" + record.getString("pressure") +
                      record.getUnit("pressure"),
                      end="")
            else:
                print(" uComponent=" + record.getString("uComponent") +
                      record.getUnit("uComponent"),
                      end="")
                print(" vComponent=" + record.getString("vComponent") +
                      record.getUnit("vComponent"),
                      end="")
            print(" geometry:", record.getGeometry())

        print("getGeometryData() complete\n\n")
Пример #12
0
 def testGetGeometryDataWithEnvelope(self):
     req = DAL.newDataRequest(self.datatype)
     req.setEnvelope(params.ENVELOPE)
     req.setParameters("temperature", "seaLevelPress", "dewpoint")
     data = self.runGeometryDataTest(req)
     for item in data:
         self.assertTrue(params.ENVELOPE.contains(item.getGeometry()))
Пример #13
0
 def testGetGeometryDataWithEnvelope(self):
     req = DAL.newDataRequest(self.datatype)
     req.setParameters(*self.data_params)
     req.setEnvelope(params.ENVELOPE)
     data = self.runGeometryDataTest(req)
     for item in data:
         self.assertTrue(params.ENVELOPE.contains(item.getGeometry()))
Пример #14
0
    def getQPEValues(self):
        '''
        Strategy method for reading and accumulating data
        from preprocessed FFMP QPE datasets.
        '''
        request = DataAccessLayer.newDataRequest()
        request.setDatatype(FFMP_KEY)
        request.setParameters(self._sourceName)
        request.addIdentifier(WFO_KEY, self.currentSite)
        request.addIdentifier(SITE_KEY, self._siteKey)
        request.addIdentifier(DATA_KEY, self._dataKey)
        request.addIdentifier(HUC_KEY, ALL_HUC)
        availableTimes = DataAccessLayer.getAvailableTimes(request)
        # determine correct times
        latestTime = 0
        for time in availableTimes:
            tm = time.getRefTime().getTime()
            if tm > latestTime:
                latestTime = tm

        timedelta = latestTime - self.accumulationHours * 60 * 60 * 1000
        usedTimes = []

        for time in availableTimes:
            if time.getRefTime().getTime() >= timedelta:
                usedTimes.append(time)

        basins = []
        if usedTimes:
            geometries = DataAccessLayer.getGeometryData(request, usedTimes)
            for geometry in geometries:
                self.__storeQpe(geometry.getLocationName(),
                                geometry.getNumber(self._sourceName), geometry)
            return True
        return False
Пример #15
0
 def runGetIdValuesTest(self, identifiers):
     for id in identifiers:
         if id.lower() == 'datauri':
             continue
         req = DAL.newDataRequest(self.datatype)
         idValues = DAL.getIdentifierValues(req, id)
         self.assertTrue(hasattr(idValues, '__iter__'))
Пример #16
0
    def getPolygonDict(self,
                       tablename,
                       siteID,
                       locationField="name",
                       columns=[]):
        req = DataAccessLayer.newDataRequest()
        req.setDatatype("maps")
        table = "mapdata." + tablename
        req.addIdentifier("table", table)
        req.addIdentifier("geomField", "the_geom")
        req.addIdentifier("locationField", locationField)
        req.addIdentifier("cwa", siteID)
        if columns:
            req.setParameters(columns)

        retGeoms = DataAccessLayer.getGeometryData(req)

        retDict = {}
        for retGeom in retGeoms:
            id = retGeom.getLocationName()
            if id:
                poly = self._extract_poly_coords(retGeom.getGeometry())
                formattedPoly = [list(c) for c in poly['exterior_coords']]
                retDict[id] = formattedPoly

        return retDict
Пример #17
0
 def runConstraintTest(self, key, operator, value):
     req = DAL.newDataRequest(self.datatype)
     constraint = RequestConstraint.new(operator, value)
     req.addIdentifier(key, constraint)
     req.setParameters(*self.parameterList)
     # Don't test shapes since they may differ.
     return self.runGridDataTest(req, testSameShape=False)
Пример #18
0
 def _runConstraintTest(self, key, operator, value):
     req = DAL.newDataRequest(self.datatype)
     constraint = RequestConstraint.new(operator, value)
     req.addIdentifier(key, constraint)
     req.addIdentifier('wfo', params.SITE_ID)
     req.addIdentifier('huc', 'ALL')
     req.setParameters('QPFSCAN')
     return self.runGeometryDataTest(req, checkDataTimes=False)
Пример #19
0
 def testGetGeometryDataWithEnvelope(self):
     req = DAL.newDataRequest(self.datatype)
     req.setParameters("temperature", "windSpeed", "hazardType", "turbType")
     req.setEnvelope(params.ENVELOPE)
     print("Testing getGeometryData()")
     data = DAL.getGeometryData(req)
     for item in data:
         self.assertTrue(params.ENVELOPE.contains(item.getGeometry()))
Пример #20
0
 def testGetGuidanceDataWithoutAccumHrsIdentifierSet(self):
     # Test that accumHrs identifier is not required for guidance data
     req = DAL.newDataRequest(self.datatype)
     req.addIdentifier('wfo', params.SITE_ID)
     req.addIdentifier('siteKey', self.location)
     req.addIdentifier('huc', 'ALL')
     req.setParameters('FFG0124hr')
     self.runGeometryDataTest(req, checkDataTimes=False)
Пример #21
0
 def _runConstraintTest(self, key, operator, value):
     req = DAL.newDataRequest(self.datatype)
     constraint = RequestConstraint.new(operator, value)
     req.addIdentifier(key, constraint)
     req.addIdentifier('table', 'height')
     req.addIdentifier('ts', 'RG')
     req.setParameters('value', 'lid', 'quality_code')
     return self.runGeometryDataTest(req)
Пример #22
0
def __cloneRequest(request):
    return DataAccessLayer.newDataRequest(
        datatype=request.getDatatype(),
        parameters=request.getParameters(),
        levels=request.getLevels(),
        locationNames=request.getLocationNames(),
        envelope=request.getEnvelope(),
        **request.getIdentifiers())
Пример #23
0
 def testGetGeometryDataInvalidParamRaisesIncompatibleRequestException(
         self):
     req = DAL.newDataRequest(self.datatype)
     req.addIdentifier("source", "NLDN")
     req.setParameters('blahblahblah')
     with self.assertRaises(ThriftRequestException) as cm:
         self.runGeometryDataTest(req)
     self.assertIn('IncompatibleRequestException', str(cm.exception))
Пример #24
0
 def testGetGeometryDataWithEnvelope(self):
     req = DAL.newDataRequest(self.datatype)
     req.addIdentifier(self.siteIdKey, params.SITE_ID)
     req.setEnvelope(params.ENVELOPE)
     data = self.runGeometryDataTest(req)
     for item in data:
         self.assertEqual(params.SITE_ID, item.getAttribute(self.siteIdKey))
         self.assertTrue(params.ENVELOPE.intersects(item.getGeometry()))
Пример #25
0
 def testGetGridData(self):
     req = DAL.newDataRequest(self.datatype)
     req.addIdentifier('parmId.dbId.modelName', 'Fcst')
     req.addIdentifier('parmId.dbId.siteId', params.SITE_ID)
     req.setParameters('T')
     gridDatas = self.runGridDataTest(req)
     for gridData in gridDatas:
         self.assertEqual(gridData.getAttribute('parmId.dbId.dbType'), '')
Пример #26
0
 def testGetGeometryDataWithEnvelopeThrowsException(self):
     # Envelope is not used
     req = DAL.newDataRequest(self.datatype)
     req.addIdentifier('table', 'public.cli_asos_monthly')
     req.setParameters('maxtemp_mon', 'min_sea_press')
     req.setEnvelope(params.ENVELOPE)
     with self.assertRaises(Exception):
         data = self.runGeometryDataTest(req)
Пример #27
0
 def testGetGeometryDataWithLocNamesAndGroupsThrowException(self):
     req = DAL.newDataRequest(self.datatype)
     req.addIdentifier(self.siteIdKey, params.SITE_ID)
     req.setLocationNames(*self.editAreaNames)
     req.addIdentifier(self.groupKey,
                       RequestConstraint.new('in', self.groups))
     with self.assertRaises(ThriftRequestException):
         self.runGeometryDataTest(req)
Пример #28
0
 def testGetGeometryDataWithLocNames(self):
     req = DAL.newDataRequest(self.datatype)
     req.addIdentifier(self.siteIdKey, params.SITE_ID)
     req.setLocationNames(*self.editAreaNames)
     data = self.runGeometryDataTest(req)
     for item in data:
         self.assertEqual(params.SITE_ID, item.getAttribute(self.siteIdKey))
         self.assertIn(item.getLocationName(), self.editAreaNames)
Пример #29
0
 def testFilterOnInvalidLocationThrowsIncompatibleRequestException(self):
     req = DAL.newDataRequest()
     req.setDatatype(self.datatype)
     req.setParameters('id')
     req.setLocationNames(') and 0=1')
     with self.assertRaises(Exception) as cm:
         DAL.getGeometryData(req)
     self.assertIn('IncompatibleRequestException', str(cm.exception))
Пример #30
0
 def _runConstraintTest(self, key, operator, value):
     req = DAL.newDataRequest(self.datatype)
     req.addIdentifier('table', 'mapdata.ffmp_basins')
     req.addIdentifier('geomField', 'the_geom')
     req.addIdentifier('cwa', 'OAX')
     constraint = RequestConstraint.new(operator, value)
     req.addIdentifier(key, constraint)
     req.setParameters('state', 'reservoir', 'area_sq_mi')
     return self.runGeometryDataTest(req, checkDataTimes=False)
Пример #31
0
from matplotlib.transforms import offset_copy
#import cartopy.crs as ccrs
#import cartopy.io.img_tiles as cimgt
from mpl_toolkits.basemap import Basemap, cm
# requires netcdf4-python (netcdf4-python.googlecode.com)
#from netCDF4 import Dataset as NetCDFFile
import numpy as np
from numpy import linspace
from numpy import meshgrid
import matplotlib.pyplot as plt

DataAccessLayer.changeEDEXHost("edex.unidata.ucar.edu")
gridTimeIndex = -1

# EDEX Data Access Framework
request = DataAccessLayer.newDataRequest()
request.setDatatype("maps")
request.setParameters("cwa","wfo")
request.addIdentifier("locationField","wfo")
request.addIdentifier("geomField","the_geom")
request.addIdentifier("table","mapdata.cwa")
request.setLocationNames("BOU")
response = DataAccessLayer.getGeometryData(request, None)

# Now set area
request = DataAccessLayer.newDataRequest()
request.setEnvelope(response[0].getGeometry())

# Now query grid
request.setDatatype("grid")
request.setLocationNames("HRRR")