Skip to content

Commit 7bf29d4

Browse files
author
Shubham
committed
Add method for setting multiple credentials
1 parent 9a0d951 commit 7bf29d4

File tree

2 files changed

+49
-1
lines changed

2 files changed

+49
-1
lines changed

objectbox/sync.py

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import objectbox.c as c
55
from objectbox import Store
66

7-
87
class SyncCredentials:
98

109
def __init__(self, credential_type: c.SyncCredentialsType):
@@ -171,6 +170,32 @@ def set_credentials(self, credentials: SyncCredentials):
171170
credentials.secret,
172171
len(credentials.secret))
173172

173+
def set_multiple_credentials(self, credentials_list: list[SyncCredentials]):
174+
if len(credentials_list) == 0:
175+
raise ValueError("Provide at least one credential")
176+
177+
for i in range(len(credentials_list)):
178+
is_last = (i == len(credentials_list) - 1)
179+
credentials = credentials_list[i]
180+
181+
if isinstance(credentials, SyncCredentialsNone):
182+
raise ValueError("SyncCredentials.none() is not supported, use set_credentials() instead")
183+
184+
if isinstance(credentials, SyncCredentialsUserPassword):
185+
c.obx_sync_credentials_add_user_password(self.__c_sync_client_ptr,
186+
credentials.type,
187+
credentials.username.encode('utf-8'),
188+
credentials.password.encode('utf-8'),
189+
is_last
190+
)
191+
elif isinstance(credentials, SyncCredentialsSecret):
192+
c.obx_sync_credentials_add(self.__c_sync_client_ptr,
193+
credentials.type,
194+
credentials.secret,
195+
len(credentials.secret),
196+
is_last)
197+
198+
174199
def set_request_updates_mode(self, mode: SyncRequestUpdatesMode):
175200
if mode == SyncRequestUpdatesMode.MANUAL:
176201
c_mode = c.RequestUpdatesMode.MANUAL

tests/test_sync.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,3 +73,26 @@ def test_outgoing_message_count(test_store):
7373

7474
with pytest.raises(IllegalArgumentError, match='Argument "sync" must not be null'):
7575
client.get_outgoing_message_count()
76+
77+
78+
def test_multiple_credentials(test_store):
79+
server_urls = ["ws://localhost:9999"]
80+
client = SyncClient(test_store, server_urls)
81+
82+
# empty list should raise ValueError
83+
with pytest.raises(ValueError, match='Provide at least one credential'):
84+
client.set_multiple_credentials([])
85+
86+
# SyncCredentials.none() is not supported with multiple credentials
87+
with pytest.raises(ValueError, match=r'SyncCredentials.none\(\) is not supported, use set_credentials\(\) instead'):
88+
client.set_multiple_credentials([SyncCredentials.none()])
89+
90+
client.set_multiple_credentials([
91+
SyncCredentials.google_auth("token_google"),
92+
SyncCredentials.user_and_password("user1", "password"),
93+
SyncCredentials.shared_secret_string("secret1"),
94+
SyncCredentials.jwt_id_token("token1"),
95+
SyncCredentials.jwt_access_token("token2"),
96+
SyncCredentials.jwt_refresh_token("token3"),
97+
SyncCredentials.jwt_custom_token("token4")
98+
])

0 commit comments

Comments
 (0)