From f44df1065b00968b239d76ab9037de37be11067c Mon Sep 17 00:00:00 2001 From: Sam Bianco Date: Wed, 10 Jul 2024 13:46:54 -0400 Subject: [PATCH 1/2] bugfix for pagesize and page in catalogs.query_criteria --- CHANGES.rst | 2 ++ astroquery/mast/collections.py | 2 ++ astroquery/mast/services.py | 14 +++++----- astroquery/mast/tests/test_mast_remote.py | 32 ++++++++++++++++++++--- 4 files changed, 40 insertions(+), 10 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index d3ae861374..ba5df5939f 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -157,6 +157,8 @@ mast - Add ``verbose`` parameter to modulate output in ``mast.observations.download_products`` method. [#3031] +- Fix bug in ``Catalogs.query_criteria()`` to use ``page`` and ``pagesize`` parameters correctly. [#3065] + 0.4.7 (2024-03-08) diff --git a/astroquery/mast/collections.py b/astroquery/mast/collections.py index 883b0b93f1..9d56e31ce1 100644 --- a/astroquery/mast/collections.py +++ b/astroquery/mast/collections.py @@ -225,6 +225,8 @@ def query_criteria_async(self, catalog, *, pagesize=None, page=None, **criteria) Parameters ---------- + catalog : str + The catalog to be queried. pagesize : int, optional Can be used to override the default pagesize. E.g. when using a slow internet connection. diff --git a/astroquery/mast/services.py b/astroquery/mast/services.py index 4c540deb03..96b8130345 100644 --- a/astroquery/mast/services.py +++ b/astroquery/mast/services.py @@ -222,7 +222,7 @@ def _parse_result(self, response, verbose=False, data_key='data'): return result_table @class_or_instance - def service_request_async(self, service, params, page_size=None, page=None, use_json=False, **kwargs): + def service_request_async(self, service, params, pagesize=None, page=None, use_json=False, **kwargs): """ Given a MAST fabric service and parameters, builds and executes a fabric microservice catalog query. See documentation `here `__ @@ -234,7 +234,7 @@ def service_request_async(self, service, params, page_size=None, page=None, use_ The MAST catalogs service to query. Should be present in self.SERVICES params : dict JSON object containing service parameters. - page_size : int, optional + pagesize : int, optional Default None. Can be used to override the default pagesize (set in configs) for this query only. E.g. when using a slow internet connection. @@ -273,13 +273,13 @@ def service_request_async(self, service, params, page_size=None, page=None, use_ catalogs_request = [] if not page: page = params.pop('page', None) - if not page_size: - page_size = params.pop('page_size', None) + if not pagesize: + pagesize = params.pop('pagesize', None) if page is not None: catalogs_request.append(('page', page)) - if page_size is not None: - catalogs_request.append(('pagesize', page_size)) + if pagesize is not None: + catalogs_request.append(('pagesize', pagesize)) if not use_json: # Decompose filters, sort @@ -331,7 +331,7 @@ def _build_catalogs_params(self, params): if prop == 'format': # Ignore format changes continue - elif prop == 'page_size': + elif prop == 'pagesize': catalog_params.extend(('pagesize', value)) elif prop == 'sort_by': # Loop through each value if list diff --git a/astroquery/mast/tests/test_mast_remote.py b/astroquery/mast/tests/test_mast_remote.py index e1ddfea34b..086f61e728 100644 --- a/astroquery/mast/tests/test_mast_remote.py +++ b/astroquery/mast/tests/test_mast_remote.py @@ -74,11 +74,14 @@ def test_mast_service_request(self): 'dec': 54.5, 'radius': 0.001} - result = Mast.service_request(service, params) + result = Mast.service_request(service, params, pagesize=10, page=2) # Is result in the right format assert isinstance(result, Table) + # Is result limited to ten rows + assert len(result) == 10 + # Are the GALEX observations in the results table assert "GALEX" in result['obs_collection'] @@ -532,15 +535,18 @@ def check_result(result, row, exp_values): radius=0.01*u.deg, catalog="panstarrs", table="mean") row = np.where((result['objName'] == 'PSO J322.4622+12.1920') & (result['yFlags'] == 16777496)) + second_id = result[1]['objID'] assert isinstance(result, Table) np.testing.assert_allclose(result[row]['distance'], 0.039381703406789904) result = Catalogs.query_region("322.49324 12.16683", radius=0.01*u.deg, catalog="panstarrs", table="mean", - page_size=3) + pagesize=1, + page=2) assert isinstance(result, Table) - assert len(result) == 3 + assert len(result) == 1 + assert second_id == result[0]['objID'] result = Catalogs.query_region("158.47924 -7.30962", radius=in_radius, @@ -588,6 +594,16 @@ def check_result(result, exp_values): radius=.001, catalog="TIC") check_result(result, {'ID': '1305764225'}) + second_id = result[1]['ID'] + + result = Catalogs.query_object("M10", + radius=.001, + catalog="TIC", + pagesize=1, + page=2) + assert isinstance(result, Table) + assert len(result) == 1 + assert second_id == result[0]['ID'] result = Catalogs.query_object("M10", radius=.001, @@ -681,6 +697,16 @@ def check_result(result, exp_vals): Bmag=[30, 50], objType="STAR") check_result(result, {'ID': '81609218'}) + second_id = result[1]['ID'] + + result = Catalogs.query_criteria(catalog="Tic", + Bmag=[30, 50], + objType="STAR", + pagesize=1, + page=2) + assert isinstance(result, Table) + assert len(result) == 1 + assert second_id == result[0]['ID'] result = Catalogs.query_criteria(catalog="ctl", Tmag=[10.5, 11], From 126ea0568e48cdfa832db9c830fafbacb6036e2d Mon Sep 17 00:00:00 2001 From: Sam Bianco Date: Wed, 10 Jul 2024 21:48:57 -0400 Subject: [PATCH 2/2] deprecation decorator for service_request_async() syntax fix swap order of decorators --- astroquery/mast/services.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/astroquery/mast/services.py b/astroquery/mast/services.py index 96b8130345..944fcd895e 100644 --- a/astroquery/mast/services.py +++ b/astroquery/mast/services.py @@ -12,6 +12,7 @@ import numpy as np from astropy.table import Table, MaskedColumn +from astropy.utils.decorators import deprecated_renamed_argument from ..query import BaseQuery from ..utils import async_to_sync @@ -222,6 +223,7 @@ def _parse_result(self, response, verbose=False, data_key='data'): return result_table @class_or_instance + @deprecated_renamed_argument('page_size', 'pagesize', since='0.4.8') def service_request_async(self, service, params, pagesize=None, page=None, use_json=False, **kwargs): """ Given a MAST fabric service and parameters, builds and executes a fabric microservice catalog query.