Skip to content

Commit 8e7fa23

Browse files
committed
Add warning to use if duplicate downloads are culled
1 parent 44e6f36 commit 8e7fa23

File tree

3 files changed

+21
-6
lines changed

3 files changed

+21
-6
lines changed

astroquery/exceptions.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@
77

88
__all__ = ['TimeoutError', 'InvalidQueryError', 'RemoteServiceError',
99
'TableParseError', 'LoginError', 'ResolverError',
10-
'NoResultsWarning', 'LargeQueryWarning', 'InputWarning',
11-
'AuthenticationWarning', 'MaxResultsWarning', 'CorruptDataWarning']
10+
'NoResultsWarning', 'DuplicateResultsWarning', 'LargeQueryWarning',
11+
'InputWarning', 'AuthenticationWarning', 'MaxResultsWarning',
12+
'CorruptDataWarning']
1213

1314

1415
class TimeoutError(Exception):
@@ -67,6 +68,13 @@ class NoResultsWarning(AstropyWarning):
6768
pass
6869

6970

71+
class DuplicateResultsWarning(AstropyWarning):
72+
"""
73+
Astroquery warning class to be issued when a query returns no result.
74+
"""
75+
pass
76+
77+
7078
class LargeQueryWarning(AstropyWarning):
7179
"""
7280
Astroquery warning class to be issued when a query is larger than

astroquery/mast/observations.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
from ..utils import commons, async_to_sync
3232
from ..utils.class_or_instance import class_or_instance
3333
from ..exceptions import (TimeoutError, InvalidQueryError, RemoteServiceError,
34-
ResolverError, MaxResultsWarning,
34+
ResolverError, MaxResultsWarning, DuplicateResultsWarning,
3535
NoResultsWarning, InputWarning, AuthenticationWarning)
3636

3737
from . import conf, utils
@@ -715,7 +715,12 @@ def download_products(self, products, *, download_dir=None,
715715
products = vstack(product_lists)
716716

717717
# Remove duplicate products
718+
number = len(products)
718719
products = unique(products, keys="dataURI")
720+
number_unique = len(products)
721+
if number_unique < number:
722+
warnings.warn(f"{number - number_unique} of {number} products were duplicates."
723+
f"Only downloading {number_unique} unique product(s).", DuplicateResultsWarning)
719724

720725
# apply filters
721726
products = self.filter_products(products, mrp_only=mrp_only, **filters)

astroquery/mast/tests/test_mast_remote.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@
1414
from astroquery import mast
1515

1616
from ..utils import ResolverError
17-
from ...exceptions import InvalidQueryError, MaxResultsWarning, NoResultsWarning, RemoteServiceError
17+
from ...exceptions import (InvalidQueryError, MaxResultsWarning, NoResultsWarning,
18+
DuplicateResultsWarning, RemoteServiceError)
1819

1920

2021
OBSID = '1647157'
@@ -302,8 +303,9 @@ def test_observations_download_products_noduplicates(self, tmpdir):
302303
assert len(products) == 6
303304

304305
# Download the product
305-
manifest = mast.Observations.download_products(products,
306-
download_dir=str(tmpdir))
306+
with pytest.warns(DuplicateResultsWarning):
307+
manifest = mast.Observations.download_products(products,
308+
download_dir=str(tmpdir))
307309

308310
# Check that it downloads the MSA config file only once
309311
assert len(manifest) == 1

0 commit comments

Comments
 (0)