From a28d5b2e0475f7cb17c67488db54c96140d4122e Mon Sep 17 00:00:00 2001 From: Charles Larivier Date: Thu, 25 Nov 2021 10:51:43 -0500 Subject: [PATCH] feat: raise AuthenticationError Signed-off-by: Charles Larivier --- src/metabase/exceptions.py | 4 ++++ src/metabase/metabase.py | 6 ++++++ tests/test_metabase.py | 11 +++++++++-- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/metabase/exceptions.py b/src/metabase/exceptions.py index c901a5c..d1f1f7b 100644 --- a/src/metabase/exceptions.py +++ b/src/metabase/exceptions.py @@ -1,2 +1,6 @@ class NotFoundError(Exception): pass + + +class AuthenticationError(Exception): + pass diff --git a/src/metabase/metabase.py b/src/metabase/metabase.py index ed46bf4..a47b6be 100644 --- a/src/metabase/metabase.py +++ b/src/metabase/metabase.py @@ -2,6 +2,8 @@ import requests +from metabase.exceptions import AuthenticationError + class Singleton(type): _instances = WeakValueDictionary() @@ -40,6 +42,10 @@ def token(self): self.host + "/api/session", json={"username": self.user, "password": self.password}, ) + + if response.status_code != 200: + raise AuthenticationError(response.content.decode()) + self._token = response.json()["id"] return self._token diff --git a/tests/test_metabase.py b/tests/test_metabase.py index b9a7cfc..34f576e 100644 --- a/tests/test_metabase.py +++ b/tests/test_metabase.py @@ -1,7 +1,7 @@ from unittest import TestCase from metabase import Metabase - +from metabase.exceptions import AuthenticationError from tests.helpers import IntegrationTestCase @@ -27,11 +27,18 @@ def test_host(self): def test_token(self): """Ensure Metabase.token returns Metabase._token if not None, else gets a new token.""" - metabase = Metabase(host="example.co.", user="", password="", token="123") + metabase = Metabase(host="example.com", user="", password="", token="123") self.assertEqual(metabase.token, "123") # TODO: add test case when token is None + def test_token_invalid_auth(self): + """Ensure Metabase.token raises AuthenticationException is the user or password is invalid.""" + metabase = Metabase(host="http://0.0.0.0:3000", user="", password="") + + with self.assertRaises(AuthenticationError): + _ = metabase.token + def test_headers(self): """Ensure Metabase.headers returns a dictionary with the token.""" metabase = Metabase(host="example.com", user="", password="", token="123")