Source code for awips.dataaccess.CombinedTimeQuery

#
# Method for performing a DAF time query where all parameter/level/location
# combinations must be available at the same time.
#
#
#
#     SOFTWARE HISTORY
#
#    Date            Ticket#       Engineer       Description
#    ------------    ----------    -----------    --------------------------
#    06/22/16         #5591        bsteffen       Initial Creation.
#

from awips.dataaccess import DataAccessLayer


[docs]def getAvailableTimes(request, refTimeOnly=False): return __getAvailableTimesForEachParameter(request, refTimeOnly)
def __getAvailableTimesForEachParameter(request, refTimeOnly=False): parameters = request.getParameters() if parameters: times = None for parameter in parameters: specificRequest = __cloneRequest(request) specificRequest.setParameters(parameter) specificTimes = __getAvailableTimesForEachLevel(specificRequest, refTimeOnly) if times is None: times = specificTimes else: times.intersection_update(specificTimes) if not times: break return times else: return __getAvailableTimesForEachLevel(request, refTimeOnly) def __getAvailableTimesForEachLevel(request, refTimeOnly=False): levels = request.getLevels() if levels: times = None for level in levels: specificRequest = __cloneRequest(request) specificRequest.setLevels(level) specificTimes = __getAvailableTimesForEachLocation(specificRequest, refTimeOnly) if times is None: times = specificTimes else: times.intersection_update(specificTimes) if not times: break return times else: return __getAvailableTimesForEachLocation(request, refTimeOnly) def __getAvailableTimesForEachLocation(request, refTimeOnly=False): locations = request.getLocationNames() if locations: times = None for location in locations: specificRequest = __cloneRequest(request) specificRequest.setLocationNames(location) specificTimes = DataAccessLayer.getAvailableTimes(specificRequest, refTimeOnly) if times is None: times = set(specificTimes) else: times.intersection_update(specificTimes) if not times: break return times else: return DataAccessLayer.getAvailableTimes(request, refTimeOnly) def __cloneRequest(request): return DataAccessLayer.newDataRequest(datatype=request.getDatatype(), parameters=request.getParameters(), levels=request.getLevels(), locationNames=request.getLocationNames(), envelope=request.getEnvelope(), **request.getIdentifiers())