Skip to content

Commit 0c88b62

Browse files
authored
Merge pull request #585 from simvue-io/hotfix/wrong-attribute-retrieval
Fix wrong attribute in offline directory retrieval
2 parents 2939263 + 123507d commit 0c88b62

File tree

7 files changed

+79
-62
lines changed

7 files changed

+79
-62
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
# Change log
22

3+
## [v1.1.2](https://github.com/simvue-io/client/releases/tag/v1.1.2) - 2024-11-06
4+
5+
* Fix bug in offline mode directory retrieval.
36
## [v1.1.1](https://github.com/simvue-io/client/releases/tag/v1.1.1) - 2024-10-22
47

58
* Add missing `offline.cache` key to TOML config.

CITATION.cff

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,6 @@ keywords:
4242
- alerting
4343
- simulation
4444
license: Apache-2.0
45-
commit: a475a0e3f6e48257f8d2d04d0ddf1652e2d9e924
46-
version: 1.1.1
47-
date-released: '2024-10-22'
45+
commit: e220740c747a56de0915d583918e1999d253fdfc
46+
version: 1.1.2
47+
date-released: '2024-11-06'

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "simvue"
3-
version = "1.1.1"
3+
version = "1.1.2"
44
description = "Simulation tracking and monitoring"
55
authors = ["Simvue Development Team <[email protected]>"]
66
license = "Apache v2"

simvue/client.py

Lines changed: 32 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -106,18 +106,19 @@ def __init__(
106106
server_url : str, optional
107107
specify URL, if unset this is read from the config file
108108
"""
109-
self._config = SimvueConfiguration.fetch(
109+
self._user_config = SimvueConfiguration.fetch(
110110
server_token=server_token, server_url=server_url
111111
)
112112

113113
for label, value in zip(
114-
("URL", "API token"), (self._config.server.url, self._config.server.url)
114+
("URL", "API token"),
115+
(self._user_config.server.url, self._user_config.server.url),
115116
):
116117
if not value:
117118
logger.warning(f"No {label} specified")
118119

119120
self._headers: dict[str, str] = {
120-
"Authorization": f"Bearer {self._config.server.token}"
121+
"Authorization": f"Bearer {self._user_config.server.token}"
121122
}
122123

123124
def _get_json_from_response(
@@ -182,7 +183,9 @@ def get_run_id_from_name(
182183
params: dict[str, str] = {"filters": json.dumps([f"name == {name}"])}
183184

184185
response: requests.Response = requests.get(
185-
f"{self._config.server.url}/api/runs", headers=self._headers, params=params
186+
f"{self._user_config.server.url}/api/runs",
187+
headers=self._headers,
188+
params=params,
186189
)
187190

188191
json_response = self._get_json_from_response(
@@ -232,7 +235,7 @@ def get_run(self, run_id: str) -> typing.Optional[dict[str, typing.Any]]:
232235
"""
233236

234237
response: requests.Response = requests.get(
235-
f"{self._config.server.url}/api/runs/{run_id}", headers=self._headers
238+
f"{self._user_config.server.url}/api/runs/{run_id}", headers=self._headers
236239
)
237240

238241
json_response = self._get_json_from_response(
@@ -349,7 +352,9 @@ def get_runs(
349352
}
350353

351354
response = requests.get(
352-
f"{self._config.server.url}/api/runs", headers=self._headers, params=params
355+
f"{self._user_config.server.url}/api/runs",
356+
headers=self._headers,
357+
params=params,
353358
)
354359

355360
response.raise_for_status()
@@ -398,7 +403,7 @@ def delete_run(self, run_id: str) -> typing.Optional[dict]:
398403
"""
399404

400405
response = requests.delete(
401-
f"{self._config.server.url}/api/runs/{run_id}",
406+
f"{self._user_config.server.url}/api/runs/{run_id}",
402407
headers=self._headers,
403408
)
404409

@@ -434,7 +439,7 @@ def _get_folder_id_from_path(self, path: str) -> typing.Optional[str]:
434439
params: dict[str, str] = {"filters": json.dumps([f"path == {path}"])}
435440

436441
response: requests.Response = requests.get(
437-
f"{self._config.server.url}/api/folders",
442+
f"{self._user_config.server.url}/api/folders",
438443
headers=self._headers,
439444
params=params,
440445
)
@@ -479,7 +484,7 @@ def delete_runs(
479484
params: dict[str, bool] = {"runs_only": True, "runs": True}
480485

481486
response = requests.delete(
482-
f"{self._config.server.url}/api/folders/{folder_id}",
487+
f"{self._user_config.server.url}/api/folders/{folder_id}",
483488
headers=self._headers,
484489
params=params,
485490
)
@@ -545,7 +550,7 @@ def delete_folder(
545550
params |= {"recursive": recursive}
546551

547552
response = requests.delete(
548-
f"{self._config.server.url}/api/folders/{folder_id}",
553+
f"{self._user_config.server.url}/api/folders/{folder_id}",
549554
headers=self._headers,
550555
params=params,
551556
)
@@ -576,7 +581,8 @@ def delete_alert(self, alert_id: str) -> None:
576581
the unique identifier for the alert
577582
"""
578583
response = requests.delete(
579-
f"{self._config.server.url}/api/alerts/{alert_id}", headers=self._headers
584+
f"{self._user_config.server.url}/api/alerts/{alert_id}",
585+
headers=self._headers,
580586
)
581587

582588
if response.status_code == http.HTTPStatus.OK:
@@ -611,7 +617,7 @@ def list_artifacts(self, run_id: str) -> list[dict[str, typing.Any]]:
611617
params: dict[str, str] = {"runs": json.dumps([run_id])}
612618

613619
response: requests.Response = requests.get(
614-
f"{self._config.server.url}/api/artifacts",
620+
f"{self._user_config.server.url}/api/artifacts",
615621
headers=self._headers,
616622
params=params,
617623
)
@@ -637,7 +643,7 @@ def _retrieve_artifact_from_server(
637643
params: dict[str, str | None] = {"name": name}
638644

639645
response = requests.get(
640-
f"{self._config.server.url}/api/runs/{run_id}/artifacts",
646+
f"{self._user_config.server.url}/api/runs/{run_id}/artifacts",
641647
headers=self._headers,
642648
params=params,
643649
)
@@ -679,7 +685,7 @@ def abort_run(self, run_id: str, reason: str) -> typing.Union[dict, list]:
679685
body: dict[str, str | None] = {"id": run_id, "reason": reason}
680686

681687
response = requests.put(
682-
f"{self._config.server.url}/api/runs/abort",
688+
f"{self._user_config.server.url}/api/runs/abort",
683689
headers=self._headers,
684690
json=body,
685691
)
@@ -873,7 +879,7 @@ def get_artifacts_as_files(
873879
params: dict[str, typing.Optional[str]] = {"category": category}
874880

875881
response: requests.Response = requests.get(
876-
f"{self._config.server.url}/api/runs/{run_id}/artifacts",
882+
f"{self._user_config.server.url}/api/runs/{run_id}/artifacts",
877883
headers=self._headers,
878884
params=params,
879885
)
@@ -966,7 +972,7 @@ def get_folders(
966972
}
967973

968974
response: requests.Response = requests.get(
969-
f"{self._config.server.url}/api/folders",
975+
f"{self._user_config.server.url}/api/folders",
970976
headers=self._headers,
971977
params=params,
972978
)
@@ -1013,7 +1019,7 @@ def get_metrics_names(self, run_id: str) -> list[str]:
10131019
params = {"runs": json.dumps([run_id])}
10141020

10151021
response: requests.Response = requests.get(
1016-
f"{self._config.server.url}/api/metrics/names",
1022+
f"{self._user_config.server.url}/api/metrics/names",
10171023
headers=self._headers,
10181024
params=params,
10191025
)
@@ -1049,7 +1055,7 @@ def _get_run_metrics_from_server(
10491055
}
10501056

10511057
metrics_response: requests.Response = requests.get(
1052-
f"{self._config.server.url}/api/metrics",
1058+
f"{self._user_config.server.url}/api/metrics",
10531059
headers=self._headers,
10541060
params=params,
10551061
)
@@ -1311,7 +1317,7 @@ def get_events(
13111317
}
13121318

13131319
response = requests.get(
1314-
f"{self._config.server.url}/api/events",
1320+
f"{self._user_config.server.url}/api/events",
13151321
headers=self._headers,
13161322
params=params,
13171323
)
@@ -1368,7 +1374,7 @@ def get_alerts(
13681374
params: dict[str, int] = {"count": count_limit or 0, "start": start_index or 0}
13691375
if not run_id:
13701376
response = requests.get(
1371-
f"{self._config.server.url}/api/alerts/",
1377+
f"{self._user_config.server.url}/api/alerts/",
13721378
headers=self._headers,
13731379
params=params,
13741380
)
@@ -1380,7 +1386,7 @@ def get_alerts(
13801386
)
13811387
else:
13821388
response = requests.get(
1383-
f"{self._config.server.url}/api/runs/{run_id}",
1389+
f"{self._user_config.server.url}/api/runs/{run_id}",
13841390
headers=self._headers,
13851391
params=params,
13861392
)
@@ -1457,7 +1463,9 @@ def get_tags(
14571463
"""
14581464
params = {"count": count_limit or 0, "start": start_index or 0}
14591465
response = requests.get(
1460-
f"{self._config.server.url}/api/tags", headers=self._headers, params=params
1466+
f"{self._user_config.server.url}/api/tags",
1467+
headers=self._headers,
1468+
params=params,
14611469
)
14621470

14631471
json_response = self._get_json_from_response(
@@ -1491,7 +1499,7 @@ def delete_tag(self, tag_id: str) -> None:
14911499
"""
14921500

14931501
response = requests.delete(
1494-
f"{self._config.server.url}/api/tags/{tag_id}",
1502+
f"{self._user_config.server.url}/api/tags/{tag_id}",
14951503
headers=self._headers,
14961504
)
14971505

@@ -1533,7 +1541,7 @@ def get_tag(self, tag_id: str) -> typing.Optional[dict[str, typing.Any]]:
15331541
"""
15341542

15351543
response: requests.Response = requests.get(
1536-
f"{self._config.server.url}/api/tag/{tag_id}", headers=self._headers
1544+
f"{self._user_config.server.url}/api/tag/{tag_id}", headers=self._headers
15371545
)
15381546

15391547
json_response = self._get_json_from_response(

simvue/factory/proxy/remote.py

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@ def __init__(
2828
config: "SimvueConfiguration",
2929
suppress_errors: bool = True,
3030
) -> None:
31-
self._config = config
31+
self._user_config = config
3232

3333
self._headers: dict[str, str] = {
34-
"Authorization": f"Bearer {self._config.server.token}",
34+
"Authorization": f"Bearer {self._user_config.server.token}",
3535
"User-Agent": f"Simvue Python client {__version__}",
3636
}
3737
self._headers_mp: dict[str, str] = self._headers | {
@@ -46,7 +46,7 @@ def list_tags(self) -> list[str]:
4646
logger.debug("Retrieving existing tags")
4747
try:
4848
response = get(
49-
f"{self._config.server.url}/api/runs/{self._id}", self._headers
49+
f"{self._user_config.server.url}/api/runs/{self._id}", self._headers
5050
)
5151
except Exception as err:
5252
self._error(f"Exception retrieving tags: {str(err)}")
@@ -80,7 +80,7 @@ def create_run(self, data) -> tuple[typing.Optional[str], typing.Optional[int]]:
8080
logger.debug("Creating folder %s if necessary", data.get("folder"))
8181
try:
8282
response = post(
83-
f"{self._config.server.url}/api/folders",
83+
f"{self._user_config.server.url}/api/folders",
8484
self._headers,
8585
{"path": data.get("folder")},
8686
)
@@ -104,7 +104,9 @@ def create_run(self, data) -> tuple[typing.Optional[str], typing.Optional[int]]:
104104
logger.debug('Creating run with data: "%s"', data)
105105

106106
try:
107-
response = post(f"{self._config.server.url}/api/runs", self._headers, data)
107+
response = post(
108+
f"{self._user_config.server.url}/api/runs", self._headers, data
109+
)
108110
except Exception as err:
109111
self._error(f"Exception creating run: {str(err)}")
110112
return (None, None)
@@ -143,7 +145,9 @@ def update(
143145
logger.debug('Updating run with data: "%s"', data)
144146

145147
try:
146-
response = put(f"{self._config.server.url}/api/runs", self._headers, data)
148+
response = put(
149+
f"{self._user_config.server.url}/api/runs", self._headers, data
150+
)
147151
except Exception as err:
148152
self._error(f"Exception updating run: {err}")
149153
return None
@@ -172,7 +176,7 @@ def set_folder_details(
172176

173177
try:
174178
response = post(
175-
f"{self._config.server.url}/api/folders", self._headers, data
179+
f"{self._user_config.server.url}/api/folders", self._headers, data
176180
)
177181
except Exception as err:
178182
self._error(f"Exception creating folder: {err}")
@@ -191,7 +195,7 @@ def set_folder_details(
191195

192196
try:
193197
response = put(
194-
f"{self._config.server.url}/api/folders", self._headers, data
198+
f"{self._user_config.server.url}/api/folders", self._headers, data
195199
)
196200
except Exception as err:
197201
self._error(f"Exception setting folder details: {err}")
@@ -223,7 +227,7 @@ def save_file(
223227
# Get presigned URL
224228
try:
225229
response = post(
226-
f"{self._config.server.url}/api/artifacts",
230+
f"{self._user_config.server.url}/api/artifacts",
227231
self._headers,
228232
prepare_for_api(data),
229233
)
@@ -307,7 +311,7 @@ def save_file(
307311
return None
308312

309313
if storage_id:
310-
path = f"{self._config.server.url}/api/runs/{self._id}/artifacts"
314+
path = f"{self._user_config.server.url}/api/runs/{self._id}/artifacts"
311315
data["storage"] = storage_id
312316

313317
try:
@@ -338,7 +342,7 @@ def add_alert(self, data, run=None):
338342

339343
try:
340344
response = post(
341-
f"{self._config.server.url}/api/alerts", self._headers, data
345+
f"{self._user_config.server.url}/api/alerts", self._headers, data
342346
)
343347
except Exception as err:
344348
self._error(f"Got exception when creating an alert: {str(err)}")
@@ -366,7 +370,7 @@ def set_alert_state(
366370
data = {"run": self._id, "alert": alert_id, "status": status}
367371
try:
368372
response = put(
369-
f"{self._config.server.url}/api/alerts/status", self._headers, data
373+
f"{self._user_config.server.url}/api/alerts/status", self._headers, data
370374
)
371375
except Exception as err:
372376
self._error(f"Got exception when setting alert state: {err}")
@@ -383,7 +387,7 @@ def list_alerts(self) -> list[dict[str, typing.Any]]:
383387
List alerts
384388
"""
385389
try:
386-
response = get(f"{self._config.server.url}/api/alerts", self._headers)
390+
response = get(f"{self._user_config.server.url}/api/alerts", self._headers)
387391
except Exception as err:
388392
self._error(f"Got exception when listing alerts: {str(err)}")
389393
return []
@@ -412,7 +416,7 @@ def send_metrics(
412416

413417
try:
414418
response = post(
415-
f"{self._config.server.url}/api/metrics",
419+
f"{self._user_config.server.url}/api/metrics",
416420
self._headers_mp,
417421
data,
418422
is_json=False,
@@ -440,7 +444,7 @@ def send_event(
440444

441445
try:
442446
response = post(
443-
f"{self._config.server.url}/api/events",
447+
f"{self._user_config.server.url}/api/events",
444448
self._headers_mp,
445449
data,
446450
is_json=False,
@@ -466,7 +470,7 @@ def send_heartbeat(self) -> typing.Optional[dict[str, typing.Any]]:
466470

467471
try:
468472
response = put(
469-
f"{self._config.server.url}/api/runs/heartbeat",
473+
f"{self._user_config.server.url}/api/runs/heartbeat",
470474
self._headers,
471475
{"id": self._id},
472476
)
@@ -488,7 +492,8 @@ def get_abort_status(self) -> bool:
488492

489493
try:
490494
response = get(
491-
f"{self._config.server.url}/api/runs/{self._id}/abort", self._headers_mp
495+
f"{self._user_config.server.url}/api/runs/{self._id}/abort",
496+
self._headers_mp,
492497
)
493498
except Exception as err:
494499
self._error(f"Exception retrieving abort status: {str(err)}")

0 commit comments

Comments
 (0)