proximl 0.5.9__py3-none-any.whl → 0.5.11__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.
Files changed (59) hide show
  1. proximl/__init__.py +1 -1
  2. proximl/checkpoints.py +46 -28
  3. proximl/cli/cloudbender/__init__.py +2 -1
  4. proximl/cli/cloudbender/datastore.py +2 -7
  5. proximl/cli/cloudbender/service.py +19 -2
  6. proximl/cli/project/__init__.py +3 -72
  7. proximl/cli/project/data_connector.py +61 -0
  8. proximl/cli/project/datastore.py +61 -0
  9. proximl/cli/project/service.py +61 -0
  10. proximl/cloudbender/cloudbender.py +4 -2
  11. proximl/cloudbender/data_connectors.py +8 -0
  12. proximl/cloudbender/datastores.py +9 -19
  13. proximl/cloudbender/nodes.py +44 -1
  14. proximl/cloudbender/providers.py +53 -0
  15. proximl/cloudbender/regions.py +48 -0
  16. proximl/cloudbender/services.py +65 -1
  17. proximl/datasets.py +41 -12
  18. proximl/exceptions.py +51 -0
  19. proximl/jobs.py +15 -19
  20. proximl/models.py +41 -22
  21. proximl/volumes.py +24 -5
  22. {proximl-0.5.9.dist-info → proximl-0.5.11.dist-info}/METADATA +1 -1
  23. {proximl-0.5.9.dist-info → proximl-0.5.11.dist-info}/RECORD +48 -46
  24. tests/integration/projects/conftest.py +3 -1
  25. tests/integration/projects/test_projects_data_connectors_integration.py +44 -0
  26. tests/integration/projects/test_projects_datastores_integration.py +42 -0
  27. tests/integration/projects/test_projects_services_integration.py +44 -0
  28. tests/integration/test_checkpoints_integration.py +1 -2
  29. tests/integration/test_jobs_integration.py +13 -0
  30. tests/integration/test_models_integration.py +0 -1
  31. tests/unit/cli/projects/__init__.py +0 -0
  32. tests/unit/cli/projects/test_cli_project_data_connector_unit.py +28 -0
  33. tests/unit/cli/projects/test_cli_project_datastore_unit.py +26 -0
  34. tests/unit/cli/projects/test_cli_project_key_unit.py +26 -0
  35. tests/unit/cli/projects/test_cli_project_secret_unit.py +26 -0
  36. tests/unit/cli/projects/test_cli_project_service_unit.py +26 -0
  37. tests/unit/cli/projects/test_cli_project_unit.py +19 -0
  38. tests/unit/cloudbender/test_datastores_unit.py +1 -5
  39. tests/unit/cloudbender/test_services_unit.py +6 -0
  40. tests/unit/conftest.py +158 -15
  41. tests/unit/test_checkpoints_unit.py +15 -23
  42. tests/unit/test_datasets_unit.py +15 -20
  43. tests/unit/test_models_unit.py +13 -16
  44. tests/unit/test_volumes_unit.py +3 -0
  45. proximl/cli/cloudbender/reservation.py +0 -159
  46. proximl/cli/project.py +0 -154
  47. proximl/cloudbender/reservations.py +0 -126
  48. proximl/projects.py +0 -187
  49. tests/integration/test_projects_integration.py +0 -44
  50. tests/unit/cli/cloudbender/test_cli_reservation_unit.py +0 -38
  51. tests/unit/cli/test_cli_project_unit.py +0 -46
  52. tests/unit/cloudbender/test_reservations_unit.py +0 -173
  53. tests/unit/test_auth.py +0 -30
  54. tests/unit/test_projects_unit.py +0 -294
  55. tests/unit/test_proximl.py +0 -54
  56. {proximl-0.5.9.dist-info → proximl-0.5.11.dist-info}/LICENSE +0 -0
  57. {proximl-0.5.9.dist-info → proximl-0.5.11.dist-info}/WHEEL +0 -0
  58. {proximl-0.5.9.dist-info → proximl-0.5.11.dist-info}/entry_points.txt +0 -0
  59. {proximl-0.5.9.dist-info → proximl-0.5.11.dist-info}/top_level.txt +0 -0
@@ -2,20 +2,19 @@ examples/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  examples/create_dataset_and_training_job.py,sha256=Fqueoz2KD1MTxnU960iqHUdxvo68Xe64HT5XS55lI9w,1178
3
3
  examples/local_storage.py,sha256=6K6LMO7ZPI7N2KdBcgqXSvdsqJfjISzN4yRO9YrJqbA,1745
4
4
  examples/training_inference_pipeline.py,sha256=pxux0QUUtRXxKj2rX-6fPEKBIi43mhRd1zJ-Lf1ZJGI,2334
5
- proximl/__init__.py,sha256=3gq9ZsAAIsysDGCFRY4rF-eaMA6i7uPpZDDQ39rjBKM,432
5
+ proximl/__init__.py,sha256=V_dfFciJOujLG1RbQZrhWik3nYhzhU0V6c28qHJpOCk,433
6
6
  proximl/__main__.py,sha256=JgErYkiskih8Y6oRwowALtR-rwQhAAdqOYWjQraRIPI,59
7
7
  proximl/auth.py,sha256=LacGBDAVel5HcJx7JXp1wVn3s0gZc7nf--vDfSFOXYU,26565
8
- proximl/checkpoints.py,sha256=JPSq9iTSb6dBu0JFKJZgMqDBt9kSGxfl2OaxKehk4QY,8274
8
+ proximl/checkpoints.py,sha256=Ezpiab9Wfcmd2h5Slm9U5lekZGXiPzvhDKxXXgla1yo,8790
9
9
  proximl/connections.py,sha256=0C8VJSkDturQVlzg_3yAkQz8W9NAmgzDCBRK_SrzeUI,20035
10
- proximl/datasets.py,sha256=RB7IiDkWZPuwFw1o0xKQn10HS_3ui_BZf7tVlAvCIHA,7935
10
+ proximl/datasets.py,sha256=dBDzf7DZ1rS5LmJPy5oV-JC0PXGTf-NZuBDG1KPyoA4,8600
11
11
  proximl/environments.py,sha256=L_cRmau1wJxpGvnJAqgms-GiNdDhiuOntrlBqsdoE3A,1507
12
- proximl/exceptions.py,sha256=3q8qj-sahwEEHeYyjY89GrytVAgHDApN8HSCB3dhnf4,4094
12
+ proximl/exceptions.py,sha256=q1YfsqbLw3y1DJHP1FcMM8xG5CEhQsTIvRfq4v5PyVw,5468
13
13
  proximl/gpu_types.py,sha256=V-EZzE-hDLi5eVQ2_9yGLTm8-Qk1AnnzctfSVC44yLY,1901
14
- proximl/jobs.py,sha256=kQbC9ojrMEvRAysFfftwLdVtNDjpiFBfji4bz1To82E,17838
15
- proximl/models.py,sha256=QLtkIoznww5cZE_Eqoy7IaEgCEfNbJOe_21hdoExO-k,7750
16
- proximl/projects.py,sha256=87Fsce8BkPJLN_cEsZ3FLequpBgmd8WtjY7Vs7uZkO4,5209
14
+ proximl/jobs.py,sha256=DySH1hzLiYFdE5IhAX5ppISXQTK-hB1dKtWOgrTenEM,17632
15
+ proximl/models.py,sha256=gJQ1C3HGEHScW41PAQS3Q8IKSQSauIUIJxOZvkDzizQ,8284
17
16
  proximl/proximl.py,sha256=yzKbJ7ak8YiVv6q7CEagPufECNU4YTNeul6N3OuyH1M,10864
18
- proximl/volumes.py,sha256=VnlgTeQwoDKGpZRhMrSKtxe4EWzb4qQ-OdDyaJohH5Y,8094
17
+ proximl/volumes.py,sha256=qRIgzvJ4NTHuLi7QN_6v61Urns8l4Y9KjWladCIQ2gk,8443
19
18
  proximl/cli/__init__.py,sha256=R_8ExAKQp67N2xtwGM00gtK3zSoWPGruHAP_XFLddSI,4346
20
19
  proximl/cli/checkpoint.py,sha256=Iv1i1EAt2LJey2wy2ioQ6-ZysqwRG4kFj0lnE6INZCM,7170
21
20
  proximl/cli/connection.py,sha256=YiWqRIB9ZfTl30DjDFaJEpXuDrA-Ldl9PEzFFdZ_hFI,1700
@@ -23,33 +22,33 @@ proximl/cli/dataset.py,sha256=ueoeicBY8aMLpvpKUIBICnS9GsEnDOj7ZlFmOfjjY4c,6871
23
22
  proximl/cli/environment.py,sha256=nh7oYbG5oOrZEpZkMkKgvzFXmQJWnFTMw1-YbuvkdFU,1019
24
23
  proximl/cli/gpu.py,sha256=xL8eqM5ca_Ueaj8cWit1iKn34KhaR0StrubVeRU2YQY,883
25
24
  proximl/cli/model.py,sha256=xdjveIaRPK7MdfrnFygPEuwYRJRW9VqheZ-11XnXDcE,6111
26
- proximl/cli/project.py,sha256=Er1twSiWQSAKir-hBIT9fRo2fc_UGqFoIJOwwjQGmlo,3522
27
25
  proximl/cli/volume.py,sha256=uyIrKov4zwCjyLyZrEJYoEbIkS0zdU3xSyWZk2BM1kA,6246
28
- proximl/cli/cloudbender/__init__.py,sha256=vxj62MyM3sC9h8M4ii3szH4s9JvEhicOQ0D0m7eNwPA,534
26
+ proximl/cli/cloudbender/__init__.py,sha256=ATPj85Be6o4xw8M6vvHfkuLyw1drc_0IlCMh1wSebYQ,592
29
27
  proximl/cli/cloudbender/data_connector.py,sha256=D5xbUzpUGpn_NN-NZQ9vSxOZY610c1LsoBC40DkPwkw,3606
30
- proximl/cli/cloudbender/datastore.py,sha256=_vQOj-NfrL_nj4HfxNJL63TJZjLgfDyztRLyaRU58v8,3478
28
+ proximl/cli/cloudbender/datastore.py,sha256=YBFbobEKjw3s5uYC1krD_Oa-VEz3kjQ5UvPOqkq-NJE,3323
31
29
  proximl/cli/cloudbender/device.py,sha256=FdQZPESP6YBfUSzXq1Byu7eNMKi59qSOICONK-TEljI,3453
32
30
  proximl/cli/cloudbender/node.py,sha256=xxzj68YvpRey2vZQasgYTnwv3x7TnwpuPSSf8Ma5a54,3843
33
31
  proximl/cli/cloudbender/provider.py,sha256=qhWbDK1tWi00wQWEYqGw7yGoZx0nEjV40GLHRuuE86c,1726
34
32
  proximl/cli/cloudbender/region.py,sha256=WnSkY4dXKRJ-FNaoxMfmoh6iuUx5dXCNJmEFT34Xtao,2892
35
- proximl/cli/cloudbender/reservation.py,sha256=xzHs5l8BbmYgKUq6kfFU-jEtRQY0j_vYnmRVcL4wwDo,3569
36
- proximl/cli/cloudbender/service.py,sha256=YimwXQml82-PKKQIqu9Cvggo9wOKLVTJPxMvDf4pgn8,2869
33
+ proximl/cli/cloudbender/service.py,sha256=6NuwlFULJLtOmMy9OFA8GkW4MLvNemAcd_KitQyDXV8,3147
37
34
  proximl/cli/job/__init__.py,sha256=s8mU2PvCWDcv4gGT3EmjHn8MIZlXBAoayoZKmnKpXnY,6545
38
35
  proximl/cli/job/create.py,sha256=sGvbenY0yxvxHo-FZVbdw8FaZx5D4ekTCjD7P4YHG4g,34288
39
- proximl/cli/project/__init__.py,sha256=VhBZb1WAbe9NCTrYRl4aRNppFn1loDDMQ-cTqBCeV7A,3402
36
+ proximl/cli/project/__init__.py,sha256=nSU_qBNVPezVA_Uu54ha37PAfCmTsIclXptEvIwiRME,1904
37
+ proximl/cli/project/data_connector.py,sha256=CKF4snfrzDmeDXb4au8nV2W9jTweRMDZ89U2GAlBedQ,1411
38
+ proximl/cli/project/datastore.py,sha256=YusrUTKY_qIwEOBN2gXOUoKCUp2qbWTKzquKc0DcUsE,1336
40
39
  proximl/cli/project/key.py,sha256=23ugcWOAxNJvC8VzG3FsEUWJ1_FZANnhq66cO04ZEVY,3203
41
40
  proximl/cli/project/secret.py,sha256=uys2FsXuO_8_EoolQNuOZ9btX4I0LXBeKG8dGx6StMM,1621
41
+ proximl/cli/project/service.py,sha256=06UoGbAWbPPh3kBdH3QXBTzj_k7AfKcD_bAyWGpYeDE,1310
42
42
  proximl/cloudbender/__init__.py,sha256=iE29obtC0_9f0IhRvHQcG5aY58fVhVYipTakpjAhdss,64
43
- proximl/cloudbender/cloudbender.py,sha256=E1_MyOhl-Fq5gr6vitCdI34_f24Pa5cg9YrFXIXPwg8,634
44
- proximl/cloudbender/data_connectors.py,sha256=urhmaAi4TBR-6L1CD2qS7SG3Dcwo9hOi8Gx613MzKVU,3297
45
- proximl/cloudbender/datastores.py,sha256=RzwJnoVs8gn_WpUJxF6MZ1dTQogUVX0B25ALQ26QOmE,3506
43
+ proximl/cloudbender/cloudbender.py,sha256=k9Naj_le32YZotM7PRrhml3DxjqRetsHcgg5J4RtJ_4,717
44
+ proximl/cloudbender/data_connectors.py,sha256=6TBTmEe5S5W0Y3ERa63aqM1IRcAJexg2elHel6o_j64,3420
45
+ proximl/cloudbender/datastores.py,sha256=kHZDY4kiJBlsRxcETExQAByl5z0l1JXndGphYf6eugc,3255
46
46
  proximl/cloudbender/device_configs.py,sha256=VkiF8MXHfsEWEwdgNeioT8dnEAXkY3_Z1r3L3UlZK_E,3399
47
47
  proximl/cloudbender/devices.py,sha256=vHooaOw2k2Tf99FJHnVZTgggqCTYJg7rq46aUPW0k8M,5660
48
- proximl/cloudbender/nodes.py,sha256=QeWUaWW1HNvCune1lhakcve6LJyMzOy7cjCtvyOiaTs,4332
49
- proximl/cloudbender/providers.py,sha256=cH5lCew5WCFpXYS93vuoGNWkZyx7T_mdMH6YNWp2QGs,2036
50
- proximl/cloudbender/regions.py,sha256=Nu1LT6nuLD8Nt-5-7_FLlxDNZoDDAY6QduTdEBqfxJA,3570
51
- proximl/cloudbender/reservations.py,sha256=14ImJRLWQGG7CXDYhDnOI2W8pnP6CVVG2aVpysQVN0E,3586
52
- proximl/cloudbender/services.py,sha256=KR0EQ-BUVk1ov9Q195NsnfiSiMb9vOYD8XyxD87RRvw,3222
48
+ proximl/cloudbender/nodes.py,sha256=T7aCh2O6sF2tFX4D5a7wDW8hJmEgHoCV9So1kg70tdg,5924
49
+ proximl/cloudbender/providers.py,sha256=KLO4Pc8yeW8TpSDICgTw3NxN44_0s4HptVsR2hHc28w,3738
50
+ proximl/cloudbender/regions.py,sha256=6doBdfMXIQI-uexzvwmNg2ATDzruatw-ixviZSMjonU,5157
51
+ proximl/cloudbender/services.py,sha256=km3KcIgaRRVb3iuZEIn6ONIekuyXhBgk_brAFJcMMl4,5126
53
52
  proximl/projects/__init__.py,sha256=6NKCcHtQMeGB1IyU-djANphfnDX6MEkrXUM5Fyq9fWg,75
54
53
  proximl/projects/data_connectors.py,sha256=559yJ-9qmva2JcNReuCyUQxdrSRIEROcGX5BDVr8ySs,1662
55
54
  proximl/projects/datastores.py,sha256=zAmKX9CibeS7PSXVvExk0SVrEo9Zq83kz6CQw0GoHck,1560
@@ -59,37 +58,36 @@ proximl/projects/secrets.py,sha256=NxjP1_CR9UQUMazeS-esin3zH54xZ4b4R11YNSU4hsI,2
59
58
  proximl/projects/services.py,sha256=Jian2RHV9u3pHQKa7AsHKj25DrR4DstB-JaIDhSu7Tw,1679
60
59
  tests/integration/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
61
60
  tests/integration/conftest.py,sha256=zRWpherX-yfbpk7xqZk9bIZCyJ-dwVeszY_7kekn2M4,1134
62
- tests/integration/test_checkpoints_integration.py,sha256=DUA6ZlX0gsnKCEvFmWCKbKkfJG3dQG6uD8T3fgo7y0M,3230
61
+ tests/integration/test_checkpoints_integration.py,sha256=m-m6KM5Iy99bbCyA6VQVBFWc9MI7VItuoAPb_Q6Q0Fk,3206
63
62
  tests/integration/test_datasets_integration.py,sha256=Ndp8itnncDSjVH0t5BM5R_-_yL4qt6JrkQAVOTMi1R8,3499
64
63
  tests/integration/test_environments_integration.py,sha256=7P6pKSyxA7rTwyNCD9HEaM2ablMG8WcBesOzkG-BgsQ,1403
65
64
  tests/integration/test_gpu_types_integration.py,sha256=Zv-yrHcAgKau9BJQvzi92bdrRHhLPl_hbhhzNLEWJ9w,1256
66
- tests/integration/test_jobs_integration.py,sha256=fMqYfdzHOxUxtRGe0XZlsFhjUGoeo0Prxbq5_yQvroc,24730
67
- tests/integration/test_models_integration.py,sha256=JFgX6V652iMobpNKfn0XdP9_TDg5pnVtG8lL6yrEOZk,2902
68
- tests/integration/test_projects_integration.py,sha256=XdGGqvOQby77kMfoD_zAukKvN6tN7v1QydZ4hFp7u_s,1446
65
+ tests/integration/test_jobs_integration.py,sha256=pivsSH_wOgyf7X9KODmJR0kAQhY9RLFsRZ7RogCvaXc,25117
66
+ tests/integration/test_models_integration.py,sha256=cnsao7Zo4PwVCbdAdcBs0xombAslI_X_JOw6ipxdzOA,2878
69
67
  tests/integration/test_volumes_integration.py,sha256=Xo2Whw2U-7jyvESIkyex3f0SMXKlExe3kLmsbpXTHhQ,3270
70
68
  tests/integration/cloudbender/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
71
69
  tests/integration/cloudbender/test_providers_integration.py,sha256=gFqPQom-Cn1iZC50_ChQ2us2_f4tIPATQSAUcWdf7ss,1473
72
70
  tests/integration/projects/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
73
- tests/integration/projects/conftest.py,sha256=UW9t62xiBRfU3anBRB-sdURD2eqo7xVAUsfTGsgWpcQ,208
71
+ tests/integration/projects/conftest.py,sha256=o7rBOFGvcmZ3q0fy7jCIm2CBqn_ULojPP1XFBBUPEVQ,242
72
+ tests/integration/projects/test_projects_data_connectors_integration.py,sha256=ag6w2FFQYNlAdV83rOqat0FVZnP4JFhDunCvRwMJdzo,1630
73
+ tests/integration/projects/test_projects_datastores_integration.py,sha256=DCHFnCYguhtrZvfTeWgKpPxlkeAXxVfE3IWkM4KjgAc,1469
74
74
  tests/integration/projects/test_projects_integration.py,sha256=wlRLxZkMnJZHlNPaeRFjAeyUlMfbgdrrFEI2eMBcoUI,1241
75
75
  tests/integration/projects/test_projects_keys_integration.py,sha256=cLvka_XlQHCYAFX4-gsH57KzhnpQZOGRvk9Q-HZEYbI,1423
76
76
  tests/integration/projects/test_projects_secrets_integration.py,sha256=Q8GEJkBE4X38F36sJza3VRo1pWdF9qEEr2kuADqgBB8,1478
77
+ tests/integration/projects/test_projects_services_integration.py,sha256=MV9tZFTgrUtzImNrc-ZAoHYLbf_ZxAAAeVpxxr5AGdg,1530
77
78
  tests/unit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
78
- tests/unit/conftest.py,sha256=dilDp7ZSmyg9tJbkJoGcqUF07JBTdkNoULOR6qK7NsU,31197
79
- tests/unit/test_auth.py,sha256=IJZHT5CZLNfu3MybTdEWIsKlvxNfFYpZ6oWYzbS856g,858
79
+ tests/unit/conftest.py,sha256=VKpgpCDnWvDBqns7ENOe0eS_cCz_RIol5X3ybS4ePiQ,35521
80
80
  tests/unit/test_auth_unit.py,sha256=IJZHT5CZLNfu3MybTdEWIsKlvxNfFYpZ6oWYzbS856g,858
81
- tests/unit/test_checkpoints_unit.py,sha256=WfFE6HvQHglBKfcJ3B0IYXdXpaNmcL2BDurRQmIbFAU,16008
81
+ tests/unit/test_checkpoints_unit.py,sha256=FbBM8Ffqy8JGTpWq2zWAWle2CI8A0MB_zABL_9Mezbk,15965
82
82
  tests/unit/test_connections_unit.py,sha256=LFAZzlrvL9oM8rZJTiC1oA9quw1KA2vMUCc3LV6SjXs,5507
83
- tests/unit/test_datasets_unit.py,sha256=Bw6bw2Dhe3BPi2KAM-2S3PKBJO9hMRdTWMECA2lfhJU,15879
83
+ tests/unit/test_datasets_unit.py,sha256=c3suBgQMtzJckHlY8MFwU38WundXobbjb-KXmUboulI,15910
84
84
  tests/unit/test_environments_unit.py,sha256=HS4NN_cRWGQNDfovCxNGrVRoZI4NcUgsXyzvapNi6Ms,1882
85
85
  tests/unit/test_exceptions.py,sha256=ASiwzV9z-6jk0Y2qSHEBmGOwKx-hXz5vaHcyApbjSKA,906
86
86
  tests/unit/test_gpu_types_unit.py,sha256=d2JCQcFgBpkHEBUhKeiyngioEs9cz2qMGM2MZdwg-1o,2054
87
87
  tests/unit/test_jobs_unit.py,sha256=kCrm2FdogqYgji0Coe9KGaODYEsXmvuV46FN2mUE1Ts,26835
88
- tests/unit/test_models_unit.py,sha256=wgwdvJLt6QZ_IKCvp6Kmt2Z4b_CvIN8KCuFqlBaxDe8,15064
89
- tests/unit/test_projects_unit.py,sha256=_SwPFhy2Xl6HRt6w5_HYrqtZJHAzFzoCZ3kqAS1Zn3c,9530
90
- tests/unit/test_proximl.py,sha256=E-er5V1O-4ZVfTO2R-2wGsKN80q0_BVG5ho9Ab9lnE4,1701
88
+ tests/unit/test_models_unit.py,sha256=e9tcTcojLLTPKgx1wdAwP3j1k6C2aBnCbdxBhwKiRoQ,15091
91
89
  tests/unit/test_proximl_unit.py,sha256=E-er5V1O-4ZVfTO2R-2wGsKN80q0_BVG5ho9Ab9lnE4,1701
92
- tests/unit/test_volumes_unit.py,sha256=YcyrGPCq7XfAtCdKdp44723o7mLGIu5_hKOdhAFVYV4,15305
90
+ tests/unit/test_volumes_unit.py,sha256=6FwEfANDZ2Z_ec3OL3Q12H_ml3TK9q2WgJW8hN-qwrc,15382
93
91
  tests/unit/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
94
92
  tests/unit/cli/conftest.py,sha256=w6p_2URicywJKUCtY79tSD_mx8cwJtxHbK_Lu3grOYs,236
95
93
  tests/unit/cli/test_cli_checkpoint_unit.py,sha256=Z4v80C2gqzRXdHons3_82lNC_VqL_YOt53HrUQnzReI,702
@@ -98,7 +96,6 @@ tests/unit/cli/test_cli_environment_unit.py,sha256=iiNj_fxiCinq9FZgkwzcO_OLu9O27
98
96
  tests/unit/cli/test_cli_gpu_unit.py,sha256=xdwIZEZJcJlWSuLBEcLhZXXH9EogZoKRiJlMRxaDa3o,650
99
97
  tests/unit/cli/test_cli_job_unit.py,sha256=UioSx_ZRY0qh4AJf90rIepputVUPBZ0KSqNR_u592UY,611
100
98
  tests/unit/cli/test_cli_model_unit.py,sha256=AucngxvYjW6GidDGBPHnKyYOb82ff7xMX5mVVUcbrCA,629
101
- tests/unit/cli/test_cli_project_unit.py,sha256=ms9gJ8pgMNGeIMdFcvBcwSPmb0i2qo9-rk9CCF53-9M,1756
102
99
  tests/unit/cli/test_cli_volume_unit.py,sha256=VeYb9PHuD45E23JCybF-C7ZaHsuERw7me2OUmYnmAAg,644
103
100
  tests/unit/cli/cloudbender/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
104
101
  tests/unit/cli/cloudbender/test_cli_datastore_unit.py,sha256=sUZWnzzCCG7NdgzEHsQ2zHpEb-ZD6FDIazca6FqMOc0,1381
@@ -106,18 +103,23 @@ tests/unit/cli/cloudbender/test_cli_device_unit.py,sha256=o1vrPlbaanYK1iJG5pE6tD
106
103
  tests/unit/cli/cloudbender/test_cli_node_unit.py,sha256=uh1Nt0ewk0v81iN5wCyBPzSXAhD8clW98HAORsCjqrg,1316
107
104
  tests/unit/cli/cloudbender/test_cli_provider_unit.py,sha256=jCnFnqZuLzuDx9u3kLyjT83nBDWKn7LDCz6ErzCce1g,781
108
105
  tests/unit/cli/cloudbender/test_cli_region_unit.py,sha256=mEAU0z_gKDM-e5J_V8igXmiU4qjrOfzJJRtKRNWdeBs,1262
109
- tests/unit/cli/cloudbender/test_cli_reservation_unit.py,sha256=Lcr-xeNVAtVLHllQnjyFOs9CI62iOseu2vVFGynnLks,1407
110
106
  tests/unit/cli/cloudbender/test_cli_service_unit.py,sha256=7gFaD-Ox22Gevvk6Sn8zGNp_k3jemwgDX3Yqx8yYN3I,1311
107
+ tests/unit/cli/projects/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
108
+ tests/unit/cli/projects/test_cli_project_data_connector_unit.py,sha256=RlqgHOUkFv3bmc19pUtGNVD0W1UWBJSDfaI_lzN0ZEA,993
109
+ tests/unit/cli/projects/test_cli_project_datastore_unit.py,sha256=6UMgFwqxBtH65VeWTzXzaXhVfCRoG3Tef6aflqcDlV4,936
110
+ tests/unit/cli/projects/test_cli_project_key_unit.py,sha256=Xb-O4cltVMNvHpSoPtIdfY4hmXUiMv-z5ixY49FKKyM,894
111
+ tests/unit/cli/projects/test_cli_project_secret_unit.py,sha256=tygmgNOOf7C1J5Flo-YRo1-QLI0He5Yc_4Wx50ssC4o,915
112
+ tests/unit/cli/projects/test_cli_project_service_unit.py,sha256=P-u_2-Gpbu0P_MjH6niAMDzj5M8oJYJ5adWcfU4LNpA,922
113
+ tests/unit/cli/projects/test_cli_project_unit.py,sha256=64tR6ae-dQHVEE86N8tDrxOQypvyk8gANXGg6SBEUUI,627
111
114
  tests/unit/cloudbender/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
112
115
  tests/unit/cloudbender/test_data_connectors_unit.py,sha256=ZCnI9Gr2RAcpHiPZ5t2kakjzJhhF5_S7XkBCPGyYd8k,5783
113
- tests/unit/cloudbender/test_datastores_unit.py,sha256=pZPLwfWl1ZDR1WYaRjDYflv5UfHhTxOvLzXJ-LdG_as,5398
116
+ tests/unit/cloudbender/test_datastores_unit.py,sha256=8PKa6XRdZ1MoVEwbRxA67qKeI6DrycpLU1RxWeokMnw,5281
114
117
  tests/unit/cloudbender/test_device_configs_unit.py,sha256=wBDnTfrP6yl0K_jWcNU2ADR6iHoe1sRzMpvNfs_dwXs,5714
115
118
  tests/unit/cloudbender/test_devices_unit.py,sha256=C2YTnfIpHlxdidgfbTnlzl72r5O7kqKStQUhWcTTXDg,9103
116
119
  tests/unit/cloudbender/test_nodes_unit.py,sha256=ehOHkNroiLKNTR09SbnBPpwELE72GcGT6le_YN5aVwQ,6231
117
120
  tests/unit/cloudbender/test_providers_unit.py,sha256=y63VCqHXb4Yu8sh0kW30-ojRvv9aUa5j1jNkmb46KTc,4373
118
121
  tests/unit/cloudbender/test_regions_unit.py,sha256=9bvP268gpNyygjh1IEpSSiUt2aP6okv7QOsV1XoaIS0,6299
119
- tests/unit/cloudbender/test_reservations_unit.py,sha256=ICuFT5sexnLvS7taoC18yQYuDZHpBRrNuCj3Uq_Arwo,5624
120
- tests/unit/cloudbender/test_services_unit.py,sha256=iYaQpyCXDg77GQEIhmgiVwKX83jyvIf-4-4oya5WA_o,5043
122
+ tests/unit/cloudbender/test_services_unit.py,sha256=V1JHfqNcLjz7d3qtVxPBCKzd5_lcL5iwhvWqQ0kw0J0,5220
121
123
  tests/unit/projects/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
122
124
  tests/unit/projects/test_project_data_connectors_unit.py,sha256=Yx2yCUgcuN_KfTKynZxse0Nx8jRrSlMygI7R8a-NjE4,3385
123
125
  tests/unit/projects/test_project_datastores_unit.py,sha256=WZMKkhpEg2dcevJqT7k6QRcYJF6FJfq177BDk2GWOBk,3129
@@ -125,9 +127,9 @@ tests/unit/projects/test_project_keys_unit.py,sha256=n5Y2rKaenHA6JQFlViE1_dZ00FZ
125
127
  tests/unit/projects/test_project_secrets_unit.py,sha256=VE9L91FJodcwVGizfF65WYMiHZaF0s2AdW1aiJ3z7xA,3276
126
128
  tests/unit/projects/test_project_services_unit.py,sha256=PzeNuJRuAG7RkrPWX0FfgFTt6-63FviecrDY06rLQ6A,3331
127
129
  tests/unit/projects/test_projects_unit.py,sha256=lTGdKOCN2bjzGORhaDVVlnzJBuEItUDGN36MsyQjDo4,3823
128
- proximl-0.5.9.dist-info/LICENSE,sha256=ADFxLEZDxKY0j4MdyUd5GNuhQ18rnWH5rOz1ZG7yiOA,1069
129
- proximl-0.5.9.dist-info/METADATA,sha256=Gaq8RcfBkBF3J70Pf7Q60Sf6Fm2Yv91phU46RIinlqA,7344
130
- proximl-0.5.9.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92
131
- proximl-0.5.9.dist-info/entry_points.txt,sha256=HmI311IIabkZReMCXu-nGbvIEW-KfaduAOyfiSqt5SY,63
132
- proximl-0.5.9.dist-info/top_level.txt,sha256=-TWqc9tAaxmWmW4c7uYsmzPEYUIoh6z02xxqPbv7Kys,23
133
- proximl-0.5.9.dist-info/RECORD,,
130
+ proximl-0.5.11.dist-info/LICENSE,sha256=ADFxLEZDxKY0j4MdyUd5GNuhQ18rnWH5rOz1ZG7yiOA,1069
131
+ proximl-0.5.11.dist-info/METADATA,sha256=mc59YfzmMo_-ejBfTKF9HZjOFKyDo2E3G0zV1uCE84M,7345
132
+ proximl-0.5.11.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92
133
+ proximl-0.5.11.dist-info/entry_points.txt,sha256=HmI311IIabkZReMCXu-nGbvIEW-KfaduAOyfiSqt5SY,63
134
+ proximl-0.5.11.dist-info/top_level.txt,sha256=-TWqc9tAaxmWmW4c7uYsmzPEYUIoh6z02xxqPbv7Kys,23
135
+ proximl-0.5.11.dist-info/RECORD,,
@@ -3,6 +3,8 @@ from pytest import fixture
3
3
 
4
4
  @fixture(scope="module")
5
5
  async def project(proximl):
6
- project = await proximl.projects.create(name="New Project", copy_keys=False)
6
+ project = await proximl.projects.create(
7
+ name="New Project", copy_keys=False, copy_secrets=False
8
+ )
7
9
  yield project
8
10
  await project.remove()
@@ -0,0 +1,44 @@
1
+ import re
2
+ import sys
3
+ import asyncio
4
+ from pytest import mark, fixture
5
+
6
+ pytestmark = [mark.sdk, mark.integration, mark.projects]
7
+
8
+
9
+ @mark.create
10
+ @mark.asyncio
11
+ class ProjectDataConnectorsTests:
12
+ @fixture(scope="class")
13
+ async def project_data_connector(self, project):
14
+ data_connectors = await project.data_connectors.list()
15
+ yield data_connectors[0]
16
+
17
+ async def test_list_project_data_connectors(self, project, project_data_connector):
18
+ data_connectors = await project.data_connectors.list()
19
+ assert len(data_connectors) > 0
20
+
21
+ async def test_project_data_connector_properties(
22
+ self, project, project_data_connector
23
+ ):
24
+ assert isinstance(project_data_connector.project_uuid, str)
25
+ assert isinstance(project_data_connector.type, str)
26
+ assert isinstance(project_data_connector.name, str)
27
+ assert isinstance(project_data_connector.region_uuid, str)
28
+ assert project.id == project_data_connector.project_uuid
29
+
30
+ async def test_project_data_connector_str(self, project_data_connector):
31
+ string = str(project_data_connector)
32
+ regex = r"^{.*\"name\": \"" + project_data_connector.name + r"\".*}$"
33
+ assert isinstance(string, str)
34
+ assert re.match(regex, string)
35
+
36
+ async def test_project_data_connector_repr(self, project_data_connector):
37
+ string = repr(project_data_connector)
38
+ regex = (
39
+ r"^ProjectDataConnector\( proximl , \*\*{.*'name': '"
40
+ + project_data_connector.name
41
+ + r"'.*}\)$"
42
+ )
43
+ assert isinstance(string, str)
44
+ assert re.match(regex, string)
@@ -0,0 +1,42 @@
1
+ import re
2
+ import sys
3
+ import asyncio
4
+ from pytest import mark, fixture
5
+
6
+ pytestmark = [mark.sdk, mark.integration, mark.projects]
7
+
8
+
9
+ @mark.create
10
+ @mark.asyncio
11
+ class ProjectDatastoresTests:
12
+ @fixture(scope="class")
13
+ async def project_datastore(self, project):
14
+ datastores = await project.datastores.list()
15
+ yield datastores[0]
16
+
17
+ async def test_list_project_datastores(self, project):
18
+ datastores = await project.datastores.list()
19
+ assert len(datastores) > 0
20
+
21
+ async def test_project_datastore_properties(self, project, project_datastore):
22
+ assert isinstance(project_datastore.project_uuid, str)
23
+ assert isinstance(project_datastore.type, str)
24
+ assert isinstance(project_datastore.name, str)
25
+ assert isinstance(project_datastore.region_uuid, str)
26
+ assert project.id == project_datastore.project_uuid
27
+
28
+ async def test_project_datastore_str(self, project_datastore):
29
+ string = str(project_datastore)
30
+ regex = r"^{.*\"name\": \"" + project_datastore.name + r"\".*}$"
31
+ assert isinstance(string, str)
32
+ assert re.match(regex, string)
33
+
34
+ async def test_project_datastore_repr(self, project_datastore):
35
+ string = repr(project_datastore)
36
+ regex = (
37
+ r"^ProjectDatastore\( proximl , \*\*{.*'name': '"
38
+ + project_datastore.name
39
+ + r"'.*}\)$"
40
+ )
41
+ assert isinstance(string, str)
42
+ assert re.match(regex, string)
@@ -0,0 +1,44 @@
1
+ import re
2
+ import sys
3
+ import asyncio
4
+ from pytest import mark, fixture
5
+
6
+ pytestmark = [mark.sdk, mark.integration, mark.projects]
7
+
8
+
9
+ @mark.create
10
+ @mark.asyncio
11
+ class ProjectServicesTests:
12
+ @fixture(scope="class")
13
+ async def project_service(self, project):
14
+ services = await project.services.list()
15
+ yield services[0]
16
+
17
+ async def test_list_project_services(self, project):
18
+ services = await project.services.list()
19
+ assert len(services) > 0
20
+
21
+ async def test_project_service_properties(self, project, project_service):
22
+ assert isinstance(project_service.project_uuid, str)
23
+ assert isinstance(project_service.name, str)
24
+ assert isinstance(project_service.id, str)
25
+ assert isinstance(project_service.hostname, str)
26
+ assert isinstance(project_service.region_uuid, str)
27
+ assert isinstance(project_service.public, bool)
28
+ assert project.id == project_service.project_uuid
29
+
30
+ async def test_project_service_str(self, project_service):
31
+ string = str(project_service)
32
+ regex = r"^{.*\"name\": \"" + project_service.name + r"\".*}$"
33
+ assert isinstance(string, str)
34
+ assert re.match(regex, string)
35
+
36
+ async def test_project_service_repr(self, project_service):
37
+ string = repr(project_service)
38
+ regex = (
39
+ r"^ProjectService\( proximl , \*\*{.*'name': '"
40
+ + project_service.name
41
+ + r"'.*}\)$"
42
+ )
43
+ assert isinstance(string, str)
44
+ assert re.match(regex, string)
@@ -16,7 +16,7 @@ class GetCheckpointTests:
16
16
  source_type="git",
17
17
  source_uri="git@github.com:proxiML/environment-tests.git",
18
18
  )
19
- checkpoint = await checkpoint.wait_for("ready", 120)
19
+ checkpoint = await checkpoint.wait_for("ready", 180)
20
20
  yield checkpoint
21
21
  await checkpoint.remove()
22
22
  checkpoint = await checkpoint.wait_for("archived", 60)
@@ -59,7 +59,6 @@ async def test_checkpoint_wasabi(proximl, capsys):
59
59
  name="CLI Automated Wasabi",
60
60
  source_type="wasabi",
61
61
  source_uri="s3://proximl-example/models/proximl-examples",
62
- capacity="10G",
63
62
  source_options=dict(endpoint_url="https://s3.wasabisys.com"),
64
63
  )
65
64
  checkpoint = await checkpoint.wait_for("ready", 300)
@@ -6,10 +6,19 @@ import asyncio
6
6
  import aiohttp
7
7
  from pytest import mark, fixture, raises
8
8
  from proximl.exceptions import ApiError
9
+ from urllib.parse import urlparse
9
10
 
10
11
  pytestmark = [mark.sdk, mark.integration, mark.jobs]
11
12
 
12
13
 
14
+ def extract_domain_suffix(hostname):
15
+ parts = hostname.split(".")
16
+ if len(parts) >= 2:
17
+ return ".".join(parts[-2:])
18
+ else:
19
+ return None
20
+
21
+
13
22
  @fixture(scope="class")
14
23
  async def job(proximl):
15
24
  job = await proximl.jobs.create(
@@ -34,6 +43,8 @@ class JobLifeCycleTests:
34
43
  assert job.status != "running"
35
44
  job = await job.wait_for("running")
36
45
  assert job.status == "running"
46
+ assert job.url
47
+ assert extract_domain_suffix(urlparse(job.url).hostname) == "proximl.cloud"
37
48
 
38
49
  async def test_stop_job(self, job):
39
50
  assert job.status == "running"
@@ -518,6 +529,7 @@ class JobIOTests:
518
529
  @mark.asyncio
519
530
  class JobTypeTests:
520
531
  async def test_endpoint(self, proximl):
532
+
521
533
  job = await proximl.jobs.create(
522
534
  "CLI Automated Tests - Endpoint",
523
535
  type="endpoint",
@@ -544,6 +556,7 @@ class JobTypeTests:
544
556
  await job.wait_for("running")
545
557
  await job.refresh()
546
558
  assert job.url
559
+ assert extract_domain_suffix(urlparse(job.url).hostname) == "proximl.cloud"
547
560
  tries = 0
548
561
  await asyncio.sleep(30)
549
562
  async with aiohttp.ClientSession() as session:
@@ -55,7 +55,6 @@ async def test_model_wasabi(proximl, capsys):
55
55
  name="CLI Automated Wasabi",
56
56
  source_type="wasabi",
57
57
  source_uri="s3://proximl-example/models/proximl-examples",
58
- capacity="10G",
59
58
  source_options=dict(endpoint_url="https://s3.wasabisys.com"),
60
59
  )
61
60
  model = await model.wait_for("ready", 300)
File without changes
@@ -0,0 +1,28 @@
1
+ import re
2
+ import json
3
+ import click
4
+ from unittest.mock import AsyncMock, patch, create_autospec
5
+ from pytest import mark, fixture, raises
6
+
7
+ pytestmark = [mark.cli, mark.unit, mark.projects]
8
+
9
+ from proximl.cli.project import data_connector as specimen
10
+ from proximl.projects import (
11
+ Project,
12
+ )
13
+
14
+
15
+ def test_list_data_connectors(runner, mock_project_data_connectors):
16
+ with patch("proximl.cli.ProxiML", new=AsyncMock) as mock_proximl:
17
+ project = create_autospec(Project)
18
+ mock_proximl.projects = AsyncMock()
19
+ mock_proximl.projects.get = AsyncMock(return_value=project)
20
+ mock_proximl.projects.get_current = AsyncMock(return_value=project)
21
+ project.data_connectors = AsyncMock()
22
+ project.data_connectors.list = AsyncMock(
23
+ return_value=mock_project_data_connectors
24
+ )
25
+ result = runner.invoke(specimen, ["list"])
26
+ print(result)
27
+ assert result.exit_code == 0
28
+ project.data_connectors.list.assert_called_once()
@@ -0,0 +1,26 @@
1
+ import re
2
+ import json
3
+ import click
4
+ from unittest.mock import AsyncMock, patch, create_autospec
5
+ from pytest import mark, fixture, raises
6
+
7
+ pytestmark = [mark.cli, mark.unit, mark.projects]
8
+
9
+ from proximl.cli.project import datastore as specimen
10
+ from proximl.projects import (
11
+ Project,
12
+ )
13
+
14
+
15
+ def test_list_datastores(runner, mock_project_datastores):
16
+ with patch("proximl.cli.ProxiML", new=AsyncMock) as mock_proximl:
17
+ project = create_autospec(Project)
18
+ mock_proximl.projects = AsyncMock()
19
+ mock_proximl.projects.get = AsyncMock(return_value=project)
20
+ mock_proximl.projects.get_current = AsyncMock(return_value=project)
21
+ project.datastores = AsyncMock()
22
+ project.datastores.list = AsyncMock(return_value=mock_project_datastores)
23
+ result = runner.invoke(specimen, ["list"])
24
+ print(result)
25
+ assert result.exit_code == 0
26
+ project.datastores.list.assert_called_once()
@@ -0,0 +1,26 @@
1
+ import re
2
+ import json
3
+ import click
4
+ from unittest.mock import AsyncMock, patch, create_autospec
5
+ from pytest import mark, fixture, raises
6
+
7
+ pytestmark = [mark.cli, mark.unit, mark.projects]
8
+
9
+ from proximl.cli.project import key as specimen
10
+ from proximl.projects import (
11
+ Project,
12
+ )
13
+
14
+
15
+ def test_list_keys(runner, mock_project_keys):
16
+ with patch("proximl.cli.ProxiML", new=AsyncMock) as mock_proximl:
17
+ project = create_autospec(Project)
18
+ mock_proximl.projects = AsyncMock()
19
+ mock_proximl.projects.get = AsyncMock(return_value=project)
20
+ mock_proximl.projects.get_current = AsyncMock(return_value=project)
21
+ project.keys = AsyncMock()
22
+ project.keys.list = AsyncMock(return_value=mock_project_keys)
23
+ result = runner.invoke(specimen, ["list"])
24
+ print(result)
25
+ assert result.exit_code == 0
26
+ project.keys.list.assert_called_once()
@@ -0,0 +1,26 @@
1
+ import re
2
+ import json
3
+ import click
4
+ from unittest.mock import AsyncMock, patch, create_autospec
5
+ from pytest import mark, fixture, raises
6
+
7
+ pytestmark = [mark.cli, mark.unit, mark.projects]
8
+
9
+ from proximl.cli.project import secret as specimen
10
+ from proximl.projects import (
11
+ Project,
12
+ )
13
+
14
+
15
+ def test_list_secrets(runner, mock_project_secrets):
16
+ with patch("proximl.cli.ProxiML", new=AsyncMock) as mock_proximl:
17
+ project = create_autospec(Project)
18
+ mock_proximl.projects = AsyncMock()
19
+ mock_proximl.projects.get = AsyncMock(return_value=project)
20
+ mock_proximl.projects.get_current = AsyncMock(return_value=project)
21
+ project.secrets = AsyncMock()
22
+ project.secrets.list = AsyncMock(return_value=mock_project_secrets)
23
+ result = runner.invoke(specimen, ["list"])
24
+ print(result)
25
+ assert result.exit_code == 0
26
+ project.secrets.list.assert_called_once()
@@ -0,0 +1,26 @@
1
+ import re
2
+ import json
3
+ import click
4
+ from unittest.mock import AsyncMock, patch, create_autospec
5
+ from pytest import mark, fixture, raises
6
+
7
+ pytestmark = [mark.cli, mark.unit, mark.projects]
8
+
9
+ from proximl.cli.project import service as specimen
10
+ from proximl.projects import (
11
+ Project,
12
+ )
13
+
14
+
15
+ def test_list_services(runner, mock_project_services):
16
+ with patch("proximl.cli.ProxiML", new=AsyncMock) as mock_proximl:
17
+ project = create_autospec(Project)
18
+ mock_proximl.projects = AsyncMock()
19
+ mock_proximl.projects.get = AsyncMock(return_value=project)
20
+ mock_proximl.projects.get_current = AsyncMock(return_value=project)
21
+ project.services = AsyncMock()
22
+ project.services.list = AsyncMock(return_value=mock_project_services)
23
+ result = runner.invoke(specimen, ["list"])
24
+ print(result)
25
+ assert result.exit_code == 0
26
+ project.services.list.assert_called_once()
@@ -0,0 +1,19 @@
1
+ import re
2
+ import json
3
+ import click
4
+ from unittest.mock import AsyncMock, patch, create_autospec
5
+ from pytest import mark, fixture, raises
6
+
7
+ pytestmark = [mark.cli, mark.unit, mark.projects]
8
+
9
+ from proximl.cli import project as specimen
10
+
11
+
12
+ def test_list(runner, mock_projects):
13
+ with patch("proximl.cli.ProxiML", new=AsyncMock) as mock_proximl:
14
+ mock_proximl.projects = AsyncMock()
15
+ mock_proximl.projects.list = AsyncMock(return_value=mock_projects)
16
+ result = runner.invoke(specimen, ["list"])
17
+ print(result)
18
+ assert result.exit_code == 0
19
+ mock_proximl.projects.list.assert_called_once()
@@ -119,8 +119,6 @@ class datastoreTests:
119
119
  assert isinstance(datastore.region_uuid, str)
120
120
  assert isinstance(datastore.type, str)
121
121
  assert isinstance(datastore.name, str)
122
- assert isinstance(datastore.uri, str)
123
- assert isinstance(datastore.root, str)
124
122
 
125
123
  def test_datastore_str(self, datastore):
126
124
  string = str(datastore)
@@ -131,9 +129,7 @@ class datastoreTests:
131
129
  def test_datastore_repr(self, datastore):
132
130
  string = repr(datastore)
133
131
  regex = (
134
- r"^Datastore\( proximl , \*\*{.*'store_id': '"
135
- + datastore.id
136
- + r"'.*}\)$"
132
+ r"^Datastore\( proximl , \*\*{.*'store_id': '" + datastore.id + r"'.*}\)$"
137
133
  )
138
134
  assert isinstance(string, str)
139
135
  assert re.match(regex, string)
@@ -28,6 +28,7 @@ def service(mock_proximl):
28
28
  region_uuid="a",
29
29
  service_id="x",
30
30
  name="On-Prem Service",
31
+ type="https",
31
32
  public=False,
32
33
  hostname="app1.proximl.cloud",
33
34
  )
@@ -79,10 +80,12 @@ class RegionsTests:
79
80
  provider_uuid="provider-id-1",
80
81
  region_uuid="region-id-1",
81
82
  name="On-Prem Service",
83
+ type="https",
82
84
  public=False,
83
85
  )
84
86
  expected_payload = dict(
85
87
  name="On-Prem Service",
88
+ type="https",
86
89
  public=False,
87
90
  )
88
91
  api_response = {
@@ -90,6 +93,7 @@ class RegionsTests:
90
93
  "region_uuid": "region-id-1",
91
94
  "service_id": "service-id-1",
92
95
  "name": "On-Prem Service",
96
+ "type": "https",
93
97
  "public": False,
94
98
  "hostname": "app1.proximl.cloud",
95
99
  "createdAt": "2020-12-31T23:59:59.000Z",
@@ -114,6 +118,7 @@ class serviceTests:
114
118
  assert isinstance(service.public, bool)
115
119
  assert isinstance(service.name, str)
116
120
  assert isinstance(service.hostname, str)
121
+ assert isinstance(service.type, str)
117
122
 
118
123
  def test_service_str(self, service):
119
124
  string = str(service)
@@ -148,6 +153,7 @@ class serviceTests:
148
153
  "region_uuid": "region-id-1",
149
154
  "service_id": "service-id-1",
150
155
  "name": "On-Prem Service",
156
+ "type": "https",
151
157
  "public": False,
152
158
  "hostname": "app1.proximl.cloud",
153
159
  "createdAt": "2020-12-31T23:59:59.000Z",