ntquach closed pull request #10: SDAP-43 Update datainbounds algorithm to 
handle multiple time steps p?
URL: https://github.com/apache/incubator-sdap-nexus/pull/10
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/analysis/webservice/algorithms/DataInBoundsSearch.py 
b/analysis/webservice/algorithms/DataInBoundsSearch.py
index 2942649..80f0416 100644
--- a/analysis/webservice/algorithms/DataInBoundsSearch.py
+++ b/analysis/webservice/algorithms/DataInBoundsSearch.py
@@ -46,7 +46,7 @@ class DataInBoundsSearchHandlerImpl(NexusHandler):
             "name": "Bounding box",
             "type": "comma-delimited float",
             "description": "Minimum (Western) Longitude, Minimum (Southern) 
Latitude, "
-                           "Maximum (Eastern) Longitude, Maximum (Northern) 
Latitude. Required"
+                           "Maximum (Eastern) Longitude, Maximum (Northern) 
Latitude. Required if 'metadataFilter' not provided"
         },
         "startTime": {
             "name": "Start Time",
@@ -57,6 +57,11 @@ class DataInBoundsSearchHandlerImpl(NexusHandler):
             "name": "End Time",
             "type": "string",
             "description": "Ending time in format YYYY-MM-DDTHH:mm:ssZ or 
seconds since EPOCH. Required"
+        },
+        "metadataFilter": {
+            "name": "Metadata Filter",
+            "type": "string",
+            "description": "Filter in format key:value. Required if 'b' not 
provided"
         }
     }
     singleton = True
@@ -100,27 +105,36 @@ def parse_arguments(self, request):
                     request.get_start_datetime().strftime(ISO_8601), 
request.get_end_datetime().strftime(ISO_8601)),
                 code=400)
 
+        bounding_polygon = metadata_filter = None
         try:
             bounding_polygon = request.get_bounding_polygon()
         except:
-            raise NexusProcessingException(
-                reason="'b' argument is required. Must be comma-delimited 
float formatted as Minimum (Western) Longitude, Minimum (Southern) Latitude, 
Maximum (Eastern) Longitude, Maximum (Northern) Latitude",
-                code=400)
+            metadata_filter = request.get_metadata_filter()
+            if 0 == len(metadata_filter):
+                raise NexusProcessingException(
+                    reason="'b' or 'metadataFilter' argument is required. 'b' 
must be comma-delimited float formatted "
+                           "as Minimum (Western) Longitude, Minimum (Southern) 
Latitude, Maximum (Eastern) Longitude, "
+                           "Maximum (Northern) Latitude. 'metadataFilter' must 
be in the form key:value",
+                    code=400)
 
-        return ds, parameter_s, start_time, end_time, bounding_polygon
+        return ds, parameter_s, start_time, end_time, bounding_polygon, 
metadata_filter
 
     def calc(self, computeOptions, **args):
-        ds, parameter, start_time, end_time, bounding_polygon = 
self.parse_arguments(computeOptions)
+        ds, parameter, start_time, end_time, bounding_polygon, metadata_filter 
= self.parse_arguments(computeOptions)
 
         includemeta = computeOptions.get_include_meta()
 
-        min_lat = bounding_polygon.bounds[1]
-        max_lat = bounding_polygon.bounds[3]
-        min_lon = bounding_polygon.bounds[0]
-        max_lon = bounding_polygon.bounds[2]
+        min_lat = max_lat = min_lon = max_lon = None
+        if bounding_polygon:
+            min_lat = bounding_polygon.bounds[1]
+            max_lat = bounding_polygon.bounds[3]
+            min_lon = bounding_polygon.bounds[0]
+            max_lon = bounding_polygon.bounds[2]
 
-        tiles = self._tile_service.get_tiles_bounded_by_box(min_lat, max_lat, 
min_lon, max_lon, ds, start_time,
-                                                            end_time)
+            tiles = self._tile_service.get_tiles_bounded_by_box(min_lat, 
max_lat, min_lon, max_lon, ds, start_time,
+                                                                end_time)
+        else:
+            tiles = self._tile_service.get_tiles_by_metadata(metadata_filter, 
ds, start_time, end_time)
 
         data = []
         for tile in tiles:
@@ -148,7 +162,7 @@ def calc(self, computeOptions, **args):
                     except (KeyError, IndexError):
                         pass
                 else:
-                    pass
+                    point['variable'] = nexus_point.data_val
 
                 data.append({
                     'latitude': nexus_point.latitude,
diff --git a/analysis/webservice/webmodel.py b/analysis/webservice/webmodel.py
index 3f01eac..e75ac01 100644
--- a/analysis/webservice/webmodel.py
+++ b/analysis/webservice/webmodel.py
@@ -51,6 +51,7 @@ class RequestParameters(object):
     PLOT_SERIES = "plotSeries"
     PLOT_TYPE = "plotType"
     SPARK_CFG = "spark"
+    METADATA_FILTER = "metadataFilter"
 
 
 class StandardNexusErrors:
@@ -246,6 +247,9 @@ def get_dataset(self):
         else:
             return ds.split(",")
 
+    def get_metadata_filter(self):
+        return 
self.requestHandler.get_arguments(RequestParameters.METADATA_FILTER)
+
     def get_environment(self):
         env = self.get_argument(RequestParameters.ENVIRONMENT, None)
         if env is None and "Origin" in self.requestHandler.request.headers:


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


With regards,
Apache Git Services

Reply via email to