Esempio n. 1
0
def test_cutout_no_table(patch_get):
    casda = Casda()
    fake_login(casda, USERNAME, PASSWORD)

    casda.POLL_INTERVAL = 1
    result = casda.cutout(None)
    assert result == []
Esempio n. 2
0
    def test_query_region_text_radius(self):
        ra = 333.9092
        dec = -45.8418
        radius = 0.5
        query_payload = Casda.query_region('22h15m38.2s -45d50m30.5s',
                                           radius=radius * u.deg,
                                           cache=False,
                                           get_query_payload=True)
        assert isinstance(query_payload, dict)
        assert 'POS' in query_payload
        assert query_payload['POS'].startswith('CIRCLE 333')
        pos_parts = query_payload['POS'].split(' ')
        assert pos_parts[0] == 'CIRCLE'
        assert math.isclose(float(pos_parts[1]), ra, abs_tol=1e-4)
        assert math.isclose(float(pos_parts[2]), dec, abs_tol=1e-4)
        assert math.isclose(float(pos_parts[3]), radius)
        assert len(pos_parts) == 4

        responses = Casda.query_region('22h15m38.2s -45d50m30.5s',
                                       radius=0.5 * u.arcmin,
                                       cache=False)
        assert isinstance(responses, Table)
        assert len(responses) > 1
        print(responses[0])
        for key in ('dataproduct_type', 'obs_id', 'access_url',
                    'access_format', 'obs_release_date'):
            assert key in responses.keys()
Esempio n. 3
0
def test_query_region_async_box(patch_get):
    ra = 333.9092
    dec = -45.8418
    width = 0.5
    height = 0.2
    centre = SkyCoord(ra, dec, unit=('deg', 'deg'))
    query_payload = Casda.query_region_async(centre,
                                             width=width * u.deg,
                                             height=height * u.deg,
                                             cache=False,
                                             get_query_payload=True)
    assert isinstance(query_payload, dict)
    assert 'POS' in query_payload
    assert query_payload['POS'].startswith('RANGE 333')
    pos_parts = query_payload['POS'].split(' ')
    assert pos_parts[0] == 'RANGE'
    assert isclose(float(pos_parts[1]), ra - width / 2, abs_tol=1e-5)
    assert isclose(float(pos_parts[2]), ra + width / 2, abs_tol=1e-5)
    assert isclose(float(pos_parts[3]), dec - height / 2, abs_tol=1e-5)
    assert isclose(float(pos_parts[4]), dec + height / 2, abs_tol=1e-5)
    assert len(pos_parts) == 5

    responses = Casda.query_region_async(centre,
                                         width=width * u.deg,
                                         height=height * u.deg,
                                         cache=False)
    assert isinstance(responses, MockResponse)
Esempio n. 4
0
def test_stage_data_unauthorised(patch_get):
    table = Table()

    with pytest.raises(ValueError) as excinfo:
        Casda.stage_data(table)

    assert "Credentials must be supplied" in str(excinfo.value)
Esempio n. 5
0
def test_stage_data_invalid_credentials(patch_get):
    prefix = 'https://somewhere/casda/datalink/links?'
    access_urls = [prefix + 'cube-220']
    table = Table([Column(data=access_urls, name='access_url')])

    casda = Casda('user', 'notthepassword')
    with pytest.raises(requests.exceptions.HTTPError) as excinfo:
        casda.stage_data(table)
Esempio n. 6
0
def test_stage_data(patch_get):
    prefix = 'https://somewhere/casda/datalink/links?'
    access_urls = [prefix + 'cube-244']
    table = Table([Column(data=access_urls, name='access_url')])
    casda = Casda('user', 'password')
    casda.POLL_INTERVAL = 1
    urls = casda.stage_data(table, verbose=True)
    assert urls == ['http://casda.csiro.au/download/web/111-000-111-000/askap_img.fits.checksum',
                    'http://casda.csiro.au/download/web/111-000-111-000/askap_img.fits']
Esempio n. 7
0
def test_login_keyring(patch_get):
    casda = Casda()
    assert casda._authenticated is False
    assert casda.USERNAME == ''
    keyring.set_password("astroquery:casda.csiro.au", USERNAME, PASSWORD)

    casda.login(username=USERNAME)
    keyring.delete_password("astroquery:casda.csiro.au", USERNAME)
    assert casda._authenticated is True
    assert casda.USERNAME == USERNAME
    assert casda._auth == (USERNAME, PASSWORD)
Esempio n. 8
0
    def test_stage_data(self):
        prefix = 'https://data.csiro.au/casda_vo_proxy/vo/datalink/links?ID='
        access_urls = [prefix + 'cube-1262']
        table = Table([Column(data=access_urls, name='access_url')])
        casda = Casda(os.environ['CASDA_USER'], os.environ['CASDA_PASSWD'])
        casda.POLL_INTERVAL = 3
        urls = casda.stage_data(table)

        assert str(urls[0]).endswith('image_cube_g300to310.q.fits')
        assert str(urls[1]).endswith('image_cube_g300to310.q.fits.checksum')
        assert len(urls) == 2
Esempio n. 9
0
def test_stage_data_no_link(patch_get):
    prefix = 'https://somewhere/casda/datalink/links?'
    access_urls = [prefix + 'cube-240']
    table = Table([Column(data=access_urls, name='access_url')])
    casda = Casda('user', 'password')
    casda.POLL_INTERVAL = 1

    with pytest.raises(ValueError) as excinfo:
        casda.stage_data(table)

    assert "You do not have access to any of the requested data files." in str(excinfo.value)
Esempio n. 10
0
def test_login_no_default_user():
    casda = Casda()
    assert casda._authenticated is False
    assert casda.USERNAME == ''

    with pytest.raises(
            LoginError,
            match=r"If you do not pass a username to login\(\),") as excinfo:
        Casda.login()

    assert casda._authenticated is False
    assert casda.USERNAME == ''
    assert hasattr(casda, '_auth') is False
Esempio n. 11
0
def test_stage_data_no_link(patch_get):
    prefix = 'https://somewhere/casda/datalink/links?'
    access_urls = [prefix + 'cube-240']
    table = Table([Column(data=access_urls, name='access_url')])
    casda = Casda()
    fake_login(casda, USERNAME, PASSWORD)
    casda.POLL_INTERVAL = 1

    with pytest.raises(
            ValueError,
            match=r"You do not have access to any of the requested data files\."
    ) as excinfo:
        casda.stage_data(table)
Esempio n. 12
0
def test_cutout_unauthorised(patch_get):
    prefix = 'https://somewhere/casda/datalink/links?'
    access_urls = [prefix + 'cube-244']
    table = Table([Column(data=access_urls, name='access_url')])
    ra = 333.9092 * u.deg
    dec = -45.8418 * u.deg
    radius = 30 * u.arcmin
    centre = SkyCoord(ra, dec)

    with pytest.raises(
            ValueError,
            match=r"Credentials must be supplied to download CASDA image data"
    ) as excinfo:
        Casda.cutout(table, coordinates=centre, radius=radius, verbose=True)
Esempio n. 13
0
def test_args_to_payload_channel(patch_get):
    casda = Casda()
    fake_login(casda, USERNAME, PASSWORD)

    payload = casda._args_to_payload(channel=(0, 30))
    assert payload['CHANNEL'] == '0 30'
    assert list(payload.keys()) == ['CHANNEL']

    payload = casda._args_to_payload(channel=np.array([17, 23]))
    assert payload['CHANNEL'] == '17 23'
    assert list(payload.keys()) == ['CHANNEL']

    payload = casda._args_to_payload(channel=(23, 17))
    assert payload['CHANNEL'] == '17 23'
    assert list(payload.keys()) == ['CHANNEL']
Esempio n. 14
0
def test_download_file(patch_get):
    urls = [
        'https://ingest.pawsey.org/bucket_name/path/askap_img.fits?security=stuff',
        'http://casda.csiro.au/download/web/111-000-111-000/askap_img.fits.checksum',
        'https://ingest.pawsey.org.au/casda-prd-as110-01/dc52217/primary_images/RACS-DR1_0000%2B18A.fits?security=stuff'
    ]
    casda = Casda()
    fake_login(casda, USERNAME, PASSWORD)

    # skip the actual downloading of the file
    download_mock = MagicMock()
    casda._download_file = download_mock

    filenames = casda.download_files(urls)
    assert filenames[0].endswith('askap_img.fits')
    assert filenames[1].endswith('askap_img.fits.checksum')
    assert filenames[2].endswith('RACS-DR1_0000+18A.fits')
Esempio n. 15
0
def test_args_to_payload_combined(patch_get):
    casda = Casda()
    fake_login(casda, USERNAME, PASSWORD)
    cutout_coords = SkyCoord(ra=187.5 * u.degree,
                             dec=-60.0 * u.degree,
                             frame='icrs')
    payload = casda._args_to_payload(coordinates=cutout_coords,
                                     channel=(17, 23))
    assert payload['POS'].startswith('CIRCLE 187')
    pos_parts = payload['POS'].split(' ')
    assert pos_parts[0] == 'CIRCLE'
    assert isclose(float(pos_parts[1]), 187.5, abs_tol=1e-4)
    assert isclose(float(pos_parts[2]), -60.0, abs_tol=1e-4)
    assert isclose(float(pos_parts[3]), 1 / 60)
    assert len(pos_parts) == 4
    assert payload['CHANNEL'] == '17 23'
    assert set(payload.keys()) == set(['CHANNEL', 'POS'])
Esempio n. 16
0
def test_args_to_payload_coordinates(patch_get):
    casda = Casda()
    fake_login(casda, USERNAME, PASSWORD)

    cutout_coords = SkyCoord(ra=345.245 * u.degree,
                             dec=-32.125 * u.degree,
                             frame='icrs')
    payload = casda._args_to_payload(coordinates=cutout_coords)
    assert payload['POS'].startswith('CIRCLE 345')
    pos_parts = payload['POS'].split(' ')
    assert pos_parts[0] == 'CIRCLE'
    assert isclose(float(pos_parts[1]), 345.245, abs_tol=1e-4)
    assert isclose(float(pos_parts[2]), -32.125, abs_tol=1e-4)
    assert isclose(float(pos_parts[3]), 1 / 60)
    assert len(pos_parts) == 4
    assert list(payload.keys()) == ['POS']

    cutout_coords = SkyCoord(ra=187.5 * u.degree,
                             dec=-60.0 * u.degree,
                             frame='icrs')
    payload = casda._args_to_payload(coordinates=cutout_coords,
                                     radius=900 * u.arcsec)
    assert payload['POS'].startswith('CIRCLE 187')
    pos_parts = payload['POS'].split(' ')
    assert pos_parts[0] == 'CIRCLE'
    assert isclose(float(pos_parts[1]), 187.5, abs_tol=1e-4)
    assert isclose(float(pos_parts[2]), -60.0, abs_tol=1e-4)
    assert isclose(float(pos_parts[3]), 0.25)
    assert len(pos_parts) == 4
    assert list(payload.keys()) == ['POS']

    cutout_coords = SkyCoord(ra=187.5 * u.degree,
                             dec=-60.0 * u.degree,
                             frame='icrs')
    payload = casda._args_to_payload(coordinates=cutout_coords,
                                     width=2 * u.arcmin,
                                     height=3 * u.arcmin)
    assert payload['POS'].startswith('RANGE 187')
    pos_parts = payload['POS'].split(' ')
    assert pos_parts[0] == 'RANGE'
    assert isclose(float(pos_parts[1]), 187.5 - 1 / 60, abs_tol=1e-4)
    assert isclose(float(pos_parts[2]), 187.5 + 1 / 60, abs_tol=1e-4)
    assert isclose(float(pos_parts[3]), -60.0 - 1.5 / 60, abs_tol=1e-4)
    assert isclose(float(pos_parts[4]), -60.0 + 1.5 / 60, abs_tol=1e-4)
    assert len(pos_parts) == 5
    assert list(payload.keys()) == ['POS']
Esempio n. 17
0
def test_cutout(patch_get):
    prefix = 'https://somewhere/casda/datalink/links?'
    access_urls = [prefix + 'cube-244']
    table = Table([Column(data=access_urls, name='access_url')])
    ra = 333.9092 * u.deg
    dec = -45.8418 * u.deg
    radius = 30 * u.arcmin
    centre = SkyCoord(ra, dec)

    casda = Casda()
    fake_login(casda, USERNAME, PASSWORD)
    casda.POLL_INTERVAL = 1
    urls = casda.cutout(table, coordinates=centre, radius=radius, verbose=True)
    assert urls == [
        'http://casda.csiro.au/download/web/111-000-111-000/cutout.fits.checksum',
        'http://casda.csiro.au/download/web/111-000-111-000/cutout.fits'
    ]
Esempio n. 18
0
def test_query_region_async_radius(patch_get):
    ra = 333.9092
    dec = -45.8418
    radius = 0.5
    centre = SkyCoord(ra, dec, unit=('deg', 'deg'))
    query_payload = Casda.query_region_async(centre, radius=radius * u.deg, cache=False, get_query_payload=True)
    assert isinstance(query_payload, dict)
    assert 'POS' in query_payload
    assert query_payload['POS'].startswith('CIRCLE 333')
    pos_parts = query_payload['POS'].split(' ')
    assert pos_parts[0] == 'CIRCLE'
    assert isclose(float(pos_parts[1]), ra, abs_tol=1e-5)
    assert isclose(float(pos_parts[2]), dec, abs_tol=1e-5)
    assert isclose(float(pos_parts[3]), radius)
    assert len(pos_parts) == 4

    responses = Casda.query_region_async(centre, radius=0.5 * u.deg, cache=False)
    assert isinstance(responses, MockResponse)
Esempio n. 19
0
def test_cutout_no_args(patch_get):
    prefix = 'https://somewhere/casda/datalink/links?'
    access_urls = [prefix + 'cube-244']
    table = Table([Column(data=access_urls, name='access_url')])
    ra = 333.9092 * u.deg
    dec = -45.8418 * u.deg
    radius = 30 * u.arcmin
    centre = SkyCoord(ra, dec)

    casda = Casda()
    fake_login(casda, USERNAME, PASSWORD)
    casda.POLL_INTERVAL = 1
    with pytest.raises(
            ValueError,
            match=
            r"Please provide cutout parameters such as coordinates, band or channel\."
    ) as excinfo:
        casda.cutout(table)
Esempio n. 20
0
def test_query_region_text_radius(patch_get):
    ra = 333.9092
    dec = -45.8418
    radius = 0.5
    query_payload = Casda.query_region('22h15m38.2s -45d50m30.5s', radius=radius * u.deg, cache=False,
                                       get_query_payload=True)
    assert isinstance(query_payload, dict)
    assert 'POS' in query_payload
    assert query_payload['POS'].startswith('CIRCLE 333')
    pos_parts = query_payload['POS'].split(' ')
    assert pos_parts[0] == 'CIRCLE'
    assert isclose(float(pos_parts[1]), ra, abs_tol=1e-4)
    assert isclose(float(pos_parts[2]), dec, abs_tol=1e-4)
    assert isclose(float(pos_parts[3]), radius)
    assert len(pos_parts) == 4

    responses = Casda.query_region('22h15m38.2s -45d50m30.5s', radius=0.5 * u.deg, cache=False)
    assert isinstance(responses, Table)
    assert len(responses) == 3
Esempio n. 21
0
def test_filter_out_unreleased():
    all_records = parse(data_path('partial_unreleased.xml'), verify='warn').get_first_table().to_table()
    assert all_records[0]['obs_release_date'] == '2017-08-02T03:51:19.728Z'
    assert all_records[1]['obs_release_date'] == '2218-01-02T16:51:00.728Z'
    assert all_records[2]['obs_release_date'] == ''
    assert len(all_records) == 3

    # This should filter out the rows with either a future obs_release_date or no obs_release_date
    filtered = Casda.filter_out_unreleased(all_records)
    assert filtered[0]['obs_release_date'] == '2017-08-02T03:51:19.728Z'
    assert filtered[0]['obs_publisher_did'] == 'cube-502'
    assert len(filtered) == 1
Esempio n. 22
0
def test_args_to_payload_channel_invalid(patch_get):
    casda = Casda()
    fake_login(casda, USERNAME, PASSWORD)

    with pytest.raises(ValueError) as excinfo:
        casda._args_to_payload(channel='one')
    assert "The 'channel' value must be a list of 2 integer values." in str(
        excinfo.value)

    with pytest.raises(ValueError) as excinfo:
        casda._args_to_payload(channel=(1.42 * u.GHz, 1.5 * u.GHz))
    assert "The 'channel' value must be a list of 2 integer values." in str(
        excinfo.value)

    with pytest.raises(ValueError) as excinfo:
        casda._args_to_payload(channel=(None, 5))
    assert "The 'channel' value must be a list of 2 integer values." in str(
        excinfo.value)

    with pytest.raises(ValueError) as excinfo:
        casda._args_to_payload(channel=(5))
    assert "The 'channel' value must be a list of 2 integer values." in str(
        excinfo.value)
Esempio n. 23
0
def test_stage_data_invalid_credentials(patch_get):
    prefix = 'https://somewhere/casda/datalink/links?'
    access_urls = [prefix + 'cube-220']
    table = Table([Column(data=access_urls, name='access_url')])

    casda = Casda()
    # Update the casda object to indicate that it has been authenticated
    casda.USERNAME = USERNAME
    casda._auth = (USERNAME, 'notthepassword')
    casda._authenticated = True

    with pytest.raises(requests.exceptions.HTTPError) as excinfo:
        casda.stage_data(table)
Esempio n. 24
0
    def test_cutout(self, cached_credentials):
        prefix = 'https://data.csiro.au/casda_vo_proxy/vo/datalink/links?ID='
        access_urls = [prefix + 'cube-44705']
        table = Table([Column(data=access_urls, name='access_url')])
        casda = Casda()
        casda.login(username=os.environ['CASDA_USER'])
        casda.POLL_INTERVAL = 3
        pos = SkyCoord(196.49583333 * u.deg, -62.7 * u.deg)
        urls = casda.cutout(table, coordinates=pos, radius=15 * u.arcmin)

        # URLs may come back in any order
        for url in urls:
            if url.endswith('.checksum'):
                checksum_url = str(url)
            else:
                cutout_url = str(url)

        assert cutout_url.endswith('-imagecube-44705.fits')
        assert 'cutout-' in cutout_url
        assert checksum_url.endswith('-imagecube-44705.fits.checksum')
        assert len(urls) == 2
Esempio n. 25
0
def test_stage_data_unauthorised(patch_get):
    table = Table()

    with pytest.raises(ValueError,
                       match=r"Credentials must be supplied") as excinfo:
        Casda.stage_data(table)
Esempio n. 26
0
def test_stage_data_empty(patch_get):
    table = Table()
    casda = Casda('user', 'password')
    urls = casda.stage_data(table)
    assert urls == []
Esempio n. 27
0
def test_stage_data_empty(patch_get):
    table = Table()
    casda = Casda()
    fake_login(casda, USERNAME, PASSWORD)
    urls = casda.stage_data(table)
    assert urls == []
Esempio n. 28
0
def test_args_to_payload_band(patch_get):
    casda = Casda()
    fake_login(casda, USERNAME, PASSWORD)

    payload = casda._args_to_payload(band=(0.195 * u.m, 0.215 * u.m))
    assert payload['BAND'] == '0.195 0.215'
    assert list(payload.keys()) == ['BAND']

    payload = casda._args_to_payload(band=(0.215 * u.m, 0.195 * u.m))
    assert payload['BAND'] == '0.195 0.215'
    assert list(payload.keys()) == ['BAND']

    payload = casda._args_to_payload(band=(0.195 * u.m, 21.5 * u.cm))
    assert payload['BAND'] == '0.195 0.215'
    assert list(payload.keys()) == ['BAND']

    payload = casda._args_to_payload(band=(None, 0.215 * u.m))
    assert payload['BAND'] == '-Inf 0.215'
    assert list(payload.keys()) == ['BAND']

    payload = casda._args_to_payload(band=(0.195 * u.m, None))
    assert payload['BAND'] == '0.195 +Inf'
    assert list(payload.keys()) == ['BAND']

    payload = casda._args_to_payload(band=(1.42 * u.GHz, 1.5 * u.GHz))
    assert payload['BAND'] == '0.19986163866666667 0.21112144929577467'
    assert list(payload.keys()) == ['BAND']

    payload = casda._args_to_payload(band=np.array([1.5, 1.42]) * u.GHz)
    assert payload['BAND'] == '0.19986163866666667 0.21112144929577467'
    assert list(payload.keys()) == ['BAND']

    payload = casda._args_to_payload(band=(None, 1.5 * u.GHz))
    assert payload['BAND'] == '0.19986163866666667 +Inf'
    assert list(payload.keys()) == ['BAND']

    payload = casda._args_to_payload(band=(1.42 * u.GHz, None))
    assert payload['BAND'] == '-Inf 0.21112144929577467'
    assert list(payload.keys()) == ['BAND']
Esempio n. 29
0
def test_args_to_payload_band_invalid(patch_get):
    casda = Casda()
    fake_login(casda, USERNAME, PASSWORD)

    with pytest.raises(ValueError) as excinfo:
        casda._args_to_payload(band='foo')
    assert "The 'band' value must be a list of 2 wavelength or frequency values." in str(
        excinfo.value)

    with pytest.raises(ValueError) as excinfo:
        casda._args_to_payload(band=(0.195 * u.m, 0.215 * u.m, 0.3 * u.m))
    assert "The 'band' value must be a list of 2 wavelength or frequency values." in str(
        excinfo.value)

    with pytest.raises(ValueError) as excinfo:
        casda._args_to_payload(band=('a', 0.215 * u.m))
    assert "The 'band' value must be a list of 2 wavelength or frequency values." in str(
        excinfo.value)

    with pytest.raises(ValueError) as excinfo:
        casda._args_to_payload(band=(1.42 * u.GHz, 21 * u.cm))
    assert "The 'band' values must have the same kind of units." in str(
        excinfo.value)

    with pytest.raises(ValueError) as excinfo:
        casda._args_to_payload(band=[1.42 * u.radian, 21 * u.deg])
    assert "The 'band' values must be wavelengths or frequencies." in str(
        excinfo.value)

    with pytest.raises(ValueError) as excinfo:
        casda._args_to_payload(band=(1.42 * u.GHz, 1.5 * u.GHz),
                               channel=(5, 10))
    assert "Either 'channel' or 'band' values may be provided but not both." in str(
        excinfo.value)