def test_parse_observing_summary_dbase_file(): """ Test that we get the observing summary dbase file with the content we expect. """ obssum = rhessi.parse_observing_summary_dbase_file( get_test_filepath("hsi_obssumm_filedb_201104.txt")) assert obssum['filename'][0][0:20] == 'hsi_obssumm_20110401' assert obssum['filename'][1][0:20] == 'hsi_obssumm_20110402' assert obssum['orb_st'][0] == 0 assert obssum['orb_st'][-1] == 0 assert obssum['orb_end'][0] == 0 assert obssum['orb_end'][-1] == 0 assert obssum['start_time'][0] == parse_time((2011, 4, 1, 0, 0, 0)) assert obssum['start_time'][-1] == parse_time((2011, 4, 30, 0, 0, 0)) assert obssum['end_time'][0] == parse_time((2011, 4, 2, 0, 0, 0)) assert obssum['end_time'][-1] == parse_time((2011, 5, 1, 0, 0, 0)) assert obssum['status_flag'][0] == 0 assert obssum['status_flag'][-1] == 0 assert obssum['npackets'][0] == 0 assert obssum['npackets'][-1] == 0
def test_parse_observing_summary_dbase_file_mock(): """ Ensure that all required data are extracted from the RHESSI observing summary database file mocked in `hessi_data()` """ # We need to mock this test differently for < 3.7.2. if sys.version_info[2] < 2 or sys.version_info[1] < 7: mock_file = mock.mock_open() mock_file.return_value.__iter__.return_value = hessi_data().splitlines() else: mock_file = mock.mock_open(read_data=hessi_data()) dbase_data = {} with mock.patch('sunpy.instr.rhessi.open', mock_file, create=True): dbase_data = rhessi.parse_observing_summary_dbase_file(None) assert len(dbase_data.keys()) == 7 # verify each of the 7 fields assert dbase_data['filename'] == ['hsi_obssumm_19721101_139.fit', 'hsi_obssumm_19721102_144.fit'] assert dbase_data['orb_st'] == [7, 9] assert dbase_data['orb_end'] == [8, 10] assert dbase_data['start_time'] == [parse_time((1972, 11, 1, 0, 0)), parse_time((1972, 11, 2, 0, 0))] assert dbase_data['end_time'] == [parse_time((1972, 11, 2, 0, 0)), parse_time((1972, 11, 3, 0, 0))] assert dbase_data['status_flag'] == [3, 4] assert dbase_data['npackets'] == [2, 1]
def test_parse_observing_summary_dbase_file_mock(): """ Ensure that all required data are extracted from the RHESSI observing summary database file mocked in `hessi_data()` """ mock_file = mock.mock_open() mock_file.return_value.__iter__.return_value = hessi_data() dbase_data = {} with mock.patch('sunpy.instr.rhessi.open', mock_file, create=True): dbase_data = rhessi.parse_observing_summary_dbase_file(None) assert len(dbase_data.keys()) == 7 # verify each of the 7 fields assert dbase_data['filename'] == [ 'hsi_obssumm_19721101_139.fit', 'hsi_obssumm_19721102_144.fit' ] assert dbase_data['orb_st'] == [7, 9] assert dbase_data['orb_end'] == [8, 10] assert dbase_data['start_time'] == [ datetime(1972, 11, 1, 0, 0), datetime(1972, 11, 2, 0, 0) ] assert dbase_data['end_time'] == [ datetime(1972, 11, 2, 0, 0), datetime(1972, 11, 3, 0, 0) ] assert dbase_data['status_flag'] == [3, 4] assert dbase_data['npackets'] == [2, 1]
def test_parse_observing_summary_dbase_file(): """ Test that we get the observing summary dbase file with the content we expect. """ obssum = rhessi.parse_observing_summary_dbase_file(get_test_filepath("hsi_obssumm_filedb_201104.txt")) assert obssum['filename'][0][0:20] == 'hsi_obssumm_20110401' assert obssum['filename'][1][0:20] == 'hsi_obssumm_20110402' assert obssum['orb_st'][0] == 0 assert obssum['orb_st'][-1] == 0 assert obssum['orb_end'][0] == 0 assert obssum['orb_end'][-1] == 0 assert obssum['start_time'][0] == parse_time((2011, 4, 1, 0, 0, 0)) assert obssum['start_time'][-1] == parse_time((2011, 4, 30, 0, 0, 0)) assert obssum['end_time'][0] == parse_time((2011, 4, 2, 0, 0, 0)) assert obssum['end_time'][-1] == parse_time((2011, 5, 1, 0, 0, 0)) assert obssum['status_flag'][0] == 0 assert obssum['status_flag'][-1] == 0 assert obssum['npackets'][0] == 0 assert obssum['npackets'][-1] == 0
def test_parse_observing_summary_dbase_file_mock(): """ Ensure that all required data are extracted from the RHESSI observing summary database file mocked in `hessi_data()` """ # We need to mock this test differently for <= 3.7.0 and below. if LooseVersion(platform.python_version()) <= LooseVersion("3.7.0"): mock_file = mock.mock_open() mock_file.return_value.__iter__.return_value = hessi_data().splitlines() else: mock_file = mock.mock_open(read_data=hessi_data()) dbase_data = {} with mock.patch('sunpy.instr.rhessi.open', mock_file, create=True): dbase_data = rhessi.parse_observing_summary_dbase_file(None) assert len(dbase_data.keys()) == 7 # verify each of the 7 fields assert dbase_data['filename'] == ['hsi_obssumm_19721101_139.fit', 'hsi_obssumm_19721102_144.fit'] assert dbase_data['orb_st'] == [7, 9] assert dbase_data['orb_end'] == [8, 10] assert dbase_data['start_time'] == [parse_time((1972, 11, 1, 0, 0)), parse_time((1972, 11, 2, 0, 0))] assert dbase_data['end_time'] == [parse_time((1972, 11, 2, 0, 0)), parse_time((1972, 11, 3, 0, 0))] assert dbase_data['status_flag'] == [3, 4] assert dbase_data['npackets'] == [2, 1]
def test_parse_observing_summary_dbase_file_mock(): """ Ensure that all required data are extracted from the RHESSI observing summary database file mocked in `hessi_data()` """ mock_file = mock.mock_open() mock_file.return_value.__iter__.return_value = hessi_data() dbase_data = {} with mock.patch('sunpy.instr.rhessi.open', mock_file, create=True): dbase_data = rhessi.parse_observing_summary_dbase_file(None) assert len(dbase_data.keys()) == 7 # verify each of the 7 fields assert dbase_data['filename'] == ['hsi_obssumm_19721101_139.fit', 'hsi_obssumm_19721102_144.fit'] assert dbase_data['orb_st'] == [7, 9] assert dbase_data['orb_end'] == [8, 10] assert dbase_data['start_time'] == [datetime(1972, 11, 1, 0, 0), datetime(1972, 11, 2, 0, 0)] assert dbase_data['end_time'] == [datetime(1972, 11, 2, 0, 0), datetime(1972, 11, 3, 0, 0)] assert dbase_data['status_flag'] == [3, 4] assert dbase_data['npackets'] == [2, 1]
def get_observing_summary_filename(self, time_range): """ Download the RHESSI observing summary data from one of the RHESSI servers, parses it, and returns the name of the observing summary files relevant for the time range. Parameters ---------- time_range : str, TimeRange A TimeRange or time range compatible string Returns ------- out : list Returns the urls of the observation summary file Examples -------- >>> from sunpy.net.dataretriever.sources.rhessi import RHESSIClient >>> RHESSIClient().get_observing_summary_filename(('2011/04/04', '2011/04/04')) # doctest: +REMOTE_DATA ['https://.../hessidata/metadata/catalog/hsi_obssumm_20110404_058.fits'] """ dt = TimeRange(time_range) # remove time from dates dt = TimeRange(dt.start.strftime('%Y-%m-%d'), dt.end.strftime('%Y-%m-%d')) filenames = [] diff_months = (dt.end.datetime.year - dt.start.datetime.year) * \ 12 + dt.end.datetime.month - dt.start.datetime.month first_month = datetime(dt.start.datetime.year, dt.start.datetime.month, 1) month_list = rrule(MONTHLY, dtstart=first_month, count=diff_months + 1) # need to download and inspect the dbase file to determine the filename # for the observing summary data # the dbase files are monthly but contain the daily filenames for this_month in month_list: dbase_file_name, hdrs = self.get_observing_summary_dbase_file( this_month) dbase_dat = rhessi.parse_observing_summary_dbase_file( dbase_file_name) this_month_obssumm_filenames = dbase_dat.get('filename') daily_filenames_dates = [ datetime.strptime(d[0:20], 'hsi_obssumm_%Y%m%d') for d in this_month_obssumm_filenames ] for i, this_date in enumerate(daily_filenames_dates): if dt.start <= this_date <= dt.end: filenames.append( posixpath.join(get_base_url(), 'metadata', 'catalog', this_month_obssumm_filenames[i] + 's')) return filenames
def get_observing_summary_filename(self, time_range): """ Download the RHESSI observing summary data from one of the RHESSI servers, parses it, and returns the name of the observing summary files relevant for the time range. Parameters ---------- time_range : str, TimeRange A TimeRange or time range compatible string Returns ------- out : list Returns the urls of the observation summary file Examples -------- >>> from sunpy.net.dataretriever.sources.rhessi import RHESSIClient >>> RHESSIClient().get_observing_summary_filename(('2011/04/04', '2011/04/05')) # doctest: +REMOTE_DATA ['https://hesperia.gsfc.nasa.gov/hessidata/metadata/catalog/hsi_obssumm_20110404_042.fits', 'https://hesperia.gsfc.nasa.gov/hessidata/metadata/catalog/hsi_obssumm_20110405_031.fits'] """ dt = TimeRange(time_range) # remove time from dates dt = TimeRange(dt.start.date(), dt.end.date()) filenames = [] diff_months = (dt.end.year - dt.start.year) * 12 + dt.end.month - dt.start.month first_month = datetime(dt.start.year, dt.start.month, 1) month_list = rrule(MONTHLY, dtstart=first_month, count=diff_months+1) # need to download and inspect the dbase file to determine the filename # for the observing summary data # the dbase files are monthly but contain the daily filenames for this_month in month_list: dbase_file_name, hdrs = self.get_observing_summary_dbase_file(this_month) dbase_dat = rhessi.parse_observing_summary_dbase_file(dbase_file_name) this_month_obssumm_filenames = dbase_dat.get('filename') daily_filenames_dates = [datetime.strptime(d[0:20], 'hsi_obssumm_%Y%m%d') for d in this_month_obssumm_filenames] for i, this_date in enumerate(daily_filenames_dates): if dt.start <= this_date <= dt.end: filenames.append(posixpath.join(get_base_url(), 'metadata', 'catalog', this_month_obssumm_filenames[i] + 's')) return filenames
def test_parse_obssum_dbase_file(): fname = get_test_filepath("hsi_obssumm_filedb_201104.txt") obssum = rhessi.parse_observing_summary_dbase_file(fname) assert obssum['filename'][0] == 'hsi_obssumm_20110401_043.fit' assert obssum['filename'][-1] == 'hsi_obssumm_20110430_029.fit' assert obssum['orb_st'][0] == 0 assert obssum['orb_st'][-1] == 0 assert obssum['orb_end'][0] == 0 assert obssum['orb_end'][-1] == 0 assert obssum['start_time'][0] == parse_time((2011, 4, 1, 0, 0, 0)) assert obssum['start_time'][-1] == parse_time((2011, 4, 30, 0, 0, 0)) assert obssum['end_time'][0] == parse_time((2011, 4, 2, 0, 0, 0)) assert obssum['end_time'][-1] == parse_time((2011, 5, 1, 0, 0, 0)) assert obssum['status_flag'][0] == 0 assert obssum['status_flag'][-1] == 0 assert obssum['npackets'][0] == 0 assert obssum['npackets'][-1] == 0
def test_parse_obssum_dbase_file(): fname = get_test_filepath("hsi_obssumm_filedb_201104.txt") obssum = rhessi.parse_observing_summary_dbase_file(fname) assert obssum['filename'][0] == 'hsi_obssumm_20110401_043.fit' assert obssum['filename'][-1] == 'hsi_obssumm_20110430_029.fit' assert obssum['orb_st'][0] == 0 assert obssum['orb_st'][-1] == 0 assert obssum['orb_end'][0] == 0 assert obssum['orb_end'][-1] == 0 assert obssum['start_time'][0] == parse_time((2011, 4, 1, 0, 0, 0)) assert obssum['start_time'][-1] == parse_time((2011, 4, 30, 0, 0, 0)) assert obssum['end_time'][0] == parse_time((2011, 4, 2, 0, 0, 0)) assert obssum['end_time'][-1] == parse_time((2011, 5, 1, 0, 0, 0)) assert obssum['status_flag'][0] == 0 assert obssum['status_flag'][-1] == 0 assert obssum['npackets'][0] == 0 assert obssum['npackets'][-1] == 0