Skip to content

Commit db61d2e

Browse files
authored
feat(specklepy): Make Client.authenticate_with_token initialise user data (#450)
* easy solution * Fixed tests
1 parent 69090f6 commit db61d2e

File tree

3 files changed

+30
-18
lines changed

3 files changed

+30
-18
lines changed

src/specklepy/core/api/client.py

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,18 @@ def authenticate_with_token(self, token: str) -> None:
131131
self.account = Account.from_token(token, self.url)
132132
self._set_up_client()
133133

134+
userData = self.active_user.get()
135+
136+
# None if the token lacked the profile:read scope or if it was None
137+
if userData:
138+
self.account.userInfo.id = userData.id
139+
self.account.userInfo.email = userData.email
140+
self.account.userInfo.name = userData.name
141+
self.account.userInfo.company = userData.company
142+
self.account.userInfo.avatar = userData.avatar
143+
144+
self.account.serverInfo = self.server.get()
145+
134146
def authenticate_with_account(self, account: Account) -> None:
135147
"""Authenticate the client using an Account object
136148
The account is saved in the client object and a synchronous GraphQL
@@ -143,6 +155,21 @@ def authenticate_with_account(self, account: Account) -> None:
143155
self.account = account
144156
self._set_up_client()
145157

158+
try:
159+
_ = self.active_user.get()
160+
except SpeckleException as ex:
161+
if isinstance(ex.exception, TransportServerError):
162+
if ex.exception.code == 403:
163+
warn(
164+
SpeckleWarning(
165+
"Possibly invalid token - could not authenticate "
166+
f"Speckle Client for server {self.url}"
167+
),
168+
stacklevel=2,
169+
)
170+
else:
171+
raise ex
172+
146173
def _set_up_client(self) -> None:
147174
headers = {
148175
"Authorization": f"Bearer {self.account.token}",
@@ -162,21 +189,6 @@ def _set_up_client(self) -> None:
162189

163190
self._init_resources()
164191

165-
try:
166-
_ = self.active_user.get()
167-
except SpeckleException as ex:
168-
if isinstance(ex.exception, TransportServerError):
169-
if ex.exception.code == 403:
170-
warn(
171-
SpeckleWarning(
172-
"Possibly invalid token - could not authenticate "
173-
f"Speckle Client for server {self.url}"
174-
),
175-
stacklevel=2,
176-
)
177-
else:
178-
raise ex
179-
180192
def execute_query(self, query: str) -> Dict:
181193
return self.httpclient.execute(query)
182194

src/specklepy/core/api/credentials.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ def __str__(self) -> str:
3737
return self.__repr__()
3838

3939
@classmethod
40-
def from_token(cls, token: str, server_url: str = None):
40+
def from_token(cls, token: str, server_url: str | None = None):
4141
acct = cls(token=token)
4242
acct.serverInfo.url = server_url
4343
return acct

tests/integration/client/test_client_and_ops.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from specklepy.api.client import SpeckleClient
77
from specklepy.api.credentials import Account, get_account_from_token
88
from specklepy.core.helpers import speckle_path_provider
9-
from specklepy.logging.exceptions import SpeckleException, SpeckleWarning
9+
from specklepy.logging.exceptions import SpeckleException
1010
from specklepy.objects.base import Base
1111
from specklepy.transports.server import ServerTransport
1212

@@ -17,7 +17,7 @@ def test_invalid_authentication():
1717
speckle_path_provider.override_application_data_path(gettempdir())
1818
client = SpeckleClient()
1919

20-
with pytest.warns(SpeckleWarning):
20+
with pytest.raises(SpeckleException):
2121
client.authenticate_with_token("fake token")
2222

2323
# remove path override

0 commit comments

Comments
 (0)