diff --git a/astroquery/esa/integral/core.py b/astroquery/esa/integral/core.py index 55e2e0cd2e..ee98ba6be3 100644 --- a/astroquery/esa/integral/core.py +++ b/astroquery/esa/integral/core.py @@ -28,7 +28,7 @@ class IntegralClass(BaseVOQuery, BaseQuery): Class to init ESA Integral Module and communicate with isla """ - def __init__(self, tap_handler=None, auth_session=None): + def __init__(self, auth_session=None): super().__init__() # Checks if auth session has been defined. If not, create a new session @@ -38,16 +38,22 @@ def __init__(self, tap_handler=None, auth_session=None): self._auth_session = esautils.ESAAuthSession() self._auth_session.timeout = conf.TIMEOUT + self._tap = None + self._tap_url = conf.ISLA_TAP_SERVER - if tap_handler is None: - self.tap = pyvo.dal.TAPService( + self.instruments = [] + self.bands = [] + self.instrument_band_map = {} + + @property + def tap(self) -> pyvo.dal.TAPService: + if self._tap is None: + self._tap = pyvo.dal.TAPService( conf.ISLA_TAP_SERVER, session=self._auth_session) - else: - self.tap = tap_handler - self._data = None + # Retrieve the instruments and bands available within ISLA Archive + self.get_instrument_band_map() - # Retrieve the instruments and bands available within ISLA Archive - self.instruments, self.bands, self.instrument_band_map = self.get_instrument_band_map() + return self._tap def get_tables(self, *, only_names=False): """ @@ -217,13 +223,15 @@ def get_sources(self, target_name, *, async_job=False, output_file=None, output_ # Second attempt, resolve using a Resolver Service and cone search to the source catalogue try: coordinates = esautils.resolve_target(conf.ISLA_TARGET_RESOLVER, self.tap._session, target_name, 'ALL') - query = conf.ISLA_CONE_TARGET_CONDITION.format(coordinates.ra.degree, coordinates.dec.degree, 0.0833) - result = self.query_tap(query=query, async_job=async_job, output_file=output_file, - output_format=output_format) + if coordinates: + query = conf.ISLA_CONE_TARGET_CONDITION.format(coordinates.ra.degree, coordinates.dec.degree, 0.0833) + result = self.query_tap(query=query, async_job=async_job, output_file=output_file, + output_format=output_format) - if len(result) > 0: - return result[0] + if len(result) > 0: + return result[0] + raise ValueError(f"Target {target_name} cannot be resolved for ISLA") except ValueError: raise ValueError(f"Target {target_name} cannot be resolved for ISLA") @@ -900,20 +908,39 @@ def get_instrument_band_map(self): """ Maps the bands and instruments included in ISLA """ - instrument_band_table = self.query_tap(conf.ISLA_INSTRUMENT_BAND_QUERY) - instrument_band_map = {} - for row in instrument_band_table: - instrument_band_map[row['instrument']] = {'band': row['band'], - 'instrument_oid': row['instrument_oid'], - 'band_oid': row['band_oid']} - instrument_band_map[row['band']] = {'instrument': row['instrument'], - 'instrument_oid': row['instrument_oid'], - 'band_oid': row['band_oid']} + if len(self.instrument_band_map) == 0: + instrument_band_table = self.query_tap(conf.ISLA_INSTRUMENT_BAND_QUERY) + instrument_band_map = {} + + for row in instrument_band_table: + instrument_band_map[row['instrument']] = {'band': row['band'], + 'instrument_oid': row['instrument_oid'], + 'band_oid': row['band_oid']} + instrument_band_map[row['band']] = {'instrument': row['instrument'], + 'instrument_oid': row['instrument_oid'], + 'band_oid': row['band_oid']} + + instruments = instrument_band_table['instrument'] + bands = instrument_band_table['band'] + + self.instruments = instruments + self.bands = bands + self.instrument_band_map = instrument_band_map - instruments = instrument_band_table['instrument'] - bands = instrument_band_table['band'] - return instruments, bands, instrument_band_map + def get_instruments(self): + """ + Get the instruments available in ISLA + """ + self.get_instrument_band_map() + return self.instruments + + def get_bands(self): + """ + Get the bands available in ISLA + """ + self.get_instrument_band_map() + return self.bands def __get_instrument_or_band(self, instrument, band): if instrument and band: @@ -928,12 +955,16 @@ def __get_instrument_or_band(self, instrument, band): else: value = band + # Retrieve the available instruments or bands if not loaded yet + self.get_instrument_band_map() + + # Validate the value is in the list of allowed ones if value in self.instrument_band_map: return value raise ValueError(f"This is not a valid value for instrument or band. Valid values are:\n" - f"Instruments: {self.instruments}\n" - f"Bands: {self.bands}") + f"Instruments: {self.get_instruments()}\n" + f"Bands: {self.get_bands()}") def __get_oids(self, value): """ @@ -1027,7 +1058,7 @@ def __get_science_window_parameter(self, science_windows, observation_id, revolu def __log_warning_message(self, get_method, download_method, show_warning=True): if show_warning: - warnings.warn( + log.warning( f"The plots and data provided by '{get_method}' have been developed using the automatic reduction " f"pipeline at ISDC, using INTEGRAL OSA version 11.2. No manual scientific validation has been " f"performed on these outputs. They should be examined and validated before being used for scientific " diff --git a/astroquery/esa/integral/tests/test_isla_tap.py b/astroquery/esa/integral/tests/test_isla_tap.py index 4a46616e43..ce8c3a83f0 100644 --- a/astroquery/esa/integral/tests/test_isla_tap.py +++ b/astroquery/esa/integral/tests/test_isla_tap.py @@ -20,6 +20,10 @@ from astroquery.esa.integral.tests import mocks +def mock_instrument_bands(isla_module): + isla_module.instruments, isla_module.bands, isla_module.instrument_band_map = mocks.get_instrument_bands() + + class TestTap: def test_get_tables(self): @@ -46,30 +50,32 @@ def test_get_table(self): assert isla.get_table('ila.cons_pub_obs').name == 'ila.cons_pub_obs' assert isla.get_table('test') is None - @patch('astroquery.esa.integral.core.pyvo.dal.TAPService.get_job') + @patch('astroquery.esa.integral.core.pyvo.dal.TAPService.capabilities', []) + @patch('astroquery.esa.integral.core.IntegralClass.tap') @patch('astroquery.esa.integral.core.pyvo.dal.AsyncTAPJob') - def test_load_job(self, mock_get_job, isla_job_mock): + def test_load_job(self, isla_job_mock, mock_tap): jobid = '101' mock_job = Mock() mock_job.job_id = '101' - isla_job_mock.return_value = mock_job - mock_get_job.return_value = mock_job + isla_job_mock.job_id.return_value = '101' + mock_tap.get_job.return_value = mock_job isla = IntegralClass() job = isla.get_job(jobid=jobid) assert job.job_id == '101' - @patch('astroquery.esa.integral.core.pyvo.dal.TAPService.get_job_list') + @patch('astroquery.esa.integral.core.pyvo.dal.TAPService.capabilities', []) + @patch('astroquery.esa.integral.core.IntegralClass.tap') def test_get_job_list(self, mock_get_job_list): mock_job = Mock() mock_job.job_id = '101' - mock_get_job_list.return_value = [mock_job] + mock_get_job_list.get_job_list.return_value = [mock_job] isla = IntegralClass() jobs = isla.get_job_list() - print(jobs) assert len(jobs) == 1 + @patch('astroquery.esa.integral.core.pyvo.dal.TAPService.capabilities', []) @patch('astroquery.esa.integral.core.IntegralClass.get_instrument_band_map') @patch('astroquery.esa.utils.utils.ESAAuthSession.post') def test_login_success(self, mock_post, instrument_band_mock): @@ -89,6 +95,7 @@ def test_login_success(self, mock_post, instrument_band_mock): headers={'Content-type': 'application/x-www-form-urlencoded', 'Accept': 'text/plain'}) + @patch('astroquery.esa.integral.core.pyvo.dal.TAPService.capabilities', []) @patch('astroquery.esa.integral.core.IntegralClass.get_instrument_band_map') @patch('astroquery.esa.utils.utils.ESAAuthSession.post') def test_login_error(self, mock_post, instrument_band_mock): @@ -104,6 +111,7 @@ def test_login_error(self, mock_post, instrument_band_mock): isla.login(user='dummyUser', password='dummyPassword') assert error_message in err.value.args[0] + @patch('astroquery.esa.integral.core.pyvo.dal.TAPService.capabilities', []) @patch('astroquery.esa.integral.core.IntegralClass.get_instrument_band_map') @patch('astroquery.esa.utils.utils.ESAAuthSession.post') def test_logout_success(self, mock_post, instrument_band_mock): @@ -122,6 +130,7 @@ def test_logout_success(self, mock_post, instrument_band_mock): headers={'Content-type': 'application/x-www-form-urlencoded', 'Accept': 'text/plain'}) + @patch('astroquery.esa.integral.core.pyvo.dal.TAPService.capabilities', []) @patch('astroquery.esa.integral.core.IntegralClass.get_instrument_band_map') @patch('astroquery.esa.utils.utils.ESAAuthSession.post') def test_logout_error(self, mock_post, instrument_band_mock): @@ -137,6 +146,7 @@ def test_logout_error(self, mock_post, instrument_band_mock): isla.logout() assert error_message in err.value.args[0] + @patch('astroquery.esa.integral.core.pyvo.dal.TAPService.capabilities', []) @patch('astropy.table.Table.write') @patch('astroquery.esa.integral.core.IntegralClass.get_instrument_band_map') @patch('astroquery.esa.integral.core.pyvo.dal.TAPService.search') @@ -150,6 +160,7 @@ def test_query_tap_sync(self, search_mock, instrument_band_mock, table_mock): search_mock.assert_called_with(query) table_mock.assert_called() + @patch('astroquery.esa.integral.core.pyvo.dal.TAPService.capabilities', []) @patch('pyvo.dal.AsyncTAPJob') @patch('astroquery.esa.integral.core.IntegralClass.get_instrument_band_map') @patch('astroquery.esa.integral.core.pyvo.dal.TAPService.submit_job') @@ -163,6 +174,7 @@ def test_query_tap_async(self, submit_job_mock, instrument_band_mock, async_job_ isla.query_tap(query=query, async_job=True) submit_job_mock.assert_called_with(query) + @patch('astroquery.esa.integral.core.pyvo.dal.TAPService.capabilities', []) @patch('astroquery.esa.integral.core.IntegralClass.query_tap') @patch('astroquery.esa.integral.core.IntegralClass.get_instrument_band_map') def test_get_sources_success_catalogue(self, instrument_band_mock, query_tap_mock): @@ -176,6 +188,7 @@ def test_get_sources_success_catalogue(self, instrument_band_mock, query_tap_moc "ila.v_cat_source src where src.name ilike '%Crab%' order by " "src.name asc", async_job=False, output_file=None, output_format=None) + @patch('astroquery.esa.integral.core.pyvo.dal.TAPService.capabilities', []) @patch('astroquery.esa.utils.utils.resolve_target') @patch('astroquery.esa.integral.core.IntegralClass.query_tap') @patch('astroquery.esa.integral.core.IntegralClass.get_instrument_band_map') @@ -190,17 +203,21 @@ def test_get_sources_success_resolver(self, instrument_band_mock, query_tap_mock query_tap_mock.assert_called_with(query=query, async_job=False, output_file=None, output_format=None) + @patch('astroquery.esa.integral.core.pyvo.dal.TAPService.capabilities', []) + @patch('astroquery.esa.utils.utils.resolve_target') @patch('astroquery.esa.integral.core.IntegralClass.query_tap') @patch('astroquery.esa.integral.core.IntegralClass.get_instrument_band_map') - def test_get_sources_error(self, instrument_band_mock, query_tap_mock): + def test_get_sources_error(self, instrument_band_mock, query_tap_mock, resolve_mock): instrument_band_mock.return_value = mocks.get_instrument_bands() query_tap_mock.return_value = mocks.get_empty_table() + resolve_mock.return_value = None isla = IntegralClass() with pytest.raises(ValueError) as err: isla.get_sources(target_name='test') assert 'Target test cannot be resolved for ISLA' in err.value.args[0] + @patch('astroquery.esa.integral.core.pyvo.dal.TAPService.capabilities', []) @patch('astroquery.esa.integral.core.IntegralClass.query_tap') @patch('astroquery.esa.integral.core.IntegralClass.get_instrument_band_map') def test_get_observations_error(self, instrument_band_mock, query_tap_mock): @@ -212,6 +229,7 @@ def test_get_observations_error(self, instrument_band_mock, query_tap_mock): isla.get_observations(target_name='test', coordinates='test') assert 'Please use only target or coordinates as parameter.' in err.value.args[0] + @patch('astroquery.esa.integral.core.pyvo.dal.TAPService.capabilities', []) @patch('astroquery.esa.integral.core.IntegralClass.query_tap') @patch('astroquery.esa.integral.core.IntegralClass.get_sources') @patch('astroquery.esa.integral.core.IntegralClass.get_instrument_band_map') @@ -230,8 +248,8 @@ def test_get_observations_t1(self, instrument_band_mock, get_sources_mock, query async_job=False, output_file=None, output_format=None) - print('test') + @patch('astroquery.esa.integral.core.pyvo.dal.TAPService.capabilities', []) @patch('astroquery.esa.integral.core.IntegralClass.query_tap') @patch('astroquery.esa.integral.core.IntegralClass.get_sources') @patch('astroquery.esa.integral.core.IntegralClass.get_instrument_band_map') @@ -253,6 +271,7 @@ def test_get_observations_t2(self, instrument_band_mock, get_sources_mock, query output_file=None, output_format=None) + @patch('astroquery.esa.integral.core.pyvo.dal.TAPService.capabilities', []) @patch('astroquery.esa.integral.core.IntegralClass.query_tap') @patch('astroquery.esa.integral.core.IntegralClass.get_sources') @patch('astroquery.esa.integral.core.IntegralClass.get_instrument_band_map') @@ -271,6 +290,7 @@ def test_get_observations_query(self, instrument_band_mock, get_sources_mock, qu "endtime >= '2024-12-13 00:00:00' AND starttime <= " "'2024-12-14 00:00:00' order by obsid") + @patch('astroquery.esa.integral.core.pyvo.dal.TAPService.capabilities', []) @patch('astroquery.esa.utils.utils.download_file') @patch('astroquery.esa.integral.core.IntegralClass.get_instrument_band_map') def test_download_science_windows_error(self, instrument_band_mock, download_mock): @@ -286,6 +306,7 @@ def test_download_science_windows_error(self, instrument_band_mock, download_moc isla.download_science_windows(science_windows='sc', observation_id='obs') assert 'Only one parameter can be provided at a time.' in err.value.args[0] + @patch('astroquery.esa.integral.core.pyvo.dal.TAPService.capabilities', []) @patch('astroquery.esa.utils.utils.download_file') @patch('astroquery.esa.integral.core.IntegralClass.get_instrument_band_map') def test_download_science_windows(self, instrument_band_mock, download_mock): @@ -306,6 +327,7 @@ def test_download_science_windows(self, instrument_band_mock, download_mock): args, kwargs = download_mock.call_args assert kwargs['params']['RETRIEVAL_TYPE'] == 'SCW' + @patch('astroquery.esa.integral.core.pyvo.dal.TAPService.capabilities', []) @patch('astroquery.esa.utils.utils.plt.show') @patch('astroquery.esa.utils.utils.plt.scatter') @patch('astroquery.esa.utils.utils.execute_servlet_request') @@ -323,6 +345,7 @@ def test_get_timeline_no_distance(self, instrument_band_mock, servlet_mock, scat scatter_mock.assert_called() plt_mock.assert_called_with(block=False) + @patch('astroquery.esa.integral.core.pyvo.dal.TAPService.capabilities', []) @patch('astroquery.esa.utils.utils.plt.show') @patch('astroquery.esa.utils.utils.plt.scatter') @patch('astroquery.esa.utils.utils.execute_servlet_request') @@ -339,6 +362,7 @@ def test_get_timeline_distance(self, instrument_band_mock, servlet_mock, scatter assert len(timeline['timeline']['scwRevs']) > 0 + @patch('astroquery.esa.integral.core.pyvo.dal.TAPService.capabilities', []) @patch('astroquery.esa.integral.core.IntegralClass.get_instrument_band_map') def test_get_epochs_error(self, instrument_band_mock): instrument_band_mock.return_value = mocks.get_instrument_bands() @@ -348,18 +372,21 @@ def test_get_epochs_error(self, instrument_band_mock): isla.get_epochs(target_name='J011705.1-732636', instrument='i2') assert 'This is not a valid value for instrument or band.' in err.value.args[0] + @patch('astroquery.esa.integral.core.pyvo.dal.TAPService.capabilities', []) @patch('astroquery.esa.integral.core.IntegralClass.query_tap') @patch('astroquery.esa.integral.core.IntegralClass.get_instrument_band_map') def test_get_epochs(self, instrument_band_mock, query_tap_mock): instrument_band_mock.return_value = mocks.get_instrument_bands() isla = IntegralClass() + mock_instrument_bands(isla_module=isla) isla.get_epochs(target_name='J011705.1-732636', instrument='i1') query_tap_mock.assert_called_with("select distinct epoch from ila.epoch where " "source_id = 'J011705.1-732636' and " "(instrument_oid = id1 or band_oid = id2)") + @patch('astroquery.esa.integral.core.pyvo.dal.TAPService.capabilities', []) @patch('astroquery.esa.integral.core.log') @patch('astroquery.esa.utils.utils.execute_servlet_request') @patch('astroquery.esa.integral.core.IntegralClass.get_instrument_band_map') @@ -368,10 +395,12 @@ def test_get_long_term_timeseries_error(self, instrument_band_mock, servlet_mock servlet_mock.return_value = {} isla = IntegralClass() + mock_instrument_bands(isla_module=isla) isla.get_long_term_timeseries(target_name='J174537.0-290107', band='b1', plot=True) log_mock.error.assert_called_with('No long term timeseries have been found with these inputs. ' 'Please try with different input parameters.') + @patch('astroquery.esa.integral.core.pyvo.dal.TAPService.capabilities', []) @patch('astroquery.esa.integral.core.log') @patch('astroquery.esa.utils.utils.execute_servlet_request') @patch('astroquery.esa.integral.core.IntegralClass.get_instrument_band_map') @@ -382,10 +411,12 @@ def test_get_long_term_timeseries_exception(self, instrument_band_mock, servlet_ servlet_mock.side_effect = mock_response isla = IntegralClass() + mock_instrument_bands(isla_module=isla) isla.get_long_term_timeseries(target_name='J174537.0-290107', band='b1', plot=True) log_mock.error.assert_called_with("Problem when retrieving long term timeseries. " "argument of type 'Mock' is not iterable") + @patch('astroquery.esa.integral.core.pyvo.dal.TAPService.capabilities', []) @patch('astroquery.esa.utils.utils.execute_servlet_request') @patch('astroquery.esa.integral.core.IntegralClass.get_instrument_band_map') def test_get_long_term_timeseries(self, instrument_band_mock, servlet_mock): @@ -393,6 +424,7 @@ def test_get_long_term_timeseries(self, instrument_band_mock, servlet_mock): servlet_mock.return_value = mocks.get_mock_timeseries() isla = IntegralClass() + mock_instrument_bands(isla_module=isla) lt_timeseries_list = isla.get_long_term_timeseries(target_name='J174537.0-290107', band='b1', plot=True) args, kwargs = servlet_mock.call_args @@ -400,17 +432,20 @@ def test_get_long_term_timeseries(self, instrument_band_mock, servlet_mock): assert len(lt_timeseries_list['timeseries_list']) == 2 + @patch('astroquery.esa.integral.core.pyvo.dal.TAPService.capabilities', []) @patch('astroquery.esa.utils.utils.download_file') @patch('astroquery.esa.integral.core.IntegralClass.get_instrument_band_map') def test_download_long_term_timeseries(self, instrument_band_mock, download_mock): instrument_band_mock.return_value = mocks.get_instrument_bands() isla = IntegralClass() + mock_instrument_bands(isla_module=isla) isla.download_long_term_timeseries(target_name='J174537.0-290107', band='b1') args, kwargs = download_mock.call_args assert kwargs['params']['RETRIEVAL_TYPE'] == 'long_timeseries' + @patch('astroquery.esa.integral.core.pyvo.dal.TAPService.capabilities', []) @patch('astroquery.esa.integral.core.log') @patch('astroquery.esa.utils.utils.execute_servlet_request') @patch('astroquery.esa.integral.core.IntegralClass.get_epochs') @@ -421,11 +456,13 @@ def test_get_short_term_timeseries_error(self, instrument_band_mock, epoch_mock, servlet_mock.return_value = {} isla = IntegralClass() + mock_instrument_bands(isla_module=isla) isla.get_short_term_timeseries(target_name='target', band='b1', epoch='time', plot=True) log_mock.error.assert_called_with('No short term timeseries have been found with these inputs. ' 'Please try with different input parameters.') + @patch('astroquery.esa.integral.core.pyvo.dal.TAPService.capabilities', []) @patch('astroquery.esa.integral.core.IntegralClass.get_epochs') @patch('astroquery.esa.integral.core.log') @patch('astroquery.esa.utils.utils.execute_servlet_request') @@ -438,11 +475,13 @@ def test_get_short_term_timeseries_exception(self, instrument_band_mock, servlet servlet_mock.side_effect = mock_response isla = IntegralClass() + mock_instrument_bands(isla_module=isla) isla.get_short_term_timeseries(target_name='target', band='b1', epoch='time', plot=True) log_mock.error.assert_called_with("Problem when retrieving short term timeseries. " "argument of type 'Mock' is not iterable") + @patch('astroquery.esa.integral.core.pyvo.dal.TAPService.capabilities', []) @patch('astroquery.esa.utils.utils.execute_servlet_request') @patch('astroquery.esa.integral.core.IntegralClass.get_epochs') @patch('astroquery.esa.integral.core.IntegralClass.get_instrument_band_map') @@ -452,11 +491,13 @@ def test_get_short_term_timeseries_epoch_error(self, instrument_band_mock, epoch servlet_mock.return_value = mocks.get_mock_timeseries() isla = IntegralClass() + mock_instrument_bands(isla_module=isla) with pytest.raises(ValueError) as err: isla.get_short_term_timeseries(target_name='target', band='28_40', epoch='time', plot=True) assert 'Epoch time is not available for this target and instrument/band.' in err.value.args[0] + @patch('astroquery.esa.integral.core.pyvo.dal.TAPService.capabilities', []) @patch('astroquery.esa.integral.core.IntegralClass.get_epochs') @patch('astroquery.esa.utils.utils.execute_servlet_request') @patch('astroquery.esa.integral.core.IntegralClass.get_instrument_band_map') @@ -466,6 +507,7 @@ def test_get_short_term_timeseries(self, instrument_band_mock, servlet_mock, epo servlet_mock.return_value = mocks.get_mock_timeseries() isla = IntegralClass() + mock_instrument_bands(isla_module=isla) st_timeseries_list = isla.get_short_term_timeseries(target_name='target', band='b1', epoch='time', plot=True) args, kwargs = servlet_mock.call_args @@ -473,6 +515,7 @@ def test_get_short_term_timeseries(self, instrument_band_mock, servlet_mock, epo assert len(st_timeseries_list['timeseries_list']) == 2 + @patch('astroquery.esa.integral.core.pyvo.dal.TAPService.capabilities', []) @patch('astroquery.esa.integral.core.IntegralClass.get_epochs') @patch('astroquery.esa.utils.utils.download_file') @patch('astroquery.esa.integral.core.IntegralClass.get_instrument_band_map') @@ -480,12 +523,14 @@ def test_download_short_term_timeseries(self, instrument_band_mock, download_moc instrument_band_mock.return_value = mocks.get_instrument_bands() epoch_mock.return_value = {'epoch': ['today']} isla = IntegralClass() + mock_instrument_bands(isla_module=isla) isla.download_short_term_timeseries(target_name='J174537.0-290107', epoch='today', band='b1') args, kwargs = download_mock.call_args assert kwargs['params']['RETRIEVAL_TYPE'] == 'short_timeseries' download_mock.assert_called() + @patch('astroquery.esa.integral.core.pyvo.dal.TAPService.capabilities', []) @patch('astroquery.esa.integral.core.log') @patch('astroquery.esa.utils.utils.execute_servlet_request') @patch('astroquery.esa.integral.core.IntegralClass.get_epochs') @@ -496,11 +541,13 @@ def test_get_spectra_error(self, instrument_band_mock, epoch_mock, servlet_mock, servlet_mock.return_value = {} isla = IntegralClass() + mock_instrument_bands(isla_module=isla) isla.get_spectra(target_name='target', band='b1', epoch='time', plot=True) log_mock.error.assert_called_with('Spectra are not available with these inputs. ' 'Please try with different input parameters.') + @patch('astroquery.esa.integral.core.pyvo.dal.TAPService.capabilities', []) @patch('astroquery.esa.integral.core.IntegralClass.get_epochs') @patch('astroquery.esa.integral.core.log') @patch('astroquery.esa.utils.utils.execute_servlet_request') @@ -513,11 +560,13 @@ def test_get_spectra_exception(self, instrument_band_mock, servlet_mock, log_moc servlet_mock.side_effect = mock_response isla = IntegralClass() + mock_instrument_bands(isla_module=isla) isla.get_spectra(target_name='target', band='b1', epoch='time', plot=True) log_mock.error.assert_called_with("Problem when retrieving spectra. " "object of type 'Mock' has no len()") + @patch('astroquery.esa.integral.core.pyvo.dal.TAPService.capabilities', []) @patch('astroquery.esa.integral.core.IntegralClass.get_epochs') @patch('astroquery.esa.utils.utils.execute_servlet_request') @patch('astroquery.esa.integral.core.IntegralClass.get_instrument_band_map') @@ -527,6 +576,7 @@ def test_get_spectra(self, instrument_band_mock, servlet_mock, epoch_mock): epoch_mock.return_value = {'epoch': ['today']} isla = IntegralClass() + mock_instrument_bands(isla_module=isla) spectra_list = isla.get_spectra(target_name='target', epoch='today', band='b1', plot=True) args, kwargs = servlet_mock.call_args @@ -534,6 +584,7 @@ def test_get_spectra(self, instrument_band_mock, servlet_mock, epoch_mock): assert len(spectra_list) == 1 + @patch('astroquery.esa.integral.core.pyvo.dal.TAPService.capabilities', []) @patch('astroquery.esa.integral.core.IntegralClass.get_epochs') @patch('astroquery.esa.utils.utils.execute_servlet_request') @patch('astroquery.esa.utils.utils.download_file') @@ -544,12 +595,14 @@ def test_download_spectra(self, instrument_band_mock, download_mock, servlet_moc epoch_mock.return_value = {'epoch': ['today']} isla = IntegralClass() + mock_instrument_bands(isla_module=isla) isla.download_spectra(target_name='J174537.0-290107', epoch='today', band='b1') args, kwargs = download_mock.call_args assert kwargs['params']['RETRIEVAL_TYPE'] == 'spectras' download_mock.assert_called() + @patch('astroquery.esa.integral.core.pyvo.dal.TAPService.capabilities', []) @patch('astroquery.esa.integral.core.log') @patch('astroquery.esa.utils.utils.execute_servlet_request') @patch('astroquery.esa.integral.core.IntegralClass.get_epochs') @@ -560,10 +613,12 @@ def test_get_mosaic_error(self, instrument_band_mock, epoch_mock, servlet_mock, servlet_mock.return_value = {} isla = IntegralClass() + mock_instrument_bands(isla_module=isla) isla.get_mosaic(epoch='time', instrument='i1', plot=True) log_mock.error.assert_called_with('Mosaics are not available for these inputs. ' 'Please try with different input parameters.') + @patch('astroquery.esa.integral.core.pyvo.dal.TAPService.capabilities', []) @patch('astroquery.esa.integral.core.IntegralClass.get_epochs') @patch('astroquery.esa.integral.core.log') @patch('astroquery.esa.utils.utils.execute_servlet_request') @@ -576,10 +631,12 @@ def test_get_mosaic_exception(self, instrument_band_mock, servlet_mock, log_mock servlet_mock.side_effect = mock_response isla = IntegralClass() + mock_instrument_bands(isla_module=isla) isla.get_mosaic(epoch='time', instrument='i1', plot=True) log_mock.error.assert_called_with("Problem when retrieving mosaics. " "object of type 'Mock' has no len()") + @patch('astroquery.esa.integral.core.pyvo.dal.TAPService.capabilities', []) @patch('astroquery.esa.utils.utils.plt.imshow') @patch('astroquery.esa.integral.core.IntegralClass.get_epochs') @patch('astroquery.esa.utils.utils.execute_servlet_request') @@ -590,6 +647,7 @@ def test_get_mosaic(self, instrument_band_mock, servlet_mock, epoch_mock, plt_mo epoch_mock.return_value = {'epoch': ['today']} isla = IntegralClass() + mock_instrument_bands(isla_module=isla) mosaics = isla.get_mosaic(epoch='today', instrument='i1', plot=True) args, kwargs = servlet_mock.call_args @@ -597,6 +655,7 @@ def test_get_mosaic(self, instrument_band_mock, servlet_mock, epoch_mock, plt_mo assert len(mosaics) == 1 plt_mock.assert_called() + @patch('astroquery.esa.integral.core.pyvo.dal.TAPService.capabilities', []) @patch('astroquery.esa.integral.core.IntegralClass.get_epochs') @patch('astroquery.esa.utils.utils.execute_servlet_request') @patch('astroquery.esa.utils.utils.download_file') @@ -607,12 +666,14 @@ def test_download_mosaic(self, instrument_band_mock, download_mock, servlet_mock epoch_mock.return_value = {'epoch': ['today']} isla = IntegralClass() + mock_instrument_bands(isla_module=isla) isla.download_mosaic(epoch='today', instrument='i1') args, kwargs = download_mock.call_args assert kwargs['params']['RETRIEVAL_TYPE'] == 'mosaics' download_mock.assert_called() + @patch('astroquery.esa.integral.core.pyvo.dal.TAPService.capabilities', []) @patch('astroquery.esa.utils.utils.execute_servlet_request') @patch('astroquery.esa.integral.core.IntegralClass.get_instrument_band_map') def test_get_source_metadata(self, instrument_band_mock, servlet_mock): @@ -620,6 +681,7 @@ def test_get_source_metadata(self, instrument_band_mock, servlet_mock): servlet_mock.return_value = {} isla = IntegralClass() + mock_instrument_bands(isla_module=isla) isla.get_source_metadata(target_name='test') args, kwargs = servlet_mock.call_args diff --git a/astroquery/esa/utils/utils.py b/astroquery/esa/utils/utils.py index ed5a77e7b4..2dda13eb93 100644 --- a/astroquery/esa/utils/utils.py +++ b/astroquery/esa/utils/utils.py @@ -475,10 +475,9 @@ def resolve_target(url, session, target_name, target_resolver): if target_resolver not in TARGET_RESOLVERS: raise ValueError("This target resolver is not allowed") - params = {'TAPCLIENT': 'ASTROQUERY'} resolver_url = url.format(target_name, target_resolver) - with session.get(resolver_url, stream=True, params=params) as response: + with session.get(resolver_url, stream=True) as response: response.raise_for_status() try: