|
| 1 | +import urllib.error |
| 2 | + |
1 | 3 | import pandas as pd |
2 | 4 | import pytest |
3 | 5 |
|
4 | 6 | from pvlib.iotools import surfrad |
5 | | -from tests.conftest import TESTS_DATA_DIR, RERUNS, RERUNS_DELAY |
| 7 | +from tests.conftest import ( |
| 8 | + TESTS_DATA_DIR, |
| 9 | + assert_frame_equal, |
| 10 | + RERUNS, |
| 11 | + RERUNS_DELAY, |
| 12 | +) |
6 | 13 |
|
7 | 14 | testfile = TESTS_DATA_DIR / 'surfrad-slv16001.dat' |
8 | 15 | network_testfile = ('ftp://aftp.cmdl.noaa.gov/data/radiation/surfrad/' |
@@ -73,3 +80,39 @@ def test_read_surfrad_metadata(): |
73 | 80 | 'tz': 'UTC'} |
74 | 81 | _, metadata = surfrad.read_surfrad(testfile) |
75 | 82 | assert metadata == expected |
| 83 | + |
| 84 | + |
| 85 | +@pytest.mark.remote_data |
| 86 | +@pytest.mark.flaky(reruns=RERUNS, reruns_delay=RERUNS_DELAY) |
| 87 | +def test_get_surfrad(): |
| 88 | + df, meta = surfrad.get_surfrad('slv', '2016-01-01', '2016-01-01') |
| 89 | + |
| 90 | + assert meta['station'] == 'slv' |
| 91 | + assert isinstance(meta['filenames'], list) |
| 92 | + |
| 93 | + assert len(df) == 1440 |
| 94 | + assert df.index[0] == pd.to_datetime('2016-01-01 00:00+00:00') |
| 95 | + assert df.index[-1] == pd.to_datetime('2016-01-01 23:59+00:00') |
| 96 | + |
| 97 | + expected, _ = surfrad.read_surfrad(testfile) |
| 98 | + assert_frame_equal(df, expected) |
| 99 | + |
| 100 | + |
| 101 | +@pytest.mark.remote_data |
| 102 | +def test_get_surfrad_missing_day(): |
| 103 | + # SURFRAD's Alamosa station data begins 2014-07-28 (slv14209.dat), so |
| 104 | + # requesting the day before that will raise a warning |
| 105 | + message = 'The following file was not found: slv/2014/slv14208.dat' |
| 106 | + with pytest.warns(UserWarning, match=message): |
| 107 | + df, meta = surfrad.get_surfrad('slv', '2014-07-27', '2014-07-28') |
| 108 | + |
| 109 | + # but the data for 2014-07-28 is still returned |
| 110 | + assert not df.empty |
| 111 | + |
| 112 | + |
| 113 | +@pytest.mark.remote_data |
| 114 | +def test_get_surfrad_no_data(): |
| 115 | + message = "No data retrieved for station 'xxx'" |
| 116 | + with pytest.warns(UserWarning): |
| 117 | + with pytest.raises(ValueError, match=message): |
| 118 | + surfrad.get_surfrad('xxx', '2016-01-01', '2016-01-01') |
0 commit comments