Source code for astroquery.mast.core

# Licensed under a 3-clause BSD style license - see LICENSE.rst

This the base class for MAST queries.

import warnings

from astropy.utils import deprecated
from astropy.utils.exceptions import AstropyDeprecationWarning

from ..query import QueryWithLogin

from . import utils
from .auth import MastAuth
from .cloud import CloudAccess
from .discovery_portal import PortalAPI
from .services import ServiceAPI

__all__ = []

class MastQueryWithLogin(QueryWithLogin):
    Super class for MAST functionality (should not be called directly by users).

    def __init__(self, mast_token=None):


        # Initializing API connections
        self._portal_api_connection = PortalAPI(self._session)
        self._service_api_connection = ServiceAPI(self._session)

        if mast_token:
            self._authenticated = self._auth_obj = MastAuth(self._session, mast_token)
            self._auth_obj = MastAuth(self._session)

        self._cloud_connection = None

    def _login(self, token=None, store_token=False, reenter_token=False):
        Log into the MAST portal.

        token : string, optional
            Default is None.
            The token to authenticate the user.
            This can be generated at
            If not supplied, it will be prompted for if not in the keyring or set via $MAST_API_TOKEN
        store_token : bool, optional
            Default False.
            If true, MAST token will be stored securely in your keyring.
        reenter_token :  bool, optional
            Default False.
            Asks for the token even if it is already stored in the keyring or $MAST_API_TOKEN environment variable.
            This is the way to overwrite an already stored password on the keyring.

        return self._auth_obj.login(token, store_token, reenter_token)

    @deprecated(since="v0.3.9", message=("The get_token function is deprecated, "
                                         "session token is now the token used for login."))
    def get_token(self):
        return None

    def session_info(self, silent=None, verbose=None):
        Displays information about current MAST user, and returns user info dictionary.

        silent :
            Deprecated. Use verbose instead.
        verbose : bool, optional
            Default True. Set to False to suppress output to stdout.

        response : dict

        # Dealing with deprecated argument
        if (silent is not None) and (verbose is not None):
            warnings.warn(("Argument 'silent' has been deprecated, "
                           "will be ignored in favor of 'verbose'"), AstropyDeprecationWarning)
        elif silent is not None:
            warnings.warn(("Argument 'silent' has been deprecated, "
                           "and will be removed in the future. "
                           " Use 'verbose' instead."), AstropyDeprecationWarning)
            verbose = not silent
        elif (silent is None) and (verbose is None):
            verbose = True

        return self._auth_obj.session_info(verbose)

    def logout(self):
        Log out of current MAST session.
        self._authenticated = False

    @deprecated(since="v0.3.9", alternative="enable_cloud_dataset")
    def enable_s3_hst_dataset(self):
        return self.enable_cloud_dataset()

    def enable_cloud_dataset(self, provider="AWS", profile=None, verbose=True):
        Enable downloading public files from S3 instead of MAST.
        Requires the boto3 library to function.

        provider : str
            Which cloud data provider to use.  We may in the future support multiple providers,
            though at the moment this argument is ignored.
        profile : str
            Profile to use to identify yourself to the cloud provider (usually in ~/.aws/config).
        verbose : bool
            Default True.
            Logger to display extra info and warning.

        self._cloud_connection = CloudAccess(provider, profile, verbose)

    @deprecated(since="v0.3.9", alternative="disable_cloud_dataset")
    def disable_s3_hst_dataset(self):
        return self.disable_cloud_dataset()

    def disable_cloud_dataset(self):
        Disables downloading public files from S3 instead of MAST
        self._cloud_connection = None

    def resolve_object(self, objectname):
        Resolves an object name to a position on the sky.

        objectname : str
            Name of astronomical object to resolve.

        response : `~astropy.coordinates.SkyCoord`
            The sky position of the given object.
        return utils.resolve_object(objectname)