From 6e5de52c16141effc515d63a01b830014d380002 Mon Sep 17 00:00:00 2001 From: Dylan Atlas-Baker Date: Mon, 20 Jul 2026 12:09:57 +0100 Subject: [PATCH 1/2] make refresh token optional on Looker Client --- spectacles/client.py | 4 +++- tests/unit/test_client.py | 1 - 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/spectacles/client.py b/spectacles/client.py index 0ff49c66..cbc89317 100644 --- a/spectacles/client.py +++ b/spectacles/client.py @@ -61,8 +61,8 @@ class AccessToken: access_token: str token_type: str expires_in: int - refresh_token: Optional[str] expires_at: float + refresh_token: Optional[str] = None def __str__(self) -> str: return self.access_token @@ -147,6 +147,7 @@ def __init__( self.client_secret: str = client_secret self.api_version: float = api_version self.access_token: Optional[AccessToken] = None + self.refresh_token: Optional[str] = None self.workspace: str = "production" self.authenticate() @@ -184,6 +185,7 @@ def authenticate(self) -> None: if "expires_at" not in result: # Calculate the expiration time with a one-minute buffer result["expires_at"] = time.time() + result["expires_in"] - 60 + self.refresh_token = result.pop("refresh_token", None) self.access_token = AccessToken(**result) self.async_client.headers = httpx.Headers( {"Authorization": f"token {self.access_token}"} diff --git a/tests/unit/test_client.py b/tests/unit/test_client.py index f5642684..f9d2b4b1 100644 --- a/tests/unit/test_client.py +++ b/tests/unit/test_client.py @@ -17,7 +17,6 @@ def test_expired_access_token_should_be_expired() -> None: access_token="abc123", token_type="Bearer", expires_in=3600, - refresh_token=None, expires_at=time.time() - 1, ) assert token.expired From c85931dab8d2fabd09d91856dc769dbbf9dcdd31 Mon Sep 17 00:00:00 2001 From: Dylan Atlas-Baker Date: Mon, 20 Jul 2026 12:21:41 +0100 Subject: [PATCH 2/2] Bump version 2.4.18 -> 2.4.19 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index fe30b770..dfb70c9f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "spectacles" -version = "2.4.18" +version = "2.4.19" description = "A command-line, continuous integration tool for Looker and LookML." authors = ["Spectacles "] license = "MIT"