futurehouse-client 0.3.20.dev208__py3-none-any.whl → 0.3.20.dev225__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- futurehouse_client/clients/rest_client.py +51 -35
- futurehouse_client/models/client.py +1 -5
- futurehouse_client/version.py +2 -2
- {futurehouse_client-0.3.20.dev208.dist-info → futurehouse_client-0.3.20.dev225.dist-info}/METADATA +1 -1
- {futurehouse_client-0.3.20.dev208.dist-info → futurehouse_client-0.3.20.dev225.dist-info}/RECORD +8 -8
- {futurehouse_client-0.3.20.dev208.dist-info → futurehouse_client-0.3.20.dev225.dist-info}/WHEEL +0 -0
- {futurehouse_client-0.3.20.dev208.dist-info → futurehouse_client-0.3.20.dev225.dist-info}/licenses/LICENSE +0 -0
- {futurehouse_client-0.3.20.dev208.dist-info → futurehouse_client-0.3.20.dev225.dist-info}/top_level.txt +0 -0
@@ -37,6 +37,7 @@ from httpx import (
|
|
37
37
|
from ldp.agent import AgentConfig
|
38
38
|
from requests.exceptions import RequestException, Timeout
|
39
39
|
from tenacity import (
|
40
|
+
before_sleep_log,
|
40
41
|
retry,
|
41
42
|
retry_if_exception_type,
|
42
43
|
stop_after_attempt,
|
@@ -295,7 +296,7 @@ class RestClient:
|
|
295
296
|
response.raise_for_status()
|
296
297
|
return response.json()
|
297
298
|
except Exception as e:
|
298
|
-
raise JobFetchError(f"Error checking job: {e!
|
299
|
+
raise JobFetchError(f"Error checking job: {e!r}.") from e
|
299
300
|
|
300
301
|
def _fetch_my_orgs(self) -> list[str]:
|
301
302
|
response = self.client.get(f"/v0.1/organizations?filter={True}")
|
@@ -325,7 +326,7 @@ class RestClient:
|
|
325
326
|
response.raise_for_status()
|
326
327
|
return response.json()
|
327
328
|
except Exception as e:
|
328
|
-
raise RestClientError(f"Error checking assembly status: {e}") from e
|
329
|
+
raise RestClientError(f"Error checking assembly status: {e!r}.") from e
|
329
330
|
|
330
331
|
def _wait_for_all_assemblies_completion(
|
331
332
|
self,
|
@@ -375,7 +376,7 @@ class RestClient:
|
|
375
376
|
elif status == ExecutionStatus.FAIL.value:
|
376
377
|
error_msg = status_data.get("error", "Unknown assembly error")
|
377
378
|
raise RestClientError(
|
378
|
-
f"Assembly failed for {file_name}: {error_msg}"
|
379
|
+
f"Assembly failed for {file_name}: {error_msg}."
|
379
380
|
)
|
380
381
|
elif status == ExecutionStatus.IN_PROGRESS.value:
|
381
382
|
logger.debug(f"Assembly in progress for {file_name}...")
|
@@ -384,7 +385,7 @@ class RestClient:
|
|
384
385
|
raise # Re-raise assembly errors
|
385
386
|
except Exception as e:
|
386
387
|
logger.warning(
|
387
|
-
f"Error checking assembly status for {file_name}: {e}"
|
388
|
+
f"Error checking assembly status for {file_name}: {e!r}."
|
388
389
|
)
|
389
390
|
|
390
391
|
# Don't sleep if all files are complete
|
@@ -394,7 +395,7 @@ class RestClient:
|
|
394
395
|
if len(completed_files) < len(file_names):
|
395
396
|
remaining_files = set(file_names) - completed_files
|
396
397
|
logger.warning(
|
397
|
-
f"Assembly timeout for files: {remaining_files} after {timeout} seconds"
|
398
|
+
f"Assembly timeout for files: {remaining_files} after {timeout} seconds."
|
398
399
|
)
|
399
400
|
return False
|
400
401
|
|
@@ -413,7 +414,7 @@ class RestClient:
|
|
413
414
|
|
414
415
|
"""
|
415
416
|
if not path.is_dir():
|
416
|
-
raise JobFetchError(f"Path {path} is not a directory")
|
417
|
+
raise JobFetchError(f"Path {path} is not a directory.")
|
417
418
|
|
418
419
|
@staticmethod
|
419
420
|
def _validate_template_path(template_path: str | os.PathLike) -> None:
|
@@ -450,12 +451,13 @@ class RestClient:
|
|
450
451
|
|
451
452
|
"""
|
452
453
|
if not files:
|
453
|
-
raise TaskFetchError(f"No files found in {path}")
|
454
|
+
raise TaskFetchError(f"No files found in {path}.")
|
454
455
|
|
455
456
|
@retry(
|
456
457
|
stop=stop_after_attempt(MAX_RETRY_ATTEMPTS),
|
457
458
|
wait=wait_exponential(multiplier=RETRY_MULTIPLIER, max=MAX_RETRY_WAIT),
|
458
459
|
retry=retry_if_connection_error,
|
460
|
+
before_sleep=before_sleep_log(logger, logging.WARNING),
|
459
461
|
)
|
460
462
|
def get_task(
|
461
463
|
self, task_id: str | None = None, history: bool = False, verbose: bool = False
|
@@ -496,6 +498,7 @@ class RestClient:
|
|
496
498
|
stop=stop_after_attempt(MAX_RETRY_ATTEMPTS),
|
497
499
|
wait=wait_exponential(multiplier=RETRY_MULTIPLIER, max=MAX_RETRY_WAIT),
|
498
500
|
retry=retry_if_connection_error,
|
501
|
+
before_sleep=before_sleep_log(logger, logging.WARNING),
|
499
502
|
)
|
500
503
|
async def aget_task(
|
501
504
|
self, task_id: str | None = None, history: bool = False, verbose: bool = False
|
@@ -519,7 +522,7 @@ class RestClient:
|
|
519
522
|
) as response:
|
520
523
|
if response.status_code in {401, 403}:
|
521
524
|
raise PermissionError(
|
522
|
-
f"Error getting task: Permission denied for task {task_id}"
|
525
|
+
f"Error getting task: Permission denied for task {task_id}."
|
523
526
|
)
|
524
527
|
response.raise_for_status()
|
525
528
|
json_data = "".join([chunk async for chunk in response.aiter_text()])
|
@@ -536,6 +539,7 @@ class RestClient:
|
|
536
539
|
stop=stop_after_attempt(MAX_RETRY_ATTEMPTS),
|
537
540
|
wait=wait_exponential(multiplier=RETRY_MULTIPLIER, max=MAX_RETRY_WAIT),
|
538
541
|
retry=retry_if_connection_error,
|
542
|
+
before_sleep=before_sleep_log(logger, logging.WARNING),
|
539
543
|
)
|
540
544
|
def create_task(
|
541
545
|
self,
|
@@ -560,7 +564,7 @@ class RestClient:
|
|
560
564
|
)
|
561
565
|
if response.status_code in {401, 403}:
|
562
566
|
raise PermissionError(
|
563
|
-
f"Error creating task: Permission denied for task {task_data.name}"
|
567
|
+
f"Error creating task: Permission denied for task {task_data.name}."
|
564
568
|
)
|
565
569
|
response.raise_for_status()
|
566
570
|
trajectory_id = response.json()["trajectory_id"]
|
@@ -571,6 +575,7 @@ class RestClient:
|
|
571
575
|
stop=stop_after_attempt(MAX_RETRY_ATTEMPTS),
|
572
576
|
wait=wait_exponential(multiplier=RETRY_MULTIPLIER, max=MAX_RETRY_WAIT),
|
573
577
|
retry=retry_if_connection_error,
|
578
|
+
before_sleep=before_sleep_log(logger, logging.WARNING),
|
574
579
|
)
|
575
580
|
async def acreate_task(
|
576
581
|
self,
|
@@ -595,7 +600,7 @@ class RestClient:
|
|
595
600
|
)
|
596
601
|
if response.status_code in {401, 403}:
|
597
602
|
raise PermissionError(
|
598
|
-
f"Error creating task: Permission denied for task {task_data.name}"
|
603
|
+
f"Error creating task: Permission denied for task {task_data.name}."
|
599
604
|
)
|
600
605
|
response.raise_for_status()
|
601
606
|
trajectory_id = response.json()["trajectory_id"]
|
@@ -747,6 +752,7 @@ class RestClient:
|
|
747
752
|
stop=stop_after_attempt(MAX_RETRY_ATTEMPTS),
|
748
753
|
wait=wait_exponential(multiplier=RETRY_MULTIPLIER, max=MAX_RETRY_WAIT),
|
749
754
|
retry=retry_if_connection_error,
|
755
|
+
before_sleep=before_sleep_log(logger, logging.WARNING),
|
750
756
|
)
|
751
757
|
def get_build_status(self, build_id: UUID | None = None) -> dict[str, Any]:
|
752
758
|
"""Get the status of a build."""
|
@@ -755,7 +761,7 @@ class RestClient:
|
|
755
761
|
response = self.client.get(f"/v0.1/builds/{build_id}")
|
756
762
|
response.raise_for_status()
|
757
763
|
except Exception as e:
|
758
|
-
raise JobFetchError(f"Error getting build status: {e!
|
764
|
+
raise JobFetchError(f"Error getting build status: {e!r}.") from e
|
759
765
|
return response.json()
|
760
766
|
|
761
767
|
# TODO: Refactor later so we don't have to ignore PLR0915
|
@@ -763,6 +769,7 @@ class RestClient:
|
|
763
769
|
stop=stop_after_attempt(MAX_RETRY_ATTEMPTS),
|
764
770
|
wait=wait_exponential(multiplier=RETRY_MULTIPLIER, max=MAX_RETRY_WAIT),
|
765
771
|
retry=retry_if_connection_error,
|
772
|
+
before_sleep=before_sleep_log(logger, logging.WARNING),
|
766
773
|
)
|
767
774
|
def create_job(self, config: JobDeploymentConfig) -> dict[str, Any]: # noqa: PLR0915
|
768
775
|
"""Creates a futurehouse job deployment from the environment and environment files.
|
@@ -940,10 +947,10 @@ class RestClient:
|
|
940
947
|
error_detail = response.json()
|
941
948
|
error_message = error_detail.get("detail", str(e))
|
942
949
|
raise JobCreationError(
|
943
|
-
f"Server validation error: {error_message}"
|
950
|
+
f"Server validation error: {error_message}."
|
944
951
|
) from e
|
945
952
|
except Exception as e:
|
946
|
-
raise JobCreationError(f"Error generating docker image: {e!
|
953
|
+
raise JobCreationError(f"Error generating docker image: {e!r}.") from e
|
947
954
|
return build_context
|
948
955
|
|
949
956
|
# TODO: we should have have an async upload_file, check_assembly_status,
|
@@ -952,6 +959,7 @@ class RestClient:
|
|
952
959
|
stop=stop_after_attempt(MAX_RETRY_ATTEMPTS),
|
953
960
|
wait=wait_exponential(multiplier=RETRY_MULTIPLIER, max=MAX_RETRY_WAIT),
|
954
961
|
retry=retry_if_connection_error,
|
962
|
+
before_sleep=before_sleep_log(logger, logging.WARNING),
|
955
963
|
)
|
956
964
|
def upload_file(
|
957
965
|
self,
|
@@ -999,7 +1007,7 @@ class RestClient:
|
|
999
1007
|
)
|
1000
1008
|
if not success:
|
1001
1009
|
raise RestClientError(
|
1002
|
-
f"Assembly failed or timed out for one or more files: {uploaded_files}"
|
1010
|
+
f"Assembly failed or timed out for one or more files: {uploaded_files}."
|
1003
1011
|
)
|
1004
1012
|
|
1005
1013
|
logger.info(f"Successfully uploaded {file_path} to {upload_id}")
|
@@ -1044,7 +1052,9 @@ class RestClient:
|
|
1044
1052
|
)
|
1045
1053
|
uploaded_files.append(file_name)
|
1046
1054
|
except Exception as e:
|
1047
|
-
raise FileUploadError(
|
1055
|
+
raise FileUploadError(
|
1056
|
+
f"Error uploading directory {dir_path}: {e!r}."
|
1057
|
+
) from e
|
1048
1058
|
|
1049
1059
|
return uploaded_files
|
1050
1060
|
|
@@ -1095,7 +1105,7 @@ class RestClient:
|
|
1095
1105
|
logger.info(f"Successfully uploaded {file_name}")
|
1096
1106
|
except Exception as e:
|
1097
1107
|
logger.exception(f"Error uploading file {file_path}")
|
1098
|
-
raise FileUploadError(f"Error uploading file {file_path}: {e}") from e
|
1108
|
+
raise FileUploadError(f"Error uploading file {file_path}: {e!r}.") from e
|
1099
1109
|
return status_url
|
1100
1110
|
|
1101
1111
|
def _upload_chunks_parallel(
|
@@ -1156,9 +1166,9 @@ class RestClient:
|
|
1156
1166
|
f"Uploaded chunk {chunk_index + 1}/{total_chunks} of {file_name}"
|
1157
1167
|
)
|
1158
1168
|
except Exception as e:
|
1159
|
-
logger.error(f"Error uploading chunk {chunk_index}: {e}")
|
1169
|
+
logger.error(f"Error uploading chunk {chunk_index}: {e!r}.")
|
1160
1170
|
raise FileUploadError(
|
1161
|
-
f"Error uploading chunk {chunk_index} of {file_name}: {e}"
|
1171
|
+
f"Error uploading chunk {chunk_index} of {file_name}: {e!r}."
|
1162
1172
|
) from e
|
1163
1173
|
|
1164
1174
|
# Upload the final chunk with retry logic
|
@@ -1224,11 +1234,11 @@ class RestClient:
|
|
1224
1234
|
except Exception as e:
|
1225
1235
|
if retries >= max_retries - 1:
|
1226
1236
|
raise FileUploadError(
|
1227
|
-
f"Error uploading final chunk of {file_name}: {e}"
|
1237
|
+
f"Error uploading final chunk of {file_name}: {e!r}."
|
1228
1238
|
) from e
|
1229
1239
|
retries += 1
|
1230
1240
|
logger.warning(
|
1231
|
-
f"Error uploading final chunk of {file_name}, retrying in {retry_delay}s... (attempt {retries}/{max_retries}): {e}"
|
1241
|
+
f"Error uploading final chunk of {file_name}, retrying in {retry_delay}s... (attempt {retries}/{max_retries}): {e!r}."
|
1232
1242
|
)
|
1233
1243
|
time.sleep(retry_delay)
|
1234
1244
|
|
@@ -1296,6 +1306,7 @@ class RestClient:
|
|
1296
1306
|
stop=stop_after_attempt(MAX_RETRY_ATTEMPTS),
|
1297
1307
|
wait=wait_exponential(multiplier=RETRY_MULTIPLIER, max=MAX_RETRY_WAIT),
|
1298
1308
|
retry=retry_if_connection_error,
|
1309
|
+
before_sleep=before_sleep_log(logger, logging.WARNING),
|
1299
1310
|
)
|
1300
1311
|
def list_files(
|
1301
1312
|
self,
|
@@ -1318,7 +1329,7 @@ class RestClient:
|
|
1318
1329
|
"""
|
1319
1330
|
if not bool(trajectory_id) ^ bool(upload_id):
|
1320
1331
|
raise RestClientError(
|
1321
|
-
"Must at least specify one of trajectory_id or upload_id, but not both"
|
1332
|
+
"Must at least specify one of trajectory_id or upload_id, but not both."
|
1322
1333
|
)
|
1323
1334
|
try:
|
1324
1335
|
url = f"/v0.1/crows/{job_name}/list-files"
|
@@ -1332,18 +1343,19 @@ class RestClient:
|
|
1332
1343
|
f"Error listing files for job {job_name}, trajectory {trajectory_id}, upload_id {upload_id}: {e.response.text}"
|
1333
1344
|
)
|
1334
1345
|
raise RestClientError(
|
1335
|
-
f"Error listing files: {e.response.status_code} - {e.response.text}"
|
1346
|
+
f"Error listing files: {e.response.status_code} - {e.response.text}."
|
1336
1347
|
) from e
|
1337
1348
|
except Exception as e:
|
1338
1349
|
logger.exception(
|
1339
1350
|
f"Error listing files for job {job_name}, trajectory {trajectory_id}, upload_id {upload_id}"
|
1340
1351
|
)
|
1341
|
-
raise RestClientError(f"Error listing files: {e!
|
1352
|
+
raise RestClientError(f"Error listing files: {e!r}.") from e
|
1342
1353
|
|
1343
1354
|
@retry(
|
1344
1355
|
stop=stop_after_attempt(MAX_RETRY_ATTEMPTS),
|
1345
1356
|
wait=wait_exponential(multiplier=RETRY_MULTIPLIER, max=MAX_RETRY_WAIT),
|
1346
1357
|
retry=retry_if_connection_error,
|
1358
|
+
before_sleep=before_sleep_log(logger, logging.WARNING),
|
1347
1359
|
)
|
1348
1360
|
def download_file(
|
1349
1361
|
self,
|
@@ -1394,7 +1406,7 @@ class RestClient:
|
|
1394
1406
|
if destination_path.exists():
|
1395
1407
|
destination_path.unlink()
|
1396
1408
|
raise RestClientError(
|
1397
|
-
f"Error downloading file: {e.response.status_code} - {e.response.text}"
|
1409
|
+
f"Error downloading file: {e.response.status_code} - {e.response.text}."
|
1398
1410
|
) from e
|
1399
1411
|
except RemoteProtocolError as e:
|
1400
1412
|
logger.error(
|
@@ -1413,12 +1425,13 @@ class RestClient:
|
|
1413
1425
|
)
|
1414
1426
|
if destination_path.exists():
|
1415
1427
|
destination_path.unlink() # Clean up partial file
|
1416
|
-
raise RestClientError(f"Error downloading file: {e!
|
1428
|
+
raise RestClientError(f"Error downloading file: {e!r}.") from e
|
1417
1429
|
|
1418
1430
|
@retry(
|
1419
1431
|
stop=stop_after_attempt(MAX_RETRY_ATTEMPTS),
|
1420
1432
|
wait=wait_exponential(multiplier=RETRY_MULTIPLIER, max=MAX_RETRY_WAIT),
|
1421
1433
|
retry=retry_if_connection_error,
|
1434
|
+
before_sleep=before_sleep_log(logger, logging.WARNING),
|
1422
1435
|
)
|
1423
1436
|
def get_world_model(
|
1424
1437
|
self, world_model_id: UUID | None = None, name: str | None = None
|
@@ -1450,15 +1463,16 @@ class RestClient:
|
|
1450
1463
|
"World model not found with the specified identifier."
|
1451
1464
|
) from e
|
1452
1465
|
raise WorldModelFetchError(
|
1453
|
-
f"Error fetching world model: {e.response.status_code} - {e.response.text}"
|
1466
|
+
f"Error fetching world model: {e.response.status_code} - {e.response.text}."
|
1454
1467
|
) from e
|
1455
1468
|
except Exception as e:
|
1456
|
-
raise WorldModelFetchError(f"An unexpected error occurred: {e}") from e
|
1469
|
+
raise WorldModelFetchError(f"An unexpected error occurred: {e!r}.") from e
|
1457
1470
|
|
1458
1471
|
@retry(
|
1459
1472
|
stop=stop_after_attempt(MAX_RETRY_ATTEMPTS),
|
1460
1473
|
wait=wait_exponential(multiplier=RETRY_MULTIPLIER, max=MAX_RETRY_WAIT),
|
1461
1474
|
retry=retry_if_connection_error,
|
1475
|
+
before_sleep=before_sleep_log(logger, logging.WARNING),
|
1462
1476
|
)
|
1463
1477
|
async def aget_world_model(
|
1464
1478
|
self, world_model_id: UUID | None = None, name: str | None = None
|
@@ -1490,15 +1504,16 @@ class RestClient:
|
|
1490
1504
|
"World model not found with the specified identifier."
|
1491
1505
|
) from e
|
1492
1506
|
raise WorldModelFetchError(
|
1493
|
-
f"Error fetching world model: {e.response.status_code} - {e.response.text}"
|
1507
|
+
f"Error fetching world model: {e.response.status_code} - {e.response.text}."
|
1494
1508
|
) from e
|
1495
1509
|
except Exception as e:
|
1496
|
-
raise WorldModelFetchError(f"An unexpected error occurred: {e}") from e
|
1510
|
+
raise WorldModelFetchError(f"An unexpected error occurred: {e!r}.") from e
|
1497
1511
|
|
1498
1512
|
@retry(
|
1499
1513
|
stop=stop_after_attempt(MAX_RETRY_ATTEMPTS),
|
1500
1514
|
wait=wait_exponential(multiplier=RETRY_MULTIPLIER, max=MAX_RETRY_WAIT),
|
1501
1515
|
retry=retry_if_connection_error,
|
1516
|
+
before_sleep=before_sleep_log(logger, logging.WARNING),
|
1502
1517
|
)
|
1503
1518
|
def create_world_model(self, payload: WorldModel) -> UUID:
|
1504
1519
|
"""Create a new, immutable world model snapshot.
|
@@ -1522,20 +1537,21 @@ class RestClient:
|
|
1522
1537
|
except HTTPStatusError as e:
|
1523
1538
|
if e.response.status_code == codes.BAD_REQUEST:
|
1524
1539
|
raise WorldModelCreationError(
|
1525
|
-
f"Invalid payload for world model creation: {e.response.text}"
|
1540
|
+
f"Invalid payload for world model creation: {e.response.text}."
|
1526
1541
|
) from e
|
1527
1542
|
raise WorldModelCreationError(
|
1528
|
-
f"Error creating world model: {e.response.status_code} - {e.response.text}"
|
1543
|
+
f"Error creating world model: {e.response.status_code} - {e.response.text}."
|
1529
1544
|
) from e
|
1530
1545
|
except Exception as e:
|
1531
1546
|
raise WorldModelCreationError(
|
1532
|
-
f"An unexpected error occurred during world model creation: {e}"
|
1547
|
+
f"An unexpected error occurred during world model creation: {e!r}."
|
1533
1548
|
) from e
|
1534
1549
|
|
1535
1550
|
@retry(
|
1536
1551
|
stop=stop_after_attempt(MAX_RETRY_ATTEMPTS),
|
1537
1552
|
wait=wait_exponential(multiplier=RETRY_MULTIPLIER, max=MAX_RETRY_WAIT),
|
1538
1553
|
retry=retry_if_connection_error,
|
1554
|
+
before_sleep=before_sleep_log(logger, logging.WARNING),
|
1539
1555
|
)
|
1540
1556
|
async def acreate_world_model(self, payload: WorldModel) -> UUID:
|
1541
1557
|
"""Asynchronously create a new, immutable world model snapshot.
|
@@ -1558,14 +1574,14 @@ class RestClient:
|
|
1558
1574
|
except HTTPStatusError as e:
|
1559
1575
|
if e.response.status_code == codes.BAD_REQUEST:
|
1560
1576
|
raise WorldModelCreationError(
|
1561
|
-
f"Invalid payload for world model creation: {e.response.text}"
|
1577
|
+
f"Invalid payload for world model creation: {e.response.text}."
|
1562
1578
|
) from e
|
1563
1579
|
raise WorldModelCreationError(
|
1564
|
-
f"Error creating world model: {e.response.status_code} - {e.response.text}"
|
1580
|
+
f"Error creating world model: {e.response.status_code} - {e.response.text}."
|
1565
1581
|
) from e
|
1566
1582
|
except Exception as e:
|
1567
1583
|
raise WorldModelCreationError(
|
1568
|
-
f"An unexpected error occurred during world model creation: {e}"
|
1584
|
+
f"An unexpected error occurred during world model creation: {e!r}."
|
1569
1585
|
) from e
|
1570
1586
|
|
1571
1587
|
@retry(
|
@@ -27,17 +27,13 @@ class InitialState(BaseState):
|
|
27
27
|
|
28
28
|
class ASVState(BaseState, Generic[T]):
|
29
29
|
action: OpResult[T] = Field()
|
30
|
-
|
30
|
+
next_agent_state: Any = Field()
|
31
31
|
value: float = Field()
|
32
32
|
|
33
33
|
@field_serializer("action")
|
34
34
|
def serialize_action(self, action: OpResult[T]) -> dict:
|
35
35
|
return action.to_dict()
|
36
36
|
|
37
|
-
@field_serializer("next_state")
|
38
|
-
def serialize_next_state(self, state: Any) -> str:
|
39
|
-
return str(state)
|
40
|
-
|
41
37
|
|
42
38
|
class EnvResetState(BaseState):
|
43
39
|
observations: list[Message] = Field()
|
futurehouse_client/version.py
CHANGED
@@ -17,5 +17,5 @@ __version__: str
|
|
17
17
|
__version_tuple__: VERSION_TUPLE
|
18
18
|
version_tuple: VERSION_TUPLE
|
19
19
|
|
20
|
-
__version__ = version = '0.3.20.
|
21
|
-
__version_tuple__ = version_tuple = (0, 3, 20, '
|
20
|
+
__version__ = version = '0.3.20.dev225'
|
21
|
+
__version_tuple__ = version_tuple = (0, 3, 20, 'dev225')
|
{futurehouse_client-0.3.20.dev208.dist-info → futurehouse_client-0.3.20.dev225.dist-info}/METADATA
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: futurehouse-client
|
3
|
-
Version: 0.3.20.
|
3
|
+
Version: 0.3.20.dev225
|
4
4
|
Summary: A client for interacting with endpoints of the FutureHouse service.
|
5
5
|
Author-email: FutureHouse technical staff <hello@futurehouse.org>
|
6
6
|
License: Apache License
|
{futurehouse_client-0.3.20.dev208.dist-info → futurehouse_client-0.3.20.dev225.dist-info}/RECORD
RENAMED
@@ -1,20 +1,20 @@
|
|
1
1
|
futurehouse_client/__init__.py,sha256=BztM_ntbgmIEjzvnBWcvPhvLjM8xGDFCK0Upf3-nIn8,488
|
2
2
|
futurehouse_client/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
3
|
-
futurehouse_client/version.py,sha256=
|
3
|
+
futurehouse_client/version.py,sha256=UzQXVtwR5aOM-s9sEJYt5xEHWLIMFYPuR7s_I_I9-sI,530
|
4
4
|
futurehouse_client/clients/__init__.py,sha256=-HXNj-XJ3LRO5XM6MZ709iPs29YpApss0Q2YYg1qMZw,280
|
5
5
|
futurehouse_client/clients/job_client.py,sha256=D51_qTxya6g5Wfg_ZfJdP031TV_YDJeXkGMiYAJ1qRc,11962
|
6
|
-
futurehouse_client/clients/rest_client.py,sha256=
|
6
|
+
futurehouse_client/clients/rest_client.py,sha256=m4izsMCwq2V_oR-zkzxdLE-4y6Z0mm5ArWvpvtuaBKY,70158
|
7
7
|
futurehouse_client/models/__init__.py,sha256=kQ4R7VEuRxO0IQEW_sk9CndBL7zzl8rUKI24ddyYLM0,647
|
8
8
|
futurehouse_client/models/app.py,sha256=SvkXOu5Qx28_jCS84XKKepnpGyfrQUEVnxS-JGqmsaE,29128
|
9
|
-
futurehouse_client/models/client.py,sha256=
|
9
|
+
futurehouse_client/models/client.py,sha256=WFD1ddR0O7nD1ErqcJ-kt_miIW22KP6IDOSkaSdVZ8M,1716
|
10
10
|
futurehouse_client/models/rest.py,sha256=AwPMcB1ruoqaI8NIhX2ZzN8UuX6XsaQ7uzeSE8EpwKk,1573
|
11
11
|
futurehouse_client/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
12
12
|
futurehouse_client/utils/auth.py,sha256=tgWELjKfg8eWme_qdcRmc8TjQN9DVZuHHaVXZNHLchk,2960
|
13
13
|
futurehouse_client/utils/general.py,sha256=A_rtTiYW30ELGEZlWCIArO7q1nEmqi8hUlmBRYkMQ_c,767
|
14
14
|
futurehouse_client/utils/module_utils.py,sha256=aFyd-X-pDARXz9GWpn8SSViUVYdSbuy9vSkrzcVIaGI,4955
|
15
15
|
futurehouse_client/utils/monitoring.py,sha256=UjRlufe67kI3VxRHOd5fLtJmlCbVA2Wqwpd4uZhXkQM,8728
|
16
|
-
futurehouse_client-0.3.20.
|
17
|
-
futurehouse_client-0.3.20.
|
18
|
-
futurehouse_client-0.3.20.
|
19
|
-
futurehouse_client-0.3.20.
|
20
|
-
futurehouse_client-0.3.20.
|
16
|
+
futurehouse_client-0.3.20.dev225.dist-info/licenses/LICENSE,sha256=oQ9ZHjUi-_6GfP3gs14FlPb0OlGwE1QCCKFGnJ4LD2I,11341
|
17
|
+
futurehouse_client-0.3.20.dev225.dist-info/METADATA,sha256=Ns45fN-WRg5MFzEERIfrHHHIsSB-cLXIVMyPY3a-R1c,26805
|
18
|
+
futurehouse_client-0.3.20.dev225.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
19
|
+
futurehouse_client-0.3.20.dev225.dist-info/top_level.txt,sha256=TRuLUCt_qBnggdFHCX4O_BoCu1j2X43lKfIZC-ElwWY,19
|
20
|
+
futurehouse_client-0.3.20.dev225.dist-info/RECORD,,
|
{futurehouse_client-0.3.20.dev208.dist-info → futurehouse_client-0.3.20.dev225.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|
File without changes
|