Source code for steamship.cli.login

import time
import webbrowser

import requests

from steamship.base.error import SteamshipError
from steamship.cli.utils import is_in_replit


[docs] def login(api_base: str, web_base: str) -> str: # noqa: C901 # create login token try: token_result = requests.post(api_base + "account/create_login_attempt") token_data = token_result.json().get("data") except Exception as e: raise SteamshipError("Could not create login token when attempting login.", error=e) if token_data is None: raise SteamshipError("Could not create login token when attempting login.") token = token_data.get("token") if token is None: raise SteamshipError("Could not create login token when attempting login.") # Launch login attempt in browser login_browser_url = ( f"{web_base}account/client-login?attemptToken={token}&client=pycli&version=0.0.1" ) opened_browser = False if not is_in_replit(): try: opened_browser = webbrowser.open(login_browser_url) except Exception as e: raise SteamshipError("Exception attempting to launch browser for login.", error=e) if not opened_browser: raise SteamshipError( """Could not launch browser to log in to Steamship. If you are in Replit: 1) Get an API key at https://steamship.com/account/api 2) Set the STEAMSHIP_API_KEY Replit Secret 3) Close and reopen this shell so that secrets refresh If you are in a different headless environment, visit https://docs.steamship.com/configuration/authentication.html""" ) # Wait on result total_poll_time_s = 0 time_between_polls_s = 1 api_key = None while total_poll_time_s < 300: # Five minutes params = {"token": token} login_response = requests.post(f"{api_base}account/poll_login_attempt", json=params).json() if login_response.get("data", {}).get("status") == "done": api_key = login_response.get("data", {}).get("apiKey") break time.sleep(time_between_polls_s) total_poll_time_s += time_between_polls_s if api_key is None: raise SteamshipError("Could not fetch api key after login attempt in allotted time.") return api_key