Beispiel #1
0
 def set_token(cls, token):
     logger.debug("Putting the key {} into {}.".format(
         token, config.TOKEN_FILE_PATH))
     path = Path(config.TOKEN_FILE_PATH)
     os.makedirs(path.parent, exist_ok=True)
     with open(config.TOKEN_FILE_PATH, "w") as f:
         f.write(token)
Beispiel #2
0
def login_fn(username, password):
    """ Logs in to Snark AI"""
    token = ""
    if token:
        logger.info("Token login.")
        logger.degug("Getting the token...")
        token = click.prompt(
            "Please paste the authentication token from {}".format(
                config.GET_TOKEN_REST_SUFFIX, type=str, hide_input=True))
        token = token.strip()
        AuthClient.check_token(token)
    else:
        logger.info(
            "Please log in using Activeloop credentials. You can register at https://app.activeloop.ai "
        )
        if not username:
            logger.debug("Prompting for username.")
            username = click.prompt("Username", type=str)
        username = username.strip()
        if not password:
            logger.debug("Prompting for password.")
            password = click.prompt("Password", type=str, hide_input=True)
        password = password.strip()
        token = AuthClient().get_access_token(username, password)
    TokenManager.set_token(token)
    HubControlClient().get_credentials()
    logger.info("Login Successful.")
Beispiel #3
0
 def safety_wrapper(self, gen):
     while True:
         try:
             yield next(gen)
         except StopIteration:
             break
         except Exception as e:
             logger.debug(e)
Beispiel #4
0
 def get_token(cls):
     logger.debug("Getting token...")
     if not os.path.exists(config.TOKEN_FILE_PATH):
         return None
     with open(config.TOKEN_FILE_PATH) as f:
         token = f.read()
     logger.debug(f"Got the key {token} from {config.TOKEN_FILE_PATH}.")
     return token
Beispiel #5
0
 def get_token(cls):
     logger.debug("Getting token...")
     if not os.path.exists(config.TOKEN_FILE_PATH):
         return None
     with open(config.TOKEN_FILE_PATH, "r") as f:
         token = f.read()
     logger.debug("Got the key {} from {}.".format(token,
                                                   config.TOKEN_FILE_PATH))
     return token
Beispiel #6
0
    def check_response_status(self, response):
        """
        Check response status and throw corresponding exception on failure
        """
        code = response.status_code
        if code < 200 or code >= 300:
            try:
                message = response.json()["description"]
            except Exception:
                message = " "

            logger.debug(f'Error received: status code: {code}, message: "{message}"')
            if code == 400:
                raise BadRequestException(response)
            elif response.status_code == 401:
                raise AuthenticationException()
            elif response.status_code == 403:
                raise AuthorizationException()
            elif response.status_code == 404:
                if message != " ":
                    raise NotFoundException(message)
                else:
                    raise NotFoundException
            elif response.status_code == 429:
                raise OverLimitException(message)
            elif response.status_code == 502:
                raise BadGatewayException()
            elif response.status_code == 504:
                raise GatewayTimeoutException(message)
            elif response.status_code == 423:
                raise LockedException(message)
            elif 500 <= response.status_code < 600:
                if "Server under maintenance" in response.content.decode():
                    raise ServerException(
                        "Server under maintenance, please try again later."
                    )
                else:
                    raise ServerException()
            else:
                msg = "An error occurred. Server response: {}".format(
                    response.status_code
                )
                raise HubException(message=msg)
Beispiel #7
0
    def request(
        self,
        method,
        relative_url,
        endpoint=None,
        params={},
        data={},
        files={},
        json={},
        timeout=config.DEFAULT_TIMEOUT,
        headers={},
    ):
        if not endpoint:
            endpoint = config.HUB_REST_ENDPOINT

        request_url = urljoin(endpoint, relative_url)
        headers["hub-cli-version"] = get_cli_version()
        if (
            "Authorization" not in headers
            or headers["Authorization"] != self.auth_header
        ):
            headers["Authorization"] = self.auth_header

        try:
            logger.debug(f"Sending: Headers {headers}, Json: {json}")

            response = requests.request(
                method,
                request_url,
                params=params,
                data=data,
                json=json,
                headers=headers,
                files=files,
                timeout=timeout,
            )

        except requests.exceptions.ConnectionError as e:
            logger.debug("Exception: {}".format(e, exc_info=True))
            sys.exit("Connection error. Please retry or check your internet connection")
        except requests.exceptions.Timeout as e:
            logger.debug("Exception: {}".format(e, exc_info=True))
            sys.exit(
                "Connection timeout. Please retry or check your internet connection"
            )
        logger.debug(
            "Response Content: {}, Headers: {}".format(
                response.content, response.headers
            )
        )
        self.check_response_status(response)
        return response
Beispiel #8
0
def register(username, email, password):
    """ Register at Activeloop AI"""
    if not username:
        logger.debug("Prompting for username.")
        username = click.prompt("Username", type=str)
    username = username.strip()
    if not email:
        logger.debug("Prompting for email.")
        email = click.prompt("Email", type=str)
    email = email.strip()
    if not password:
        logger.debug("Prompting for password.")
        password = click.prompt("Password", type=str, hide_input=True)
    password = password.strip()
    AuthClient().register(username, email, password)
    token = AuthClient().get_access_token(username, password)
    TokenManager.set_token(token)
    consent_message = textwrap.dedent("""
        Privacy policy:
        We collect basic system information and crash reports so that we can keep
        improving your experience using Hub to work with your data.

        You can find out more by reading our privacy policy:
            https://www.activeloop.ai/privacy/

        If you would like to opt out of reporting crashes and system information,
        run the following command:
            $ hub reporting --off
        """)
    logger.info(consent_message)
    configure_reporting(True, username=username)
Beispiel #9
0
def register(username, email, password):
    """ Register at Activeloop AI"""
    if not username:
        logger.debug("Prompting for username.")
        username = click.prompt("Username", type=str)
    username = username.strip()
    if not email:
        logger.debug("Prompting for email.")
        email = click.prompt("Email", type=str)
    email = email.strip()
    if not password:
        logger.debug("Prompting for password.")
        password = click.prompt("Password", type=str, hide_input=True)
    password = password.strip()
    AuthClient().register(username, email, password)
    token = AuthClient().get_access_token(username, password)
    TokenManager.set_token(token)
Beispiel #10
0
 def purge_token(cls):
     logger.debug("Purging token...")
     if os.path.isfile(config.TOKEN_FILE_PATH):
         os.remove(config.TOKEN_FILE_PATH)
Beispiel #11
0
 def get_auth_header(cls):
     logger.debug("Constructing auth header...")
     token = cls.get_token()
     if token:
         return f"Bearer {token}"
     return None
Beispiel #12
0
 def get_auth_header(cls):
     logger.debug("Constructing auth header...")
     token = cls.get_token()
     if token:
         return "Bearer {}".format(token)
     return None