Issues (227)

awips/dataaccess/CombinedTimeQuery.py (3 issues)

1
#
2
# Method for performing a DAF time query where all parameter/level/location
3
# combinations must be available at the same time.
4
#
5
#
6
#
7
#     SOFTWARE HISTORY
8
#
9
#    Date            Ticket#       Engineer       Description
10
#    ------------    ----------    -----------    --------------------------
11
#    06/22/16         #5591        bsteffen       Initial Creation.
12
#
13
14
from awips.dataaccess import DataAccessLayer
15
16
17
def getAvailableTimes(request, refTimeOnly=False):
18
    return __getAvailableTimesForEachParameter(request, refTimeOnly)
19
20
21 View Code Duplication
def __getAvailableTimesForEachParameter(request, refTimeOnly=False):
0 ignored issues
show
This code seems to be duplicated in your project.
Loading history...
22
    parameters = request.getParameters()
23
    if parameters:
24
        times = None
25
        for parameter in parameters:
26
            specificRequest = __cloneRequest(request)
27
            specificRequest.setParameters(parameter)
28
            specificTimes = __getAvailableTimesForEachLevel(specificRequest, refTimeOnly)
29
            if times is None:
30
                times = specificTimes
31
            else:
32
                times.intersection_update(specificTimes)
33
            if not times:
34
                break
35
        return times
36
    else:
37
        return __getAvailableTimesForEachLevel(request, refTimeOnly)
38
39
40 View Code Duplication
def __getAvailableTimesForEachLevel(request, refTimeOnly=False):
0 ignored issues
show
This code seems to be duplicated in your project.
Loading history...
41
    levels = request.getLevels()
42
    if levels:
43
        times = None
44
        for level in levels:
45
            specificRequest = __cloneRequest(request)
46
            specificRequest.setLevels(level)
47
            specificTimes = __getAvailableTimesForEachLocation(specificRequest, refTimeOnly)
48
            if times is None:
49
                times = specificTimes
50
            else:
51
                times.intersection_update(specificTimes)
52
            if not times:
53
                break
54
        return times
55
    else:
56
        return __getAvailableTimesForEachLocation(request, refTimeOnly)
57
58
59 View Code Duplication
def __getAvailableTimesForEachLocation(request, refTimeOnly=False):
0 ignored issues
show
This code seems to be duplicated in your project.
Loading history...
60
    locations = request.getLocationNames()
61
    if locations:
62
        times = None
63
        for location in locations:
64
            specificRequest = __cloneRequest(request)
65
            specificRequest.setLocationNames(location)
66
            specificTimes = DataAccessLayer.getAvailableTimes(specificRequest, refTimeOnly)
67
            if times is None:
68
                times = set(specificTimes)
69
            else:
70
                times.intersection_update(specificTimes)
71
            if not times:
72
                break
73
        return times
74
    else:
75
        return DataAccessLayer.getAvailableTimes(request, refTimeOnly)
76
77
78
def __cloneRequest(request):
79
    return DataAccessLayer.newDataRequest(datatype=request.getDatatype(),
80
                                          parameters=request.getParameters(),
81
                                          levels=request.getLevels(),
82
                                          locationNames=request.getLocationNames(),
83
                                          envelope=request.getEnvelope(),
84
                                          **request.getIdentifiers())
85