From 83523a34424e837392b91a8286f13b9948fd4b74 Mon Sep 17 00:00:00 2001 From: mike0sv Date: Fri, 25 Nov 2022 14:26:25 +0300 Subject: [PATCH 1/2] Suggest running heroku login on missing creds closes #501 --- mlem/contrib/heroku/utils.py | 4 ++++ tests/contrib/test_heroku.py | 21 ++++++++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/mlem/contrib/heroku/utils.py b/mlem/contrib/heroku/utils.py index 45ff704d..2f0d6470 100644 --- a/mlem/contrib/heroku/utils.py +++ b/mlem/contrib/heroku/utils.py @@ -44,6 +44,10 @@ def heroku_api_request( try: r.raise_for_status() except HTTPError as e: + if e.response.reason == "Unauthorized": + raise DeploymentError( + "Invalid credentials. Please run `heroku login` or set HEROKU_API_KEY env" + ) from e raise DeploymentError(r.json()["message"]) from e return r.json() diff --git a/tests/contrib/test_heroku.py b/tests/contrib/test_heroku.py index 68e2072f..cfbff03f 100644 --- a/tests/contrib/test_heroku.py +++ b/tests/contrib/test_heroku.py @@ -89,7 +89,6 @@ def test_create_app(heroku_app_name, heroku_env, model): heroku_deploy = HerokuDeployment( app_name=name, env=heroku_env, - model=model.make_link(), team=HEROKU_TEAM, ) create_app(heroku_deploy) @@ -191,3 +190,23 @@ def test_env_deploy_full( ) with pytest.raises(DeploymentError): delete_app(name) + + +@pytest.fixture +def no_heroku_env(): + env_tmp = os.environ.pop("HEROKU_API_KEY") + conf_tmp = HEROKU_CONFIG.API_KEY + HEROKU_CONFIG.API_KEY = None + try: + yield + finally: + os.environ["HEROKU_API_KEY"] = env_tmp + HEROKU_CONFIG.API_KEY = conf_tmp + + +def test_suggest_login(no_heroku_env, heroku_app_name, heroku_env): + with pytest.raises( + DeploymentError, + match="Invalid credentials. Please run `heroku login` or set HEROKU_API_KEY env", + ): + heroku_app_name("no-creds-app") From 37b5b325a08cf20ebee6198165f3fe8e3a1afd03 Mon Sep 17 00:00:00 2001 From: mike0sv Date: Fri, 25 Nov 2022 14:59:46 +0300 Subject: [PATCH 2/2] fix tests --- mlem/contrib/heroku/utils.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mlem/contrib/heroku/utils.py b/mlem/contrib/heroku/utils.py index 2f0d6470..37f4cc8d 100644 --- a/mlem/contrib/heroku/utils.py +++ b/mlem/contrib/heroku/utils.py @@ -4,7 +4,7 @@ import requests from requests import HTTPError -from ...core.errors import DeploymentError, MlemError +from ...core.errors import DeploymentError from ...ui import EMOJI_BASE, EMOJI_BUILD, EMOJI_STOP, echo from .config import HEROKU_CONFIG from .meta import HerokuAppMeta, HerokuDeployment @@ -20,7 +20,9 @@ def get_api_key() -> str: .strip() ) except subprocess.CalledProcessError as e: - raise MlemError("HEROKU_API_KEY env is not provided") from e + raise DeploymentError( + "Invalid credentials. Please run `heroku login` or set HEROKU_API_KEY env" + ) from e def heroku_api_request(