def test_iterator_protocol(self): """The GribFile allows pythonic iteration over all messages.""" step_ranges = [] with GribFile(TESTGRIB) as grib: for msg in grib: step_ranges.append(msg["stepRange"]) self.assertSequenceEqual(step_ranges, ["0", "6", "12", "18", "24"])
def test_serialize(self): """Message can be serialized to file.""" with GribFile(TESTGRIB) as grib: msg = GribMessage(grib) with open(TEST_OUTPUT, "w") as test: msg.write(test) os.unlink(TEST_OUTPUT)
def test_metadata(self): """Metadata is read correctly from GribMessage.""" with GribFile(TESTGRIB) as grib: msg = GribMessage(grib) key_count = 255 self.assertEqual(len(msg), key_count) self.assertEqual(msg.size(), 160219) self.assertEqual(len(msg.keys()), key_count)
def test_iteration_works(self): """The GribFile allows proper iteration over all messages.""" step_ranges = [] with GribFile(TESTGRIB) as grib: for _ in range(len(grib)): msg = GribMessage(grib) step_ranges.append(msg["stepRange"]) self.assertSequenceEqual(step_ranges, ["0", "6", "12", "18", "24"])
def test_missing_message_behavior(self): """Missing messages are detected properly.""" with GribFile(TESTGRIB) as grib: msg = GribMessage(grib) self.assertTrue(msg.missing("scaleFactorOfSecondFixedSurface")) msg["scaleFactorOfSecondFixedSurface"] = 5 msg.set_missing("scaleFactorOfSecondFixedSurface") with self.assertRaises(KeyError): msg["scaleFactorOfSecondFixedSurface"]
def test_memory_management(self): """Messages in GribFile can be opened and closed properly.""" with GribFile(TESTGRIB) as grib: self.assertEqual(len(grib), 5) for i in range(len(grib)): msg = GribMessage(grib) self.assertEqual(msg["shortName"], "msl") self.assertEqual(len(grib.open_messages), 5) self.assertEqual(len(grib.open_messages), 0)
def test_value_setting(self): """Keys can be set properly.""" with GribFile(TESTGRIB) as grib: msg = GribMessage(grib) msg["scaleFactorOfSecondFixedSurface"] = 5 msg["values"] = [1, 2, 3]
def test_read_invalid_file(self): """Trying to open message on nonexistent GRIB file raises IOError.""" with NamedTemporaryFile(mode='r') as f: with GribFile(f.name) as grib: self.assertRaises(IOError, lambda: GribMessage(grib))
def test_read_past_last_message(self): """Trying to open message on exhausted GRIB file raises IOError.""" with GribFile(TESTGRIB) as grib: for _ in range(len(grib)): GribMessage(grib) self.assertRaises(IOError, lambda: GribMessage(grib))
def test_clone(self): """Messages can be used to produce clone Messages.""" with GribFile(TESTGRIB) as grib: msg = GribMessage(grib) msg2 = GribMessage(clone=msg) self.assertSequenceEqual(msg.keys(), msg2.keys())