[docs]defget_valid_access_token()->str:"""Authenticate at Mantik. Returns ------- Access Token: str Notes ----- Mantik prioritizes the username and password environment variables over the token variable, causing an `Unauthorized` error. As a consequence, these have to be unset before setting the token variable. The tokens will be stored in a file `~/.mantik/tokens.json` to reuse tokens and refresh them only if they have expired. """logger.debug("Getting tokens")tokens=_get_and_store_tokens()returntokens.access_token
def_get_and_store_tokens()->_tokens.Tokens:ifnot_MANTIK_TOKEN_FILE.exists():logger.debug("No existing tokens file found at %s",_MANTIK_TOKEN_FILE.as_posix())return_create_and_store_new_tokens()return_read_stored_tokens()def_create_and_store_new_tokens()->_tokens.Tokens:logger.debug("Creating new tokens to store to %s",_MANTIK_TOKEN_FILE.as_posix())tokens=api.create_tokens()tokens.write_to_file(_MANTIK_TOKEN_FILE)returntokensdef_read_stored_tokens()->_tokens.Tokens:logger.debug("Reading stored tokens from file %s",_MANTIK_TOKEN_FILE.as_posix())tokens=_tokens.Tokens.from_file(_MANTIK_TOKEN_FILE)iftokens.has_expired:logger.debug("Access token has expired")refreshed=api.refresh_tokens(tokens=tokens)refreshed.write_to_file(_MANTIK_TOKEN_FILE)returnrefreshedreturntokens