def __init__(self, response_list, nerrs_stations=None): assert isinstance(response_list, dict) if nerrs_stations is None: from pyoos.collectors.nerrs.nerrs_soap import NerrsSoap nerrs_stations = NerrsSoap().stations def get_station(feature): for s in nerrs_stations: if s['Station_Code'].lower() == feature.lower(): return s skip_tags = ["DateTimeStamp", "utcStamp", "data", "MaxWSpdT"] stations = [] for feature, response in response_list.iteritems(): if not isinstance(response, etree._Element): response = etree.fromstring(response) feature = get_station(feature) s = Station() s.uid = feature['Station_Code'] s.name = feature['Station_Name'] s.location = sPoint(float(feature['Longitude']), float(feature['Latitude']), 0) s.set_property("state", feature['State']) s.set_property("siteid", feature['NERR_Site_ID']) s.set_property("horizontal_crs", "EPSG:4326") s.set_property("vertical_units", "m") s.set_property("vertical_crs", "EPSG:4297") s.set_property("location_description", feature['Reserve_Name']) for data in response.findall(".//data"): p = Point() t = AsaTime.parse(testXMLValue(data.find("utcStamp"))) t = t.replace(tzinfo=pytz.utc) p.time = t p.location = s.location for child in data: if child.tag not in skip_tags: try: val = float(child.text) p.add_member( Member(value=val, unit=units(child.tag), name=child.tag, description=child.tag, standard=standard(child.tag))) except TypeError: # Value was None pass s.add_element(p) stations.append(s) self.feature = StationCollection(elements=stations)
class NerrTest(unittest.TestCase): def setUp(self): self.c = NerrsSoap() @pytest.mark.xfail def test_list_nerrs_features(self): # The number of features may change... just make sure we get enough assert len(self.c.list_features()) > 10 @pytest.mark.xfail def test_list_nerrs_variables(self): # The number of variables may change... just make sure we get enough assert len(self.c.list_variables()) > 10 station_vars = self.c.list_variables(feature='rkbfbwq') assert station_vars == ['Depth', 'DO_mgl', 'DO_pct', 'pH', 'Sal', 'SpCond', 'Temp', 'Turb'] @pytest.mark.xfail def test_nerrs_variable_filter(self): self.c.filter(features=['owcowmet', 'rkbfbwq']) self.c.filter(variables=["ATemp"]) raw = self.c.raw() dsg = self.c.collect() # 'rkbfbwq' does not have ATemp, so it not returned assert len(raw) == 1 assert sorted([x.uid for x in dsg.elements]) == ['owcowmet'] self.c.clear() self.c.filter(features=['owcowmet', 'rkbfbwq']) self.c.filter(variables=["ATemp", "Temp"]) raw = self.c.raw() dsg = self.c.collect() # both are returned assert len(raw) == 2 assert sorted([x.uid for x in dsg.elements]) == ['owcowmet', 'rkbfbwq'] # Must specify BBOX or Features subset for NERRS self.c.clear() self.c.filter(variables=["ATemp", "Temp"]) with pytest.raises(ValueError): self.c.raw() @pytest.mark.xfail def test_nerrs_bbox_filter(self): self.c.filter(bbox=(85.0196, 29.6079, 85.089, 29.7791)) raw = self.c.raw() dsg = self.c.collect() # Five features in the bounding box assert len(raw) == 5 assert len(dsg.elements) == 5 @pytest.mark.xfail def test_nerrs_feature_filter(self): self.c.filter(features=['owcowmet']) raw = self.c.raw() dsg = self.c.collect() assert len(raw) == 1 assert sorted([x.uid for x in dsg.elements]) == ['owcowmet'] self.c.clear() self.c.filter(features=['owcowmet', 'rkbfbwq']) raw = self.c.raw() dsg = self.c.collect() # both are returned assert len(raw) == 2 assert sorted([x.uid for x in dsg.elements]) == ['owcowmet', 'rkbfbwq'] @pytest.mark.xfail def test_nerrs_time_filter(self): self.c.filter(features=['owcowmet', 'rkbfbwq']) ending = datetime.utcnow() - timedelta(days=90) ending = ending.replace(tzinfo=pytz.utc) starting = ending - timedelta(hours=24) starting = starting.replace(tzinfo=pytz.utc) self.c.filter(start_time=starting, end_time=ending) raw = self.c.raw() dsg = self.c.collect() # both are returned assert len(raw) == 2 sorted_stations = sorted([x.uid for x in dsg.elements]) assert sorted_stations == ['owcowmet', 'rkbfbwq'] station = dsg.elements[0] station.calculate_bounds() assert sorted(station.time_range)[0] > starting - timedelta(hours=24) assert sorted(station.time_range)[0] < ending + timedelta(hours=24) assert sorted(station.time_range)[-1] > starting - timedelta(hours=24) assert sorted(station.time_range)[-1] < ending + timedelta(hours=24) @pytest.mark.xfail def test_nerrs_filter_chaining(self): # Test NERRS chaining self.c.filter(features=['owcowmet', 'rkbfbwq']).filter(variables=["ATemp"]) raw = self.c.raw() dsg = self.c.collect() # only 'owcowmet' returning assert len(raw) == 1 assert sorted([x.uid for x in dsg.elements]) == ['owcowmet'] # Test multiple filter types on one call to 'filter' self.c.clear() self.c.filter(features=['owcowmet', 'rkbfbwq'], variables=["ATemp"]) raw = self.c.raw() dsg = self.c.collect() # only 'owcowmet' returning assert len(raw) == 1 assert sorted([x.uid for x in dsg.elements]) == ['owcowmet']
def setUp(self): self.c = NerrsSoap()
class NerrTest(unittest.TestCase): def setUp(self): self.c = NerrsSoap() @pytest.mark.xfail def test_list_nerrs_features(self): # The number of features may change... just make sure we get enough assert len(self.c.list_features()) > 10 @pytest.mark.xfail def test_list_nerrs_variables(self): # The number of variables may change... just make sure we get enough assert len(self.c.list_variables()) > 10 station_vars = self.c.list_variables(feature='rkbfbwq') assert station_vars == [ 'Depth', 'DO_mgl', 'DO_pct', 'pH', 'Sal', 'SpCond', 'Temp', 'Turb' ] @pytest.mark.xfail def test_nerrs_variable_filter(self): self.c.filter(features=['owcowmet', 'rkbfbwq']) self.c.filter(variables=["ATemp"]) raw = self.c.raw() dsg = self.c.collect() # 'rkbfbwq' does not have ATemp, so it not returned assert len(raw) == 1 assert sorted([x.uid for x in dsg.elements]) == ['owcowmet'] self.c.clear() self.c.filter(features=['owcowmet', 'rkbfbwq']) self.c.filter(variables=["ATemp", "Temp"]) raw = self.c.raw() dsg = self.c.collect() # both are returned assert len(raw) == 2 assert sorted([x.uid for x in dsg.elements]) == ['owcowmet', 'rkbfbwq'] # Must specify BBOX or Features subset for NERRS self.c.clear() self.c.filter(variables=["ATemp", "Temp"]) with pytest.raises(ValueError): self.c.raw() @pytest.mark.xfail def test_nerrs_bbox_filter(self): self.c.filter(bbox=(85.0196, 29.6079, 85.089, 29.7791)) raw = self.c.raw() dsg = self.c.collect() # Five features in the bounding box assert len(raw) == 5 assert len(dsg.elements) == 5 @pytest.mark.xfail def test_nerrs_feature_filter(self): self.c.filter(features=['owcowmet']) raw = self.c.raw() dsg = self.c.collect() assert len(raw) == 1 assert sorted([x.uid for x in dsg.elements]) == ['owcowmet'] self.c.clear() self.c.filter(features=['owcowmet', 'rkbfbwq']) raw = self.c.raw() dsg = self.c.collect() # both are returned assert len(raw) == 2 assert sorted([x.uid for x in dsg.elements]) == ['owcowmet', 'rkbfbwq'] @pytest.mark.xfail def test_nerrs_time_filter(self): self.c.filter(features=['owcowmet', 'rkbfbwq']) ending = datetime.utcnow() - timedelta(days=90) ending = ending.replace(tzinfo=pytz.utc) starting = ending - timedelta(hours=24) starting = starting.replace(tzinfo=pytz.utc) self.c.filter(start_time=starting, end_time=ending) raw = self.c.raw() dsg = self.c.collect() # both are returned assert len(raw) == 2 sorted_stations = sorted([x.uid for x in dsg.elements]) assert sorted_stations == ['owcowmet', 'rkbfbwq'] station = dsg.elements[0] station.calculate_bounds() assert sorted(station.time_range)[0] > starting - timedelta(hours=24) assert sorted(station.time_range)[0] < ending + timedelta(hours=24) assert sorted(station.time_range)[-1] > starting - timedelta(hours=24) assert sorted(station.time_range)[-1] < ending + timedelta(hours=24) @pytest.mark.xfail def test_nerrs_filter_chaining(self): # Test NERRS chaining self.c.filter(features=['owcowmet', 'rkbfbwq']).filter( variables=["ATemp"]) raw = self.c.raw() dsg = self.c.collect() # only 'owcowmet' returning assert len(raw) == 1 assert sorted([x.uid for x in dsg.elements]) == ['owcowmet'] # Test multiple filter types on one call to 'filter' self.c.clear() self.c.filter(features=['owcowmet', 'rkbfbwq'], variables=["ATemp"]) raw = self.c.raw() dsg = self.c.collect() # only 'owcowmet' returning assert len(raw) == 1 assert sorted([x.uid for x in dsg.elements]) == ['owcowmet']