Skip to content
This repository was archived by the owner on Jun 28, 2024. It is now read-only.

Commit e247042

Browse files
authored
feat: Merge pull request #46 from seamapi/get-connected-account-by-email
fix #28: Add support for `connected_account.get` via email
2 parents 8db1c04 + b9a7275 commit e247042

File tree

3 files changed

+32
-5
lines changed

3 files changed

+32
-5
lines changed

seamapi/connected_accounts.py

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
ConnectedAccount,
44
AbstractSeam as Seam,
55
ConnectedAccountId,
6+
Email,
67
)
78

89
import requests
@@ -75,30 +76,43 @@ def list(self) -> List[ConnectedAccount]:
7576

7677
def get(
7778
self,
78-
connected_account: Union[ConnectedAccountId, ConnectedAccount],
79+
connected_account: Union[ConnectedAccountId, ConnectedAccount, None] = None,
80+
email: Email = None,
7981
) -> ConnectedAccount:
8082
"""Gets a connected account.
8183
8284
Parameters
8385
----------
84-
connected_account : ConnectedAccountId or ConnectedAccount
86+
connected_account : ConnectedAccountId or ConnectedAccount, optional (required if email is None)
8587
Connected account id or ConnectedAccount to get the latest version of
88+
email : Email (str), optional (required if connected_account is None)
89+
Email to get the latest connected account for
8690
8791
Raises
8892
------
93+
Exception
94+
If both connected_account and email are not provided.
8995
Exception
9096
If the API request wasn't successful.
9197
9298
Returns
9399
------
94100
ConnectedAccount
95101
"""
102+
params = {}
96103

97-
connected_account_id = to_connected_account_id(connected_account)
104+
if connected_account:
105+
params["connected_account_id"] = to_connected_account_id(connected_account)
106+
if email:
107+
params["email"] = email
108+
109+
if not connected_account and not email:
110+
raise Exception("Must provide either ConnectedAccount (ConnectedAccount or ConnectedAccountId) or Email")
111+
98112
res = requests.get(
99113
f"{self.seam.api_url}/connected_accounts/get",
100114
headers={"Authorization": f"Bearer {self.seam.api_key}"},
101-
params={"connected_account_id": connected_account_id},
115+
params=params,
102116
)
103117
if not res.ok:
104118
raise Exception(res.text)

seamapi/types.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
AcceptedProvider = str # e.g. august or noiseaware
1313
ConnectWebviewId = str
1414
ConnectedAccountId = str
15+
Email = str
1516
DeviceType = str # e.g. august_lock
1617
WorkspaceId = str
1718

tests/connected_accounts/test_connected_accounts.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from seamapi import Seam
22
from tests.fixtures.run_august_factory import run_august_factory
33

4+
45

56
def test_connected_accounts(seam: Seam):
67
run_august_factory(seam)
@@ -10,7 +11,18 @@ def test_connected_accounts(seam: Seam):
1011

1112
connected_account_id = connected_accounts[0].connected_account_id
1213
connected_account = seam.connected_accounts.get(connected_account_id)
14+
email_account = seam.connected_accounts.get(email=EMAIL)
15+
1316
assert connected_account.connected_account_id == connected_account_id
17+
assert email_account.connected_account_id == connected_account_id
1418

1519
seam.connected_accounts.delete(connected_account)
16-
assert len(seam.connected_accounts.list()) == 0
20+
assert len(seam.connected_accounts.list()) == 0
21+
22+
# Assert that an Exception is raised for the .get() method when
23+
# connected_account and email parameters are not provided.
24+
try:
25+
seam.connected_accounts.get()
26+
except Exception as e:
27+
assert str(e) == "Must provide either ConnectedAccount (ConnectedAccount or ConnectedAccountId) or Email"
28+

0 commit comments

Comments
 (0)