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.
- proximl/__init__.py +1 -1
- proximl/checkpoints.py +46 -28
- proximl/cli/cloudbender/__init__.py +2 -1
- proximl/cli/cloudbender/datastore.py +2 -7
- proximl/cli/cloudbender/service.py +19 -2
- proximl/cli/project/__init__.py +3 -72
- proximl/cli/project/data_connector.py +61 -0
- proximl/cli/project/datastore.py +61 -0
- proximl/cli/project/service.py +61 -0
- proximl/cloudbender/cloudbender.py +4 -2
- proximl/cloudbender/data_connectors.py +8 -0
- proximl/cloudbender/datastores.py +9 -19
- proximl/cloudbender/nodes.py +44 -1
- proximl/cloudbender/providers.py +53 -0
- proximl/cloudbender/regions.py +48 -0
- proximl/cloudbender/services.py +65 -1
- proximl/datasets.py +41 -12
- proximl/exceptions.py +51 -0
- proximl/jobs.py +15 -19
- proximl/models.py +41 -22
- proximl/volumes.py +24 -5
- {proximl-0.5.9.dist-info → proximl-0.5.11.dist-info}/METADATA +1 -1
- {proximl-0.5.9.dist-info → proximl-0.5.11.dist-info}/RECORD +48 -46
- tests/integration/projects/conftest.py +3 -1
- tests/integration/projects/test_projects_data_connectors_integration.py +44 -0
- tests/integration/projects/test_projects_datastores_integration.py +42 -0
- tests/integration/projects/test_projects_services_integration.py +44 -0
- tests/integration/test_checkpoints_integration.py +1 -2
- tests/integration/test_jobs_integration.py +13 -0
- tests/integration/test_models_integration.py +0 -1
- tests/unit/cli/projects/__init__.py +0 -0
- tests/unit/cli/projects/test_cli_project_data_connector_unit.py +28 -0
- tests/unit/cli/projects/test_cli_project_datastore_unit.py +26 -0
- tests/unit/cli/projects/test_cli_project_key_unit.py +26 -0
- tests/unit/cli/projects/test_cli_project_secret_unit.py +26 -0
- tests/unit/cli/projects/test_cli_project_service_unit.py +26 -0
- tests/unit/cli/projects/test_cli_project_unit.py +19 -0
- tests/unit/cloudbender/test_datastores_unit.py +1 -5
- tests/unit/cloudbender/test_services_unit.py +6 -0
- tests/unit/conftest.py +158 -15
- tests/unit/test_checkpoints_unit.py +15 -23
- tests/unit/test_datasets_unit.py +15 -20
- tests/unit/test_models_unit.py +13 -16
- tests/unit/test_volumes_unit.py +3 -0
- proximl/cli/cloudbender/reservation.py +0 -159
- proximl/cli/project.py +0 -154
- proximl/cloudbender/reservations.py +0 -126
- proximl/projects.py +0 -187
- tests/integration/test_projects_integration.py +0 -44
- tests/unit/cli/cloudbender/test_cli_reservation_unit.py +0 -38
- tests/unit/cli/test_cli_project_unit.py +0 -46
- tests/unit/cloudbender/test_reservations_unit.py +0 -173
- tests/unit/test_auth.py +0 -30
- tests/unit/test_projects_unit.py +0 -294
- tests/unit/test_proximl.py +0 -54
- {proximl-0.5.9.dist-info → proximl-0.5.11.dist-info}/LICENSE +0 -0
- {proximl-0.5.9.dist-info → proximl-0.5.11.dist-info}/WHEEL +0 -0
- {proximl-0.5.9.dist-info → proximl-0.5.11.dist-info}/entry_points.txt +0 -0
- {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=
|
|
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=
|
|
8
|
+
proximl/checkpoints.py,sha256=Ezpiab9Wfcmd2h5Slm9U5lekZGXiPzvhDKxXXgla1yo,8790
|
|
9
9
|
proximl/connections.py,sha256=0C8VJSkDturQVlzg_3yAkQz8W9NAmgzDCBRK_SrzeUI,20035
|
|
10
|
-
proximl/datasets.py,sha256=
|
|
10
|
+
proximl/datasets.py,sha256=dBDzf7DZ1rS5LmJPy5oV-JC0PXGTf-NZuBDG1KPyoA4,8600
|
|
11
11
|
proximl/environments.py,sha256=L_cRmau1wJxpGvnJAqgms-GiNdDhiuOntrlBqsdoE3A,1507
|
|
12
|
-
proximl/exceptions.py,sha256=
|
|
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=
|
|
15
|
-
proximl/models.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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/
|
|
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=
|
|
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=
|
|
44
|
-
proximl/cloudbender/data_connectors.py,sha256=
|
|
45
|
-
proximl/cloudbender/datastores.py,sha256=
|
|
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=
|
|
49
|
-
proximl/cloudbender/providers.py,sha256=
|
|
50
|
-
proximl/cloudbender/regions.py,sha256=
|
|
51
|
-
proximl/cloudbender/
|
|
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=
|
|
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=
|
|
67
|
-
tests/integration/test_models_integration.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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/
|
|
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.
|
|
129
|
-
proximl-0.5.
|
|
130
|
-
proximl-0.5.
|
|
131
|
-
proximl-0.5.
|
|
132
|
-
proximl-0.5.
|
|
133
|
-
proximl-0.5.
|
|
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(
|
|
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",
|
|
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",
|