Skip to content

Commit 5516d0e

Browse files
committed
feat: convert openBIS cloud storage configurations into valid rclone configurations before starting a session (next try)
1 parent 8f034a2 commit 5516d0e

File tree

2 files changed

+39
-8
lines changed

2 files changed

+39
-8
lines changed

components/renku_data_services/data_connectors/blueprints.py

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -295,8 +295,15 @@ async def _get_secrets(
295295
secrets = await self.data_connector_secret_repo.get_data_connector_secrets(
296296
user=user, data_connector_id=data_connector_id
297297
)
298+
data_connector = await self.data_connector_repo.get_data_connector(
299+
user=user, data_connector_id=data_connector_id
300+
)
298301
return validated_json(
299-
apispec.DataConnectorSecretsList, [self._dump_data_connector_secret(secret) for secret in secrets]
302+
apispec.DataConnectorSecretsList,
303+
[
304+
self._dump_data_connector_secret(secret)
305+
for secret in self._adjust_secrets(secrets, data_connector.storage)
306+
],
300307
)
301308

302309
return "/data_connectors/<data_connector_id:ulid>/secrets", ["GET"], _get_secrets
@@ -342,7 +349,7 @@ async def openbis_transform_session_token_to_pat() -> (
342349
storage.configuration["host"], unsaved_secrets[0].value
343350
)
344351
return (
345-
[models.DataConnectorSecretUpdate(name="session_token", value=openbis_pat[0])],
352+
[models.DataConnectorSecretUpdate(name="pass", value=openbis_pat[0])],
346353
openbis_pat[1],
347354
)
348355
except Exception as e:
@@ -363,7 +370,8 @@ async def openbis_transform_session_token_to_pat() -> (
363370
expiration_timestamp=expiration_timestamp,
364371
)
365372
return validated_json(
366-
apispec.DataConnectorSecretsList, [self._dump_data_connector_secret(secret) for secret in secrets]
373+
apispec.DataConnectorSecretsList,
374+
[self._dump_data_connector_secret(secret) for secret in self._adjust_secrets(secrets, storage)],
367375
)
368376

369377
return "/data_connectors/<data_connector_id:ulid>/secrets", ["PATCH"], _patch_secrets
@@ -415,6 +423,22 @@ def _dump_data_connector_to_project_link(link: models.DataConnectorToProjectLink
415423
created_by=link.created_by,
416424
)
417425

426+
@staticmethod
427+
def _adjust_secrets(
428+
secrets: list[models.DataConnectorSecret], storage: models.CloudStorageCore
429+
) -> list[models.DataConnectorSecret]:
430+
if storage.storage_type == "openbis":
431+
for i, secret in enumerate(secrets):
432+
if secret.name == "pass":
433+
secrets[i] = models.DataConnectorSecret(
434+
name="session_token",
435+
user_id=secret.user_id,
436+
data_connector_id=secret.data_connector_id,
437+
secret_id=secret.secret_id,
438+
)
439+
break
440+
return secrets
441+
418442
@staticmethod
419443
def _dump_data_connector_secret(secret: models.DataConnectorSecret) -> dict[str, Any]:
420444
"""Dumps a data connector secret for API responses."""

test/bases/renku_data_services/data_api/test_data_connectors.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1298,14 +1298,21 @@ async def test_create_openbis_data_connector(sanic_client, create_openbis_data_c
12981298
payload = [
12991299
{"name": "session_token", "value": openbis_session_token},
13001300
]
1301+
1302+
def check_response(r):
1303+
assert r.status_code == 200, r.json
1304+
assert {s["name"] for s in r.json} == {"session_token"}
1305+
created_secret_ids = {s["secret_id"] for s in r.json}
1306+
assert len(created_secret_ids) == 1
1307+
assert r.json[0].keys() == {"secret_id", "name"}
1308+
13011309
_, response = await sanic_client.patch(
13021310
f"/api/data/data_connectors/{data_connector_id}/secrets", headers=user_headers, json=payload
13031311
)
1304-
assert response.status_code == 200, response.json
1305-
assert {s["name"] for s in response.json} == {"session_token"}
1306-
created_secret_ids = {s["secret_id"] for s in response.json}
1307-
assert len(created_secret_ids) == 1
1308-
assert response.json[0].keys() == {"secret_id", "name"}
1312+
check_response(response)
1313+
1314+
_, response = await sanic_client.get(f"/api/data/data_connectors/{data_connector_id}/secrets", headers=user_headers)
1315+
check_response(response)
13091316

13101317

13111318
@pytest.mark.myskip(1 == 1, reason="Depends on a remote openBIS host which may not always be available.")

0 commit comments

Comments
 (0)