polyaxon 2.2.0rc0__py3-none-any.whl → 2.3.0rc0__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.
- polyaxon/_cli/artifacts.py +16 -12
- polyaxon/_cli/components.py +16 -12
- polyaxon/_cli/config.py +31 -0
- polyaxon/_cli/dashboard.py +15 -2
- polyaxon/_cli/init.py +1 -1
- polyaxon/_cli/models.py +16 -12
- polyaxon/_cli/operations.py +53 -32
- polyaxon/_cli/project_versions.py +26 -5
- polyaxon/_cli/projects.py +23 -9
- polyaxon/_cli/run.py +29 -9
- polyaxon/_client/mixin.py +39 -0
- polyaxon/_client/project.py +22 -22
- polyaxon/_client/run.py +44 -25
- polyaxon/_compiler/contexts/ray_job.py +4 -2
- polyaxon/_env_vars/getters/owner_entity.py +4 -2
- polyaxon/_env_vars/getters/project.py +4 -2
- polyaxon/_env_vars/getters/run.py +2 -2
- polyaxon/_k8s/converter/base/base.py +2 -1
- polyaxon/_k8s/converter/common/accelerators.py +3 -0
- polyaxon/_k8s/converter/converters/ray_job.py +4 -2
- polyaxon/_k8s/custom_resources/dask_job.py +3 -0
- polyaxon/_k8s/custom_resources/kubeflow/common.py +3 -0
- polyaxon/_k8s/custom_resources/ray_job.py +3 -0
- polyaxon/_k8s/custom_resources/setter.py +1 -1
- polyaxon/_pql/manager.py +1 -1
- polyaxon/_sdk/api/runs_v1_api.py +30 -30
- polyaxon/_sdk/schemas/v1_settings_catalog.py +1 -0
- polyaxon/_sdk/schemas/v1_team.py +1 -0
- polyaxon/_sdk/schemas/v1_user.py +1 -2
- polyaxon/_utils/fqn_utils.py +25 -2
- polyaxon/pkg.py +1 -1
- {polyaxon-2.2.0rc0.dist-info → polyaxon-2.3.0rc0.dist-info}/METADATA +8 -8
- {polyaxon-2.2.0rc0.dist-info → polyaxon-2.3.0rc0.dist-info}/RECORD +37 -36
- {polyaxon-2.2.0rc0.dist-info → polyaxon-2.3.0rc0.dist-info}/LICENSE +0 -0
- {polyaxon-2.2.0rc0.dist-info → polyaxon-2.3.0rc0.dist-info}/WHEEL +0 -0
- {polyaxon-2.2.0rc0.dist-info → polyaxon-2.3.0rc0.dist-info}/entry_points.txt +0 -0
- {polyaxon-2.2.0rc0.dist-info → polyaxon-2.3.0rc0.dist-info}/top_level.txt +0 -0
polyaxon/_client/project.py
CHANGED
@@ -12,6 +12,7 @@ from clipped.utils.validation import validate_tags
|
|
12
12
|
|
13
13
|
from polyaxon._client.client import PolyaxonClient
|
14
14
|
from polyaxon._client.decorators import client_handler, get_global_or_inline_config
|
15
|
+
from polyaxon._client.mixin import ClientMixin
|
15
16
|
from polyaxon._constants.globals import DEFAULT
|
16
17
|
from polyaxon._contexts import paths as ctx_paths
|
17
18
|
from polyaxon._env_vars.getters.user import get_local_owner
|
@@ -21,13 +22,17 @@ from polyaxon._sdk.schemas.v1_list_project_versions_response import (
|
|
21
22
|
)
|
22
23
|
from polyaxon._sdk.schemas.v1_project import V1Project
|
23
24
|
from polyaxon._sdk.schemas.v1_project_version import V1ProjectVersion
|
24
|
-
from polyaxon._utils.fqn_utils import
|
25
|
+
from polyaxon._utils.fqn_utils import (
|
26
|
+
get_entity_full_name,
|
27
|
+
get_entity_info,
|
28
|
+
split_owner_team_space,
|
29
|
+
)
|
25
30
|
from polyaxon.exceptions import ApiException, PolyaxonClientException
|
26
31
|
from polyaxon.logger import logger
|
27
32
|
from traceml.artifacts import V1RunArtifact
|
28
33
|
|
29
34
|
|
30
|
-
class ProjectClient:
|
35
|
+
class ProjectClient(ClientMixin):
|
31
36
|
"""ProjectClient is a client to communicate with Polyaxon projects endpoints.
|
32
37
|
|
33
38
|
If no values are passed to this class,
|
@@ -94,26 +99,13 @@ class ProjectClient:
|
|
94
99
|
if not owner:
|
95
100
|
raise PolyaxonClientException("Please provide a valid owner.")
|
96
101
|
|
102
|
+
owner, team = split_owner_team_space(owner)
|
97
103
|
self._client = client
|
98
104
|
self._owner = owner or DEFAULT
|
105
|
+
self._team = team
|
99
106
|
self._project = project
|
100
107
|
self._project_data = V1Project.construct()
|
101
108
|
|
102
|
-
@property
|
103
|
-
def client(self):
|
104
|
-
if self._client:
|
105
|
-
return self._client
|
106
|
-
self._client = PolyaxonClient()
|
107
|
-
return self._client
|
108
|
-
|
109
|
-
@property
|
110
|
-
def owner(self):
|
111
|
-
return self._owner
|
112
|
-
|
113
|
-
@property
|
114
|
-
def project(self):
|
115
|
-
return self._project
|
116
|
-
|
117
109
|
@property
|
118
110
|
def project_data(self):
|
119
111
|
return self._project_data
|
@@ -139,11 +131,19 @@ class ProjectClient:
|
|
139
131
|
Returns:
|
140
132
|
V1Project, project instance from the response.
|
141
133
|
"""
|
142
|
-
|
143
|
-
self.
|
144
|
-
|
145
|
-
|
146
|
-
|
134
|
+
if self.team:
|
135
|
+
self._project_data = self.client.projects_v1.create_team_project(
|
136
|
+
self.owner,
|
137
|
+
self.team,
|
138
|
+
data,
|
139
|
+
async_req=False,
|
140
|
+
)
|
141
|
+
else:
|
142
|
+
self._project_data = self.client.projects_v1.create_project(
|
143
|
+
self.owner,
|
144
|
+
data,
|
145
|
+
async_req=False,
|
146
|
+
)
|
147
147
|
self._project_data.owner = self.owner
|
148
148
|
self._project = self._project_data.name
|
149
149
|
return self._project_data
|
polyaxon/_client/run.py
CHANGED
@@ -35,6 +35,7 @@ from polyaxon import settings
|
|
35
35
|
from polyaxon._cli.errors import handle_cli_error
|
36
36
|
from polyaxon._client.client import PolyaxonClient
|
37
37
|
from polyaxon._client.decorators import client_handler, get_global_or_inline_config
|
38
|
+
from polyaxon._client.mixin import ClientMixin
|
38
39
|
from polyaxon._client.store import PolyaxonStore
|
39
40
|
from polyaxon._constants.metadata import META_COPY_ARTIFACTS, META_RECOMPILE
|
40
41
|
from polyaxon._containers.names import MAIN_CONTAINER_NAMES
|
@@ -63,7 +64,11 @@ from polyaxon._sdk.schemas.v1_operation_body import V1OperationBody
|
|
63
64
|
from polyaxon._sdk.schemas.v1_project_version import V1ProjectVersion
|
64
65
|
from polyaxon._sdk.schemas.v1_run import V1Run
|
65
66
|
from polyaxon._sdk.schemas.v1_run_settings import V1RunSettings
|
66
|
-
from polyaxon._utils.fqn_utils import
|
67
|
+
from polyaxon._utils.fqn_utils import (
|
68
|
+
get_entity_full_name,
|
69
|
+
split_owner_team_space,
|
70
|
+
to_fqn_name,
|
71
|
+
)
|
67
72
|
from polyaxon._utils.urls_utils import get_proxy_run_url
|
68
73
|
from polyaxon.api import K8S_V1_LOCATION, STREAMS_V1_LOCATION
|
69
74
|
from polyaxon.exceptions import ApiException, PolyaxonClientException
|
@@ -80,7 +85,7 @@ if TYPE_CHECKING:
|
|
80
85
|
from traceml.tracking.run import Run
|
81
86
|
|
82
87
|
|
83
|
-
class RunClient:
|
88
|
+
class RunClient(ClientMixin):
|
84
89
|
"""RunClient is a client to communicate with Polyaxon runs endpoints.
|
85
90
|
|
86
91
|
If no values are passed to this class,
|
@@ -146,7 +151,7 @@ class RunClient:
|
|
146
151
|
return
|
147
152
|
|
148
153
|
try:
|
149
|
-
owner, project = get_project_or_local(
|
154
|
+
owner, _, project = get_project_or_local(
|
150
155
|
get_entity_full_name(owner=owner, entity=project)
|
151
156
|
)
|
152
157
|
except PolyaxonClientException:
|
@@ -166,8 +171,10 @@ class RunClient:
|
|
166
171
|
if error_message and not self._is_offline:
|
167
172
|
raise PolyaxonClientException(error_message)
|
168
173
|
|
174
|
+
owner, team = split_owner_team_space(owner)
|
169
175
|
self._client = client
|
170
176
|
self._owner = owner
|
177
|
+
self._team = team
|
171
178
|
self._project = project
|
172
179
|
self._run_uuid = (
|
173
180
|
get_run_or_local(run_uuid)
|
@@ -218,12 +225,11 @@ class RunClient:
|
|
218
225
|
return client.config.no_op
|
219
226
|
return settings.CLIENT_CONFIG.no_op
|
220
227
|
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
return self._client
|
228
|
+
def _use_agent_host(self):
|
229
|
+
if self.settings.agent and self.settings.agent.url:
|
230
|
+
self.reset_client(
|
231
|
+
host=self.settings.agent.url, POLYAXON_HOST=self.settings.agent.url
|
232
|
+
)
|
227
233
|
|
228
234
|
@property
|
229
235
|
def store(self):
|
@@ -256,20 +262,6 @@ class RunClient:
|
|
256
262
|
return self.settings.artifacts_store.name
|
257
263
|
return None
|
258
264
|
|
259
|
-
@property
|
260
|
-
def owner(self) -> str:
|
261
|
-
return self._owner or ""
|
262
|
-
|
263
|
-
def set_owner(self, owner: str):
|
264
|
-
self._owner = owner
|
265
|
-
|
266
|
-
@property
|
267
|
-
def project(self) -> str:
|
268
|
-
return self._project or ""
|
269
|
-
|
270
|
-
def set_project(self, project: str):
|
271
|
-
self._project = project
|
272
|
-
|
273
265
|
@property
|
274
266
|
def run_uuid(self) -> str:
|
275
267
|
return self._run_uuid
|
@@ -898,6 +890,7 @@ class RunClient:
|
|
898
890
|
"""
|
899
891
|
if not self.settings:
|
900
892
|
self.refresh_data()
|
893
|
+
self._use_agent_host()
|
901
894
|
params = get_logs_params(
|
902
895
|
last_file=last_file, last_time=last_time, connection=self.artifacts_store
|
903
896
|
)
|
@@ -921,6 +914,7 @@ class RunClient:
|
|
921
914
|
def inspect(self):
|
922
915
|
if not self.settings:
|
923
916
|
self.refresh_data()
|
917
|
+
self._use_agent_host()
|
924
918
|
params = get_streams_params(connection=self.artifacts_store, status=self.status)
|
925
919
|
return self.client.runs_v1.inspect_run(
|
926
920
|
self.namespace, self.owner, self.project, self.run_uuid, **params
|
@@ -994,6 +988,10 @@ class RunClient:
|
|
994
988
|
if not container:
|
995
989
|
container = pod_containers[0]
|
996
990
|
|
991
|
+
if not self.settings:
|
992
|
+
self.refresh_data()
|
993
|
+
self._use_agent_host()
|
994
|
+
|
997
995
|
url = get_proxy_run_url(
|
998
996
|
service=K8S_V1_LOCATION,
|
999
997
|
namespace=self.namespace,
|
@@ -1039,6 +1037,8 @@ class RunClient:
|
|
1039
1037
|
"""
|
1040
1038
|
if not self.settings:
|
1041
1039
|
self.refresh_data()
|
1040
|
+
self._use_agent_host()
|
1041
|
+
|
1042
1042
|
params = get_streams_params(self.artifacts_store)
|
1043
1043
|
return self.client.runs_v1.get_run_events(
|
1044
1044
|
self.namespace,
|
@@ -1074,6 +1074,8 @@ class RunClient:
|
|
1074
1074
|
"""
|
1075
1075
|
if not self.settings:
|
1076
1076
|
self.refresh_data()
|
1077
|
+
self._use_agent_host()
|
1078
|
+
|
1077
1079
|
params = get_streams_params(self.artifacts_store)
|
1078
1080
|
return self.client.runs_v1.get_multi_run_events(
|
1079
1081
|
self.namespace,
|
@@ -1310,6 +1312,7 @@ class RunClient:
|
|
1310
1312
|
"""
|
1311
1313
|
if not self.settings:
|
1312
1314
|
self.refresh_data()
|
1315
|
+
self._use_agent_host()
|
1313
1316
|
params = get_streams_params(self.artifacts_store)
|
1314
1317
|
return self.client.runs_v1.get_run_artifact(
|
1315
1318
|
namespace=self.namespace,
|
@@ -1343,6 +1346,10 @@ class RunClient:
|
|
1343
1346
|
if not self.run_uuid:
|
1344
1347
|
return
|
1345
1348
|
|
1349
|
+
if not self.settings:
|
1350
|
+
self.refresh_data()
|
1351
|
+
self._use_agent_host()
|
1352
|
+
|
1346
1353
|
lineage_path = lineage.path or ""
|
1347
1354
|
summary = lineage.summary or {}
|
1348
1355
|
is_event = summary.get("is_event")
|
@@ -1421,6 +1428,8 @@ class RunClient:
|
|
1421
1428
|
"""
|
1422
1429
|
if not self.settings:
|
1423
1430
|
self.refresh_data()
|
1431
|
+
self._use_agent_host()
|
1432
|
+
|
1424
1433
|
url = get_proxy_run_url(
|
1425
1434
|
service=STREAMS_V1_LOCATION,
|
1426
1435
|
namespace=self.namespace,
|
@@ -1460,6 +1469,8 @@ class RunClient:
|
|
1460
1469
|
"""
|
1461
1470
|
if not self.settings:
|
1462
1471
|
self.refresh_data()
|
1472
|
+
self._use_agent_host()
|
1473
|
+
|
1463
1474
|
url = get_proxy_run_url(
|
1464
1475
|
service=STREAMS_V1_LOCATION,
|
1465
1476
|
namespace=self.namespace,
|
@@ -1507,6 +1518,7 @@ class RunClient:
|
|
1507
1518
|
"""
|
1508
1519
|
if not self.settings:
|
1509
1520
|
self.refresh_data()
|
1521
|
+
self._use_agent_host()
|
1510
1522
|
|
1511
1523
|
params = get_streams_params(connection=self.artifacts_store)
|
1512
1524
|
url = get_proxy_run_url(
|
@@ -1596,6 +1608,7 @@ class RunClient:
|
|
1596
1608
|
|
1597
1609
|
if not self.settings:
|
1598
1610
|
self.refresh_data()
|
1611
|
+
self._use_agent_host()
|
1599
1612
|
|
1600
1613
|
params = get_streams_params(connection=self.artifacts_store)
|
1601
1614
|
url = get_proxy_run_url(
|
@@ -1626,6 +1639,8 @@ class RunClient:
|
|
1626
1639
|
"""
|
1627
1640
|
if not self.settings:
|
1628
1641
|
self.refresh_data()
|
1642
|
+
self._use_agent_host()
|
1643
|
+
|
1629
1644
|
params = get_streams_params(connection=self.artifacts_store)
|
1630
1645
|
self.client.runs_v1.delete_run_artifact(
|
1631
1646
|
namespace=self.namespace,
|
@@ -1645,6 +1660,8 @@ class RunClient:
|
|
1645
1660
|
"""
|
1646
1661
|
if not self.settings:
|
1647
1662
|
self.refresh_data()
|
1663
|
+
self._use_agent_host()
|
1664
|
+
|
1648
1665
|
params = get_streams_params(connection=self.artifacts_store)
|
1649
1666
|
return self.client.runs_v1.delete_run_artifacts(
|
1650
1667
|
namespace=self.namespace,
|
@@ -1667,6 +1684,8 @@ class RunClient:
|
|
1667
1684
|
"""
|
1668
1685
|
if not self.settings:
|
1669
1686
|
self.refresh_data()
|
1687
|
+
self._use_agent_host()
|
1688
|
+
|
1670
1689
|
params = get_streams_params(connection=self.artifacts_store)
|
1671
1690
|
return self.client.runs_v1.get_run_artifacts_tree(
|
1672
1691
|
namespace=self.namespace,
|
@@ -2117,9 +2136,9 @@ class RunClient:
|
|
2117
2136
|
abspath = filepath if is_abs() else os.path.abspath(filepath)
|
2118
2137
|
|
2119
2138
|
for_patterns = []
|
2120
|
-
if getattr(self, "_artifacts_path"):
|
2139
|
+
if getattr(self, "_artifacts_path", None):
|
2121
2140
|
for_patterns.append(getattr(self, "_artifacts_path"))
|
2122
|
-
if getattr(self, "_store_path"):
|
2141
|
+
if getattr(self, "_store_path", None):
|
2123
2142
|
for_patterns.append(getattr(self, "_store_path"))
|
2124
2143
|
context_root = (
|
2125
2144
|
ctx_paths.CONTEXT_OFFLINE_ROOT
|
@@ -33,7 +33,9 @@ class RayJobContextsManager(BaseContextsManager):
|
|
33
33
|
connection_by_names=connection_by_names,
|
34
34
|
)
|
35
35
|
|
36
|
-
|
36
|
+
data = {
|
37
37
|
"head": _get_replica(job.head),
|
38
|
-
"workers": {wn: _get_replica(job.workers[wn]) for wn in job.workers},
|
39
38
|
}
|
39
|
+
if job.workers:
|
40
|
+
data["workers"] = {wn: _get_replica(job.workers[wn]) for wn in job.workers}
|
41
|
+
return data
|
@@ -5,7 +5,7 @@ from clipped.utils.strings import validate_slug
|
|
5
5
|
|
6
6
|
from polyaxon._constants.globals import DEFAULT
|
7
7
|
from polyaxon._env_vars.getters.user import get_local_owner
|
8
|
-
from polyaxon._utils.fqn_utils import get_entity_info
|
8
|
+
from polyaxon._utils.fqn_utils import get_entity_info, split_owner_team_space
|
9
9
|
from polyaxon.exceptions import PolyaxonClientException, PolyaxonSchemaError
|
10
10
|
|
11
11
|
|
@@ -31,6 +31,8 @@ def resolve_entity_info(entity: str, entity_name: str, is_cli: bool = False):
|
|
31
31
|
if not owner:
|
32
32
|
owner = settings.AUTH_CONFIG.username if settings.AUTH_CONFIG else None
|
33
33
|
|
34
|
+
owner, team = split_owner_team_space(owner)
|
35
|
+
|
34
36
|
if not all([owner, entity_value]):
|
35
37
|
message = "Please provide a valid {}.".format(entity_name)
|
36
38
|
if is_cli:
|
@@ -49,4 +51,4 @@ def resolve_entity_info(entity: str, entity_name: str, is_cli: bool = False):
|
|
49
51
|
entity_name, entity_value
|
50
52
|
)
|
51
53
|
)
|
52
|
-
return owner, entity_value
|
54
|
+
return owner, team, entity_value
|
@@ -7,7 +7,7 @@ from polyaxon._constants.globals import DEFAULT
|
|
7
7
|
from polyaxon._env_vars.getters.user import get_local_owner
|
8
8
|
from polyaxon._managers.project import ProjectConfigManager
|
9
9
|
from polyaxon._utils.cache import get_local_project
|
10
|
-
from polyaxon._utils.fqn_utils import get_entity_info
|
10
|
+
from polyaxon._utils.fqn_utils import get_entity_info, split_owner_team_space
|
11
11
|
from polyaxon.exceptions import PolyaxonClientException, PolyaxonSchemaError
|
12
12
|
|
13
13
|
|
@@ -52,6 +52,8 @@ def get_project_or_local(project=None, is_cli: bool = False):
|
|
52
52
|
if not owner and (not settings.CLI_CONFIG or settings.CLI_CONFIG.is_community):
|
53
53
|
owner = DEFAULT
|
54
54
|
|
55
|
+
owner, team = split_owner_team_space(owner)
|
56
|
+
|
55
57
|
if not all([owner, project_name]):
|
56
58
|
error_message = get_project_error_message(owner, project_name)
|
57
59
|
if is_cli:
|
@@ -79,4 +81,4 @@ def get_project_or_local(project=None, is_cli: bool = False):
|
|
79
81
|
sys.exit(1)
|
80
82
|
else:
|
81
83
|
raise PolyaxonSchemaError(error_message)
|
82
|
-
return owner, project_name
|
84
|
+
return owner, team, project_name
|
@@ -37,9 +37,9 @@ def get_run_or_local(run_uuid=None, is_cli: bool = False):
|
|
37
37
|
|
38
38
|
|
39
39
|
def get_project_run_or_local(project=None, run_uuid=None, is_cli: bool = True):
|
40
|
-
|
40
|
+
owner, team, project_name = get_project_or_local(project, is_cli=is_cli)
|
41
41
|
run_uuid = get_run_or_local(run_uuid, is_cli=is_cli)
|
42
|
-
return
|
42
|
+
return owner, team, project_name, run_uuid
|
43
43
|
|
44
44
|
|
45
45
|
def get_collect_artifacts(arg: Optional[bool] = None, default: Optional[bool] = None):
|
@@ -2,6 +2,7 @@ import copy
|
|
2
2
|
|
3
3
|
from typing import Dict, Iterable, List, Optional
|
4
4
|
|
5
|
+
from clipped.utils.enums import get_enum_value
|
5
6
|
from clipped.utils.sanitizers import sanitize_string_dict
|
6
7
|
from clipped.utils.strings import slugify
|
7
8
|
|
@@ -85,7 +86,7 @@ class BaseConverter(
|
|
85
86
|
"operation.polyaxon.com/name": self.run_name,
|
86
87
|
"operation.polyaxon.com/owner": self.owner_name,
|
87
88
|
"operation.polyaxon.com/project": self.project_name,
|
88
|
-
"operation.polyaxon.com/kind": self.K8S_ANNOTATIONS_KIND,
|
89
|
+
"operation.polyaxon.com/kind": get_enum_value(self.K8S_ANNOTATIONS_KIND),
|
89
90
|
}
|
90
91
|
|
91
92
|
def get_annotations(
|
@@ -37,6 +37,9 @@ def requests_gpu(resources: k8s_schemas.V1ResourceRequirements) -> bool:
|
|
37
37
|
if not resources:
|
38
38
|
return False
|
39
39
|
|
40
|
+
if not isinstance(resources, k8s_schemas.V1ResourceRequirements):
|
41
|
+
resources = k8s_schemas.V1ResourceRequirements(**resources)
|
42
|
+
|
40
43
|
if resources.requests:
|
41
44
|
for key, val in resources.requests.items():
|
42
45
|
if "gpu" in key and val is not None and val > 0:
|
@@ -58,7 +58,9 @@ class RayJobConverter(RayJobMixin, BaseConverter):
|
|
58
58
|
config=compiled_operation.plugins, auth=default_auth
|
59
59
|
)
|
60
60
|
head = _get_replica(job.head)
|
61
|
-
workers =
|
61
|
+
workers = None
|
62
|
+
if job.workers:
|
63
|
+
workers = {n: _get_replica(w) for n, w in job.workers.items()}
|
62
64
|
labels = self.get_labels(version=pkg.VERSION, labels={})
|
63
65
|
|
64
66
|
return get_ray_job_custom_resource(
|
@@ -68,7 +70,7 @@ class RayJobConverter(RayJobMixin, BaseConverter):
|
|
68
70
|
workers=workers,
|
69
71
|
entrypoint=job.entrypoint,
|
70
72
|
metadata=job.metadata,
|
71
|
-
runtime_env=
|
73
|
+
runtime_env=orjson_dumps(job.runtime_env),
|
72
74
|
ray_version=job.ray_version,
|
73
75
|
termination=compiled_operation.termination,
|
74
76
|
collect_logs=plugins.collect_logs,
|
@@ -46,6 +46,9 @@ def get_dask_replicas_template(
|
|
46
46
|
if liveness_probe and replica.main_container.liveness_probe is None:
|
47
47
|
replica.main_container.liveness_probe = liveness_probe
|
48
48
|
|
49
|
+
labels = {**labels, **replica.labels}
|
50
|
+
annotations = {**annotations, **replica.annotations}
|
51
|
+
|
49
52
|
metadata, pod_spec = get_pod_spec(
|
50
53
|
namespace=namespace,
|
51
54
|
main_container=replica.main_container,
|
@@ -16,6 +16,9 @@ def get_kf_replicas_template(
|
|
16
16
|
if not replica:
|
17
17
|
return
|
18
18
|
|
19
|
+
labels = {**labels, **replica.labels}
|
20
|
+
annotations = {**annotations, **replica.annotations}
|
21
|
+
|
19
22
|
metadata, pod_spec = get_pod_spec(
|
20
23
|
namespace=namespace,
|
21
24
|
main_container=replica.main_container,
|
@@ -26,6 +26,9 @@ def _get_ray_replicas_template(
|
|
26
26
|
if not replica:
|
27
27
|
return
|
28
28
|
|
29
|
+
labels = {**labels, **replica.labels}
|
30
|
+
annotations = {**annotations, **replica.annotations}
|
31
|
+
|
29
32
|
metadata, pod_spec = get_pod_spec(
|
30
33
|
namespace=namespace,
|
31
34
|
main_container=replica.main_container,
|
@@ -46,7 +46,7 @@ def set_notify(custom_object: Dict, notifications: List[V1Notification]) -> Dict
|
|
46
46
|
def set_clean_pod_policy(template_spec: Dict, clean_pod_policy: str) -> Dict:
|
47
47
|
if not clean_pod_policy:
|
48
48
|
# Sets default clean pod policy
|
49
|
-
clean_pod_policy = "
|
49
|
+
clean_pod_policy = "None"
|
50
50
|
|
51
51
|
template_spec["cleanPodPolicy"] = clean_pod_policy.capitalize()
|
52
52
|
return template_spec
|
polyaxon/_pql/manager.py
CHANGED
@@ -13,7 +13,7 @@ class PQLManager:
|
|
13
13
|
FIELDS_PROXY = {}
|
14
14
|
FIELDS_TRANS = {}
|
15
15
|
FIELDS_ORDERING = None
|
16
|
-
FIELDS_ORDERING_PROXY = None
|
16
|
+
FIELDS_ORDERING_PROXY = None # Do not set a field on both field and proxy
|
17
17
|
FIELDS_DEFAULT_ORDERING = None
|
18
18
|
FIELDS_DISTINCT = None
|
19
19
|
CHECK_ALIVE = True
|
polyaxon/_sdk/api/runs_v1_api.py
CHANGED
@@ -3014,8 +3014,8 @@ class RunsV1Api(BaseApi):
|
|
3014
3014
|
self,
|
3015
3015
|
namespace: Annotated[StrictStr, Field(..., description="namespace")],
|
3016
3016
|
owner: Annotated[StrictStr, Field(..., description="Owner of the namespace")],
|
3017
|
-
|
3018
|
-
StrictStr, Field(..., description="
|
3017
|
+
entity: Annotated[
|
3018
|
+
StrictStr, Field(..., description="Entity where the run will be assigned")
|
3019
3019
|
],
|
3020
3020
|
kind: Annotated[str, Field(..., description="The artifact kind")],
|
3021
3021
|
names: Annotated[
|
@@ -3046,15 +3046,15 @@ class RunsV1Api(BaseApi):
|
|
3046
3046
|
This method makes a synchronous HTTP request by default. To make an
|
3047
3047
|
asynchronous HTTP request, please pass async_req=True
|
3048
3048
|
|
3049
|
-
>>> thread = api.get_multi_run_events(namespace, owner,
|
3049
|
+
>>> thread = api.get_multi_run_events(namespace, owner, entity, kind, names, runs, orient, force, sample, connection, status, async_req=True)
|
3050
3050
|
>>> result = thread.get()
|
3051
3051
|
|
3052
3052
|
:param namespace: namespace (required)
|
3053
3053
|
:type namespace: str
|
3054
3054
|
:param owner: Owner of the namespace (required)
|
3055
3055
|
:type owner: str
|
3056
|
-
:param
|
3057
|
-
:type
|
3056
|
+
:param entity: Entity where the run will be assigned (required)
|
3057
|
+
:type entity: str
|
3058
3058
|
:param kind: The artifact kind (required)
|
3059
3059
|
:type kind: str
|
3060
3060
|
:param names: Names query param.
|
@@ -3090,7 +3090,7 @@ class RunsV1Api(BaseApi):
|
|
3090
3090
|
return self.get_multi_run_events_with_http_info(
|
3091
3091
|
namespace,
|
3092
3092
|
owner,
|
3093
|
-
|
3093
|
+
entity,
|
3094
3094
|
kind,
|
3095
3095
|
names,
|
3096
3096
|
runs,
|
@@ -3107,8 +3107,8 @@ class RunsV1Api(BaseApi):
|
|
3107
3107
|
self,
|
3108
3108
|
namespace: Annotated[StrictStr, Field(..., description="namespace")],
|
3109
3109
|
owner: Annotated[StrictStr, Field(..., description="Owner of the namespace")],
|
3110
|
-
|
3111
|
-
StrictStr, Field(..., description="
|
3110
|
+
entity: Annotated[
|
3111
|
+
StrictStr, Field(..., description="Entity where the run will be assigned")
|
3112
3112
|
],
|
3113
3113
|
kind: Annotated[str, Field(..., description="The artifact kind")],
|
3114
3114
|
names: Annotated[
|
@@ -3139,15 +3139,15 @@ class RunsV1Api(BaseApi):
|
|
3139
3139
|
This method makes a synchronous HTTP request by default. To make an
|
3140
3140
|
asynchronous HTTP request, please pass async_req=True
|
3141
3141
|
|
3142
|
-
>>> thread = api.get_multi_run_events_with_http_info(namespace, owner,
|
3142
|
+
>>> thread = api.get_multi_run_events_with_http_info(namespace, owner, entity, kind, names, runs, orient, force, sample, connection, status, async_req=True)
|
3143
3143
|
>>> result = thread.get()
|
3144
3144
|
|
3145
3145
|
:param namespace: namespace (required)
|
3146
3146
|
:type namespace: str
|
3147
3147
|
:param owner: Owner of the namespace (required)
|
3148
3148
|
:type owner: str
|
3149
|
-
:param
|
3150
|
-
:type
|
3149
|
+
:param entity: Entity where the run will be assigned (required)
|
3150
|
+
:type entity: str
|
3151
3151
|
:param kind: The artifact kind (required)
|
3152
3152
|
:type kind: str
|
3153
3153
|
:param names: Names query param.
|
@@ -3193,7 +3193,7 @@ class RunsV1Api(BaseApi):
|
|
3193
3193
|
_all_params = [
|
3194
3194
|
"namespace",
|
3195
3195
|
"owner",
|
3196
|
-
"
|
3196
|
+
"entity",
|
3197
3197
|
"kind",
|
3198
3198
|
"names",
|
3199
3199
|
"runs",
|
@@ -3233,8 +3233,8 @@ class RunsV1Api(BaseApi):
|
|
3233
3233
|
_path_params["namespace"] = _params["namespace"]
|
3234
3234
|
if _params["owner"]:
|
3235
3235
|
_path_params["owner"] = _params["owner"]
|
3236
|
-
if _params["
|
3237
|
-
_path_params["
|
3236
|
+
if _params["entity"]:
|
3237
|
+
_path_params["entity"] = _params["entity"]
|
3238
3238
|
if _params["kind"]:
|
3239
3239
|
_path_params["kind"] = _params["kind"]
|
3240
3240
|
|
@@ -3281,7 +3281,7 @@ class RunsV1Api(BaseApi):
|
|
3281
3281
|
}
|
3282
3282
|
|
3283
3283
|
return self.api_client.call_api(
|
3284
|
-
"/streams/v1/{namespace}/{owner}/{
|
3284
|
+
"/streams/v1/{namespace}/{owner}/{entity}/runs/multi/events/{kind}",
|
3285
3285
|
"GET",
|
3286
3286
|
_path_params,
|
3287
3287
|
_query_params,
|
@@ -3304,8 +3304,8 @@ class RunsV1Api(BaseApi):
|
|
3304
3304
|
self,
|
3305
3305
|
namespace: Annotated[StrictStr, Field(..., description="namespace")],
|
3306
3306
|
owner: Annotated[StrictStr, Field(..., description="Owner of the namespace")],
|
3307
|
-
|
3308
|
-
StrictStr, Field(..., description="
|
3307
|
+
entity: Annotated[
|
3308
|
+
StrictStr, Field(..., description="Entity where the run will be assigned")
|
3309
3309
|
],
|
3310
3310
|
body: Annotated[Dict[str, Any], Field(..., description="Params/Metrics data")],
|
3311
3311
|
**kwargs
|
@@ -3315,15 +3315,15 @@ class RunsV1Api(BaseApi):
|
|
3315
3315
|
This method makes a synchronous HTTP request by default. To make an
|
3316
3316
|
asynchronous HTTP request, please pass async_req=True
|
3317
3317
|
|
3318
|
-
>>> thread = api.get_multi_run_importance(namespace, owner,
|
3318
|
+
>>> thread = api.get_multi_run_importance(namespace, owner, entity, body, async_req=True)
|
3319
3319
|
>>> result = thread.get()
|
3320
3320
|
|
3321
3321
|
:param namespace: namespace (required)
|
3322
3322
|
:type namespace: str
|
3323
3323
|
:param owner: Owner of the namespace (required)
|
3324
3324
|
:type owner: str
|
3325
|
-
:param
|
3326
|
-
:type
|
3325
|
+
:param entity: Entity where the run will be assigned (required)
|
3326
|
+
:type entity: str
|
3327
3327
|
:param body: Params/Metrics data (required)
|
3328
3328
|
:type body: object
|
3329
3329
|
:param async_req: Whether to execute the request asynchronously.
|
@@ -3343,7 +3343,7 @@ class RunsV1Api(BaseApi):
|
|
3343
3343
|
"""
|
3344
3344
|
kwargs["_return_http_data_only"] = True
|
3345
3345
|
return self.get_multi_run_importance_with_http_info(
|
3346
|
-
namespace, owner,
|
3346
|
+
namespace, owner, entity, body, **kwargs
|
3347
3347
|
) # noqa: E501
|
3348
3348
|
|
3349
3349
|
@validate_arguments
|
@@ -3351,8 +3351,8 @@ class RunsV1Api(BaseApi):
|
|
3351
3351
|
self,
|
3352
3352
|
namespace: Annotated[StrictStr, Field(..., description="namespace")],
|
3353
3353
|
owner: Annotated[StrictStr, Field(..., description="Owner of the namespace")],
|
3354
|
-
|
3355
|
-
StrictStr, Field(..., description="
|
3354
|
+
entity: Annotated[
|
3355
|
+
StrictStr, Field(..., description="Entity where the run will be assigned")
|
3356
3356
|
],
|
3357
3357
|
body: Annotated[Dict[str, Any], Field(..., description="Params/Metrics data")],
|
3358
3358
|
**kwargs
|
@@ -3362,15 +3362,15 @@ class RunsV1Api(BaseApi):
|
|
3362
3362
|
This method makes a synchronous HTTP request by default. To make an
|
3363
3363
|
asynchronous HTTP request, please pass async_req=True
|
3364
3364
|
|
3365
|
-
>>> thread = api.get_multi_run_importance_with_http_info(namespace, owner,
|
3365
|
+
>>> thread = api.get_multi_run_importance_with_http_info(namespace, owner, entity, body, async_req=True)
|
3366
3366
|
>>> result = thread.get()
|
3367
3367
|
|
3368
3368
|
:param namespace: namespace (required)
|
3369
3369
|
:type namespace: str
|
3370
3370
|
:param owner: Owner of the namespace (required)
|
3371
3371
|
:type owner: str
|
3372
|
-
:param
|
3373
|
-
:type
|
3372
|
+
:param entity: Entity where the run will be assigned (required)
|
3373
|
+
:type entity: str
|
3374
3374
|
:param body: Params/Metrics data (required)
|
3375
3375
|
:type body: object
|
3376
3376
|
:param async_req: Whether to execute the request asynchronously.
|
@@ -3399,7 +3399,7 @@ class RunsV1Api(BaseApi):
|
|
3399
3399
|
|
3400
3400
|
_params = locals()
|
3401
3401
|
|
3402
|
-
_all_params = ["namespace", "owner", "
|
3402
|
+
_all_params = ["namespace", "owner", "entity", "body"]
|
3403
3403
|
_all_params.extend(
|
3404
3404
|
[
|
3405
3405
|
"async_req",
|
@@ -3432,8 +3432,8 @@ class RunsV1Api(BaseApi):
|
|
3432
3432
|
if _params["owner"]:
|
3433
3433
|
_path_params["owner"] = _params["owner"]
|
3434
3434
|
|
3435
|
-
if _params["
|
3436
|
-
_path_params["
|
3435
|
+
if _params["entity"]:
|
3436
|
+
_path_params["entity"] = _params["entity"]
|
3437
3437
|
|
3438
3438
|
# process the query parameters
|
3439
3439
|
_query_params = []
|
@@ -3471,7 +3471,7 @@ class RunsV1Api(BaseApi):
|
|
3471
3471
|
}
|
3472
3472
|
|
3473
3473
|
return self.api_client.call_api(
|
3474
|
-
"/streams/v1/{namespace}/{owner}/{
|
3474
|
+
"/streams/v1/{namespace}/{owner}/{entity}/runs/multi/importance",
|
3475
3475
|
"POST",
|
3476
3476
|
_path_params,
|
3477
3477
|
_query_params,
|