You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sdap.apache.org by fg...@apache.org on 2019/01/23 17:56:25 UTC
[incubator-sdap-ningesterpy] 02/29: updated ningester to expect a
NexusTile as JSON as input_data instead of a string
This is an automated email from the ASF dual-hosted git repository.
fgreg pushed a commit to branch v1.0.0-rc1
in repository https://gitbox.apache.org/repos/asf/incubator-sdap-ningesterpy.git
commit db43567d9bb7457a7c3b5f561a5dafedd21bfca8
Author: Frank Greguska <fr...@jpl.nasa.gov>
AuthorDate: Thu Jan 4 09:58:24 2018 -0800
updated ningester to expect a NexusTile as JSON as input_data instead of a string
---
ningesterpy/ningesterpy.py | 6 +-
ningesterpy/processors/__init__.py | 3 +-
ningesterpy/processors/emptytilefilter.py | 4 +-
ningesterpy/processors/tilereadingprocessor.py | 59 ++++------
tests/processorchain_test.py | 52 +++++++--
tests/tilereadingprocessor_test.py | 156 ++++++++++---------------
6 files changed, 139 insertions(+), 141 deletions(-)
diff --git a/ningesterpy/ningesterpy.py b/ningesterpy/ningesterpy.py
index e9c4fde..7c25c61 100644
--- a/ningesterpy/ningesterpy.py
+++ b/ningesterpy/ningesterpy.py
@@ -6,6 +6,7 @@ from flask import Flask, request, jsonify, Response
from flask.json import JSONEncoder
from flask_accept import accept
from google.protobuf import json_format
+from google.protobuf.json_format import ParseError
from werkzeug.exceptions import HTTPException, BadRequest
from werkzeug.exceptions import default_exceptions
@@ -50,7 +51,10 @@ def run_processor_chain():
raise BadRequest(
"%s missing required configuration options: %s" % (e.processor, e.missing_processor_args)) from e
- input_data = parameters['input_data']
+ try:
+ input_data = json_format.Parse(parameters['input_data'], nexusproto.NexusTile)
+ except ParseError as e:
+ raise BadRequest("input_data must be a NexusTile protobuf serialized as a string") from e
result = next(chain.process(input_data), None)
diff --git a/ningesterpy/processors/__init__.py b/ningesterpy/processors/__init__.py
index 5bb9094..950c3b1 100644
--- a/ningesterpy/processors/__init__.py
+++ b/ningesterpy/processors/__init__.py
@@ -35,6 +35,7 @@ class NexusTileProcessor(Processor):
def process_nexus_tile(self, nexus_tile):
raise NotImplementedError
+
# All installed processors need to be imported and added to the dict below
from processors.callncpdq import CallNcpdq
@@ -63,4 +64,4 @@ INSTALLED_PROCESSORS = {
"TimeSeriesReadingProcessor": TimeSeriesReadingProcessor,
"TileSummarizingProcessor": TileSummarizingProcessor,
"WindDirSpeedToUV": WindDirSpeedToUV
-}
\ No newline at end of file
+}
diff --git a/ningesterpy/processors/emptytilefilter.py b/ningesterpy/processors/emptytilefilter.py
index ec30d2e..796af2c 100644
--- a/ningesterpy/processors/emptytilefilter.py
+++ b/ningesterpy/processors/emptytilefilter.py
@@ -2,15 +2,17 @@
Copyright (c) 2017 Jet Propulsion Laboratory,
California Institute of Technology. All rights reserved
"""
+import logging
+
import nexusproto.NexusContent_pb2 as nexusproto
import numpy
-import logging
from nexusproto.serialization import from_shaped_array
from processors import NexusTileProcessor
logger = logging.getLogger('emptytilefilter')
+
def parse_input(nexus_tile_data):
return nexusproto.NexusTile.FromString(nexus_tile_data)
diff --git a/ningesterpy/processors/tilereadingprocessor.py b/ningesterpy/processors/tilereadingprocessor.py
index de63634..cba3e2f 100644
--- a/ningesterpy/processors/tilereadingprocessor.py
+++ b/ningesterpy/processors/tilereadingprocessor.py
@@ -14,7 +14,7 @@ from netCDF4 import Dataset, num2date
from nexusproto.serialization import to_shaped_array, to_metadata
from pytz import timezone
-from processors import Processor
+from processors import Processor, NexusTileProcessor
EPOCH = timezone('UTC').localize(datetime.datetime(1970, 1, 1))
@@ -27,18 +27,13 @@ def closing(thing):
thing.close()
-def parse_input(the_input, temp_dir):
- # Split string on ';'
- specs_and_path = [str(part).strip() for part in str(the_input).split(';')]
-
- # Tile specifications are all but the last element
- specs = specs_and_path[:-1]
+def parse_input(the_input_tile, temp_dir):
+ specs = [the_input_tile.summary.section_spec]
# Generate a list of tuples, where each tuple is a (string, map) that represents a
# tile spec in the form (str(section_spec), { dimension_name : slice, dimension2_name : slice })
tile_specifications = [slices_from_spec(section_spec) for section_spec in specs]
- # The path is the last element of the input split by ';'
- file_path = specs_and_path[-1]
+ file_path = the_input_tile.summary.granule
file_name = file_path.split(sep)[-1]
# If given a temporary directory location, copy the file to the temporary directory and return that path
if temp_dir is not None:
@@ -51,7 +46,7 @@ def parse_input(the_input, temp_dir):
file_path = temp_file_path
# Remove file:// if it's there because netcdf lib doesn't like it
- file_path = file_path[len('file://'):] if file_path.startswith('file://') else file_path
+ file_path = file_path[len('file:'):] if file_path.startswith('file:') else file_path
return tile_specifications, file_path
@@ -92,16 +87,8 @@ def get_ordered_slices(ds, variable, dimension_to_slice):
return ordered_slices
-def new_nexus_tile(file_path, section_spec):
- nexus_tile = nexusproto.NexusTile()
- tile_summary = nexusproto.TileSummary()
- tile_summary.granule = file_path.split(sep)[-1]
- tile_summary.section_spec = section_spec
- nexus_tile.summary.CopyFrom(tile_summary)
- return nexus_tile
-
+class TileReadingProcessor(NexusTileProcessor):
-class TileReadingProcessor(Processor):
def __init__(self, variable_to_read, latitude, longitude, *args, **kwargs):
super().__init__(*args, **kwargs)
# Required properties for all reader types
@@ -116,22 +103,25 @@ class TileReadingProcessor(Processor):
self.start_of_day_pattern = self.environ['GLBLATTR_DAY_FORMAT']
self.time_offset = int(self.environ['TIME_OFFSET']) if self.environ['TIME_OFFSET'] is not None else None
- def process(self, input_data):
- tile_specifications, file_path = parse_input(input_data, self.temp_dir)
+ def process_nexus_tile(self, input_tile):
+ tile_specifications, file_path = parse_input(input_tile, self.temp_dir)
+
+ output_tile = nexusproto.NexusTile()
+ output_tile.CopyFrom(input_tile)
- for data in self.read_data(tile_specifications, file_path):
- yield data
+ for tile in self.read_data(tile_specifications, file_path, output_tile):
+ yield tile
# If temp dir is defined, delete the temporary file
if self.temp_dir is not None:
remove(file_path)
- def read_data(self, tile_specifications, file_path):
+ def read_data(self, tile_specifications, file_path, output_tile):
raise NotImplementedError
class GridReadingProcessor(TileReadingProcessor):
- def read_data(self, tile_specifications, file_path):
+ def read_data(self, tile_specifications, file_path, output_tile):
# Time is optional for Grid data
time = self.environ['TIME']
@@ -164,10 +154,9 @@ class GridReadingProcessor(TileReadingProcessor):
timeunits=timevar.getncattr('units'),
timeoffset=self.time_offset)
- nexus_tile = new_nexus_tile(file_path, section_spec)
- nexus_tile.tile.grid_tile.CopyFrom(tile)
+ output_tile.tile.grid_tile.CopyFrom(tile)
- yield nexus_tile
+ yield output_tile
class SwathReadingProcessor(TileReadingProcessor):
@@ -177,7 +166,7 @@ class SwathReadingProcessor(TileReadingProcessor):
# Time is required for swath data
self.time = time
- def read_data(self, tile_specifications, file_path):
+ def read_data(self, tile_specifications, file_path, output_tile):
with Dataset(file_path) as ds:
for section_spec, dimtoslice in tile_specifications:
tile = nexusproto.SwathTile()
@@ -215,10 +204,9 @@ class SwathReadingProcessor(TileReadingProcessor):
tile.meta_data.add().CopyFrom(
to_metadata(self.metadata, ds[self.metadata][tuple(ordered_slices.values())]))
- nexus_tile = new_nexus_tile(file_path, section_spec)
- nexus_tile.tile.swath_tile.CopyFrom(tile)
+ output_tile.tile.swath_tile.CopyFrom(tile)
- yield nexus_tile
+ yield output_tile
class TimeSeriesReadingProcessor(TileReadingProcessor):
@@ -228,7 +216,7 @@ class TimeSeriesReadingProcessor(TileReadingProcessor):
# Time is required for swath data
self.time = time
- def read_data(self, tile_specifications, file_path):
+ def read_data(self, tile_specifications, file_path, output_tile):
with Dataset(file_path) as ds:
for section_spec, dimtoslice in tile_specifications:
tile = nexusproto.TimeSeriesTile()
@@ -260,7 +248,6 @@ class TimeSeriesReadingProcessor(TileReadingProcessor):
timeunits=timevar.getncattr('units'),
timeoffset=self.time_offset)
- nexus_tile = new_nexus_tile(file_path, section_spec)
- nexus_tile.tile.time_series_tile.CopyFrom(tile)
+ output_tile.tile.time_series_tile.CopyFrom(tile)
- yield nexus_tile
+ yield output_tile
diff --git a/tests/processorchain_test.py b/tests/processorchain_test.py
index 3563a1b..08330e2 100644
--- a/tests/processorchain_test.py
+++ b/tests/processorchain_test.py
@@ -5,6 +5,8 @@ California Institute of Technology. All rights reserved
import unittest
from os import path
+from nexusproto import NexusContent_pb2 as nexusproto
+
from processors.processorchain import ProcessorChain
@@ -22,7 +24,13 @@ class TestRunChainMethod(unittest.TestCase):
test_file = path.join(path.dirname(__file__), 'datafiles', 'empty_mur.nc4')
- gen = processorchain.process("time:0:1,lat:0:1,lon:0:1;time:0:1,lat:1:2,lon:0:1;file://%s" % test_file)
+ input_tile = nexusproto.NexusTile()
+ tile_summary = nexusproto.TileSummary()
+ tile_summary.granule = "file:%s" % test_file
+ tile_summary.section_spec = "time:0:1,lat:0:10,lon:0:10"
+ input_tile.summary.CopyFrom(tile_summary)
+
+ gen = processorchain.process(input_tile)
for message in gen:
self.fail("Should not produce any messages. Message: %s" % message)
@@ -39,10 +47,15 @@ class TestRunChainMethod(unittest.TestCase):
test_file = path.join(path.dirname(__file__), 'datafiles', 'not_empty_mur.nc4')
- results = list(
- processorchain.process("time:0:1,lat:0:1,lon:0:1;time:0:1,lat:1:2,lon:0:1;file://%s" % test_file))
+ input_tile = nexusproto.NexusTile()
+ tile_summary = nexusproto.TileSummary()
+ tile_summary.granule = "file:%s" % test_file
+ tile_summary.section_spec = "time:0:1,lat:0:10,lon:0:10"
+ input_tile.summary.CopyFrom(tile_summary)
+
+ results = list(processorchain.process(input_tile))
- self.assertEqual(2, len(results))
+ self.assertEqual(1, len(results))
def test_run_chain_read_filter_kelvin_summarize(self):
processor_list = [
@@ -59,10 +72,15 @@ class TestRunChainMethod(unittest.TestCase):
test_file = path.join(path.dirname(__file__), 'datafiles', 'not_empty_mur.nc4')
- results = list(
- processorchain.process("time:0:1,lat:0:1,lon:0:1;time:0:1,lat:1:2,lon:0:1;file://%s" % test_file))
+ input_tile = nexusproto.NexusTile()
+ tile_summary = nexusproto.TileSummary()
+ tile_summary.granule = "file:%s" % test_file
+ tile_summary.section_spec = "time:0:1,lat:0:10,lon:0:10"
+ input_tile.summary.CopyFrom(tile_summary)
+
+ results = list(processorchain.process(input_tile))
- self.assertEqual(2, len(results))
+ self.assertEqual(1, len(results))
def test_run_chain_partial_empty(self):
processor_list = [
@@ -79,14 +97,28 @@ class TestRunChainMethod(unittest.TestCase):
test_file = path.join(path.dirname(__file__), 'datafiles', 'partial_empty_mur.nc4')
- results = list(
- processorchain.process("time:0:1,lat:0:10,lon:0:10;time:0:1,lat:489:499,lon:0:10;file://%s" % test_file))
+ input_tile = nexusproto.NexusTile()
+ tile_summary = nexusproto.TileSummary()
+ tile_summary.granule = "file:%s" % test_file
+ tile_summary.section_spec = "time:0:1,lat:489:499,lon:0:10"
+ input_tile.summary.CopyFrom(tile_summary)
+
+ results = list(processorchain.process(input_tile))
self.assertEqual(1, len(results))
tile = results[0]
-
self.assertTrue(tile.summary.HasField('bbox'), "bbox is missing")
+ input_tile = nexusproto.NexusTile()
+ tile_summary = nexusproto.TileSummary()
+ tile_summary.granule = "file:%s" % test_file
+ tile_summary.section_spec = "time:0:1,lat:0:10,lon:0:10"
+ input_tile.summary.CopyFrom(tile_summary)
+
+ results = list(processorchain.process(input_tile))
+
+ self.assertEqual(0, len(results))
+
if __name__ == '__main__':
unittest.main()
diff --git a/tests/tilereadingprocessor_test.py b/tests/tilereadingprocessor_test.py
index 2d69bbe..ca29dc8 100644
--- a/tests/tilereadingprocessor_test.py
+++ b/tests/tilereadingprocessor_test.py
@@ -7,52 +7,11 @@ from os import path
import numpy as np
from nexusproto.serialization import from_shaped_array
+from nexusproto import NexusContent_pb2 as nexusproto
import processors
-class TestSummaryData(unittest.TestCase):
- def setUp(self):
-
- self.module = processors.GridReadingProcessor('analysed_sst', 'lat', 'lon', time='time')
-
- def test_summary_exists(self):
- test_file = path.join(path.dirname(__file__), 'datafiles', 'empty_mur.nc4')
-
- results = list(
- self.module.process("time:0:1,lat:0:10,lon:0:10;time:0:1,lat:10:20,lon:0:10;file://%s" % test_file))
-
- self.assertEqual(2, len(results))
-
- for nexus_tile in results:
- self.assertTrue(nexus_tile.HasField('summary'))
-
- def test_section_spec_set(self):
- test_file = path.join(path.dirname(__file__), 'datafiles', 'empty_mur.nc4')
-
- results = list(
- self.module.process("time:0:1,lat:0:10,lon:0:10;time:0:1,lat:10:20,lon:0:10;file://%s" % test_file))
-
- self.assertEqual(2, len(results))
-
- # Tests for the first tile
- self.assertEqual('time:0:1,lat:0:10,lon:0:10', results[0].summary.section_spec)
-
- # Tests for the second tile
- self.assertEqual('time:0:1,lat:10:20,lon:0:10', results[1].summary.section_spec)
-
- def test_granule_set(self):
- test_file = path.join(path.dirname(__file__), 'datafiles', 'empty_mur.nc4')
-
- results = list(
- self.module.process("time:0:1,lat:0:10,lon:0:10;time:0:1,lat:10:20,lon:0:10;file://%s" % test_file))
-
- self.assertEqual(2, len(results))
-
- for nexus_tile in results:
- self.assertEqual('empty_mur.nc4', nexus_tile.summary.granule)
-
-
class TestReadMurData(unittest.TestCase):
def setUp(self):
self.module = processors.GridReadingProcessor('analysed_sst', 'lat', 'lon', time='time')
@@ -60,10 +19,15 @@ class TestReadMurData(unittest.TestCase):
def test_read_empty_mur(self):
test_file = path.join(path.dirname(__file__), 'datafiles', 'empty_mur.nc4')
- results = list(
- self.module.process("time:0:1,lat:0:10,lon:0:10;time:0:1,lat:10:20,lon:0:10;file://%s" % test_file))
+ input_tile = nexusproto.NexusTile()
+ tile_summary = nexusproto.TileSummary()
+ tile_summary.granule = "file:%s" % test_file
+ tile_summary.section_spec = "time:0:1,lat:0:10,lon:0:10"
+ input_tile.summary.CopyFrom(tile_summary)
+
+ results = list(self.module.process(input_tile))
- self.assertEqual(2, len(results))
+ self.assertEqual(1, len(results))
for nexus_tile in results:
self.assertTrue(nexus_tile.HasField('tile'))
@@ -81,26 +45,22 @@ class TestReadMurData(unittest.TestCase):
def test_read_not_empty_mur(self):
test_file = path.join(path.dirname(__file__), 'datafiles', 'not_empty_mur.nc4')
- results = list(
- self.module.process("time:0:1,lat:0:10,lon:0:10;time:0:1,lat:10:20,lon:0:10;file://%s" % test_file))
+ input_tile = nexusproto.NexusTile()
+ tile_summary = nexusproto.TileSummary()
+ tile_summary.granule = "file:%s" % test_file
+ tile_summary.section_spec = "time:0:1,lat:0:10,lon:0:10"
+ input_tile.summary.CopyFrom(tile_summary)
+
+ results = list(self.module.process(input_tile))
- self.assertEqual(2, len(results))
+ self.assertEqual(1, len(results))
tile1_data = np.ma.masked_invalid(from_shaped_array(results[0].tile.grid_tile.variable_data))
self.assertEqual((1, 10, 10), tile1_data.shape)
self.assertEqual(100, np.ma.count(tile1_data))
- tile2_data = np.ma.masked_invalid(from_shaped_array(results[1].tile.grid_tile.variable_data))
- self.assertEqual((1, 10, 10), tile2_data.shape)
- self.assertEqual(100, np.ma.count(tile2_data))
-
- self.assertFalse(np.allclose(tile1_data, tile2_data, equal_nan=True), "Both tiles contain identical data")
-
class TestReadAscatbData(unittest.TestCase):
- def setUp(self):
- self.module = processors.SwathReadingProcessor('wind_speed', 'lat', 'lon', time='time')
-
# for data in read_swath_data(None,
# "NUMROWS:0:1,NUMCELLS:0:5;NUMROWS:1:2,NUMCELLS:0:5;file:///Users/greguska/data/ascat/ascat_20130314_004801_metopb_02520_eps_o_coa_2101_ovw.l2.nc"):
# import sys
@@ -113,10 +73,15 @@ class TestReadAscatbData(unittest.TestCase):
swath_reader = processors.SwathReadingProcessor('wind_speed', 'lat', 'lon', time='time')
- results = list(
- swath_reader.process("NUMROWS:0:1,NUMCELLS:0:82;NUMROWS:1:2,NUMCELLS:0:82;file://%s" % test_file))
+ input_tile = nexusproto.NexusTile()
+ tile_summary = nexusproto.TileSummary()
+ tile_summary.granule = "file:%s" % test_file
+ tile_summary.section_spec = "NUMROWS:0:1,NUMCELLS:0:82"
+ input_tile.summary.CopyFrom(tile_summary)
+
+ results = list(swath_reader.process(input_tile))
- self.assertEqual(2, len(results))
+ self.assertEqual(1, len(results))
for nexus_tile in results:
self.assertTrue(nexus_tile.HasField('tile'))
@@ -131,12 +96,6 @@ class TestReadAscatbData(unittest.TestCase):
self.assertEqual((1, 82), tile1_data.shape)
self.assertEqual(82, np.ma.count(tile1_data))
- tile2_data = np.ma.masked_invalid(from_shaped_array(results[1].tile.swath_tile.variable_data))
- self.assertEqual((1, 82), tile2_data.shape)
- self.assertEqual(82, np.ma.count(tile2_data))
-
- self.assertFalse(np.allclose(tile1_data, tile2_data, equal_nan=True), "Both tiles contain identical data")
-
def test_read_not_empty_ascatb_meta(self):
# with open('./ascat_longitude_more_than_180.bin', 'w') as f:
# results = list(self.module.read_swath_data(None,
@@ -147,10 +106,15 @@ class TestReadAscatbData(unittest.TestCase):
swath_reader = processors.SwathReadingProcessor('wind_speed', 'lat', 'lon', time='time', meta='wind_dir')
- results = list(
- swath_reader.process("NUMROWS:0:1,NUMCELLS:0:82;NUMROWS:1:2,NUMCELLS:0:82;file://%s" % test_file))
+ input_tile = nexusproto.NexusTile()
+ tile_summary = nexusproto.TileSummary()
+ tile_summary.granule = "file:%s" % test_file
+ tile_summary.section_spec = "NUMROWS:0:1,NUMCELLS:0:82"
+ input_tile.summary.CopyFrom(tile_summary)
+
+ results = list(swath_reader.process(input_tile))
- self.assertEqual(2, len(results))
+ self.assertEqual(1, len(results))
for nexus_tile in results:
self.assertTrue(nexus_tile.HasField('tile'))
@@ -162,14 +126,6 @@ class TestReadAscatbData(unittest.TestCase):
self.assertEqual((1, 82), tile1_meta_data.shape)
self.assertEqual(82, np.ma.count(tile1_meta_data))
- self.assertEqual(1, len(results[1].tile.swath_tile.meta_data))
- tile2_meta_data = np.ma.masked_invalid(from_shaped_array(results[1].tile.swath_tile.meta_data[0].meta_data))
- self.assertEqual((1, 82), tile2_meta_data.shape)
- self.assertEqual(82, np.ma.count(tile2_meta_data))
-
- self.assertFalse(np.allclose(tile1_meta_data, tile2_meta_data, equal_nan=True),
- "Both tiles' meta contain identical data")
-
class TestReadSmapData(unittest.TestCase):
def test_read_not_empty_smap(self):
@@ -180,10 +136,15 @@ class TestReadSmapData(unittest.TestCase):
glblattr_day='REV_START_TIME',
glblattr_day_format='%Y-%jT%H:%M:%S.%f')
- results = list(swath_reader.process(
- "phony_dim_0:0:76,phony_dim_1:0:1;phony_dim_0:0:76,phony_dim_1:1:2;file://%s" % test_file))
+ input_tile = nexusproto.NexusTile()
+ tile_summary = nexusproto.TileSummary()
+ tile_summary.granule = "file:%s" % test_file
+ tile_summary.section_spec = "phony_dim_0:0:76,phony_dim_1:0:1"
+ input_tile.summary.CopyFrom(tile_summary)
- self.assertEqual(2, len(results))
+ results = list(swath_reader.process(input_tile))
+
+ self.assertEqual(1, len(results))
# with open('./smap_nonempty_nexustile.bin', 'w') as f:
# f.write(results[0])
@@ -207,12 +168,6 @@ class TestReadSmapData(unittest.TestCase):
np.ma.max(np.ma.masked_invalid(from_shaped_array(results[0].tile.swath_tile.latitude))),
places=3)
- tile2_data = np.ma.masked_invalid(from_shaped_array(results[1].tile.swath_tile.variable_data))
- self.assertEqual((76, 1), tile2_data.shape)
- self.assertEqual(43, np.ma.count(tile2_data))
-
- self.assertFalse(np.allclose(tile1_data, tile2_data, equal_nan=True), "Both tiles contain identical data")
-
self.assertEqual(1427820162, np.ma.masked_invalid(from_shaped_array(results[0].tile.swath_tile.time))[0])
@@ -223,10 +178,15 @@ class TestReadCcmpData(unittest.TestCase):
ccmp_reader = processors.GridReadingProcessor('uwnd', 'latitude', 'longitude', time='time', meta='vwnd')
- results = list(ccmp_reader.process(
- "time:0:1,longitude:0:87,latitude:0:38;time:1:2,longitude:0:87,latitude:0:38;time:2:3,longitude:0:87,latitude:0:38;time:3:4,longitude:0:87,latitude:0:38;file://%s" % test_file))
+ input_tile = nexusproto.NexusTile()
+ tile_summary = nexusproto.TileSummary()
+ tile_summary.granule = "file:%s" % test_file
+ tile_summary.section_spec = "time:0:1,longitude:0:87,latitude:0:38"
+ input_tile.summary.CopyFrom(tile_summary)
+
+ results = list(ccmp_reader.process(input_tile))
- self.assertEqual(4, len(results))
+ self.assertEqual(1, len(results))
# with open('./ccmp_nonempty_nexustile.bin', 'w') as f:
# f.write(results[0])
@@ -259,7 +219,13 @@ class TestReadAvhrrData(unittest.TestCase):
avhrr_reader = processors.GridReadingProcessor('analysed_sst', 'lat', 'lon', time='time')
- results = list(avhrr_reader.process("time:0:1,lat:0:10,lon:0:10;file://%s" % test_file))
+ input_tile = nexusproto.NexusTile()
+ tile_summary = nexusproto.TileSummary()
+ tile_summary.granule = "file:%s" % test_file
+ tile_summary.section_spec = "time:0:1,lat:0:10,lon:0:10"
+ input_tile.summary.CopyFrom(tile_summary)
+
+ results = list(avhrr_reader.process(input_tile))
self.assertEqual(1, len(results))
@@ -295,9 +261,15 @@ class TestReadWSWMData(unittest.TestCase):
wswm_reader = processors.TimeSeriesReadingProcessor('Qout', 'lat', 'lon', 'time')
- results = list(wswm_reader.process("time:0:1,rivid:0:500;time:0:1,rivid:500:1000;file://%s" % test_file))
+ input_tile = nexusproto.NexusTile()
+ tile_summary = nexusproto.TileSummary()
+ tile_summary.granule = "file:%s" % test_file
+ tile_summary.section_spec = "time:0:1,rivid:0:500"
+ input_tile.summary.CopyFrom(tile_summary)
+
+ results = list(wswm_reader.process(input_tile))
- self.assertEqual(2, len(results))
+ self.assertEqual(1, len(results))
for nexus_tile in results:
self.assertTrue(nexus_tile.HasField('tile'))