anyscale 0.26.4__py3-none-any.whl → 0.26.5__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.
- anyscale/_private/anyscale_client/anyscale_client.py +1 -5
- anyscale/_private/docgen/__main__.py +0 -3
- anyscale/_private/docgen/api.md +0 -40
- anyscale/_private/docgen/models.md +0 -49
- anyscale/anyscale-cloud-setup-gcp-oa.yaml +2 -1
- anyscale/anyscale-cloud-setup-gcp.yaml +4 -2
- anyscale/client/README.md +9 -8
- anyscale/client/openapi_client/__init__.py +7 -5
- anyscale/client/openapi_client/api/default_api.py +304 -486
- anyscale/client/openapi_client/models/__init__.py +7 -5
- anyscale/client/openapi_client/models/{anyscaleversionresponse_response.py → backend_server_api_product_models_dataset_runs_dataset_response.py} +22 -22
- anyscale/client/openapi_client/models/{dataset_response.py → backend_server_api_product_routers_datasets_router_dataset_response.py} +8 -8
- anyscale/client/openapi_client/models/{anyscale_version_response.py → dataset_jobs.py} +22 -22
- anyscale/client/openapi_client/models/dataset_metrics.py +390 -0
- anyscale/{sdk/anyscale_client/models/session_command_types.py → client/openapi_client/models/dataset_state.py} +11 -9
- anyscale/client/openapi_client/models/{decoratedjob_list_response.py → metric.py} +64 -38
- anyscale/client/openapi_client/models/operator_metrics.py +256 -0
- anyscale/client/openapi_client/models/train_run.py +28 -1
- anyscale/cluster.py +5 -2
- anyscale/commands/anyscale_api/api_commands.py +0 -2
- anyscale/connect_utils/start_interactive_session.py +4 -1
- anyscale/controllers/cluster_controller.py +15 -26
- anyscale/controllers/project_controller.py +1 -6
- anyscale/job/_private/job_sdk.py +6 -1
- anyscale/job/models.py +8 -0
- anyscale/project_utils.py +9 -20
- anyscale/sdk/anyscale_client/__init__.py +0 -5
- anyscale/sdk/anyscale_client/api/default_api.py +0 -474
- anyscale/sdk/anyscale_client/models/__init__.py +0 -5
- anyscale/version.py +1 -1
- {anyscale-0.26.4.dist-info → anyscale-0.26.5.dist-info}/METADATA +1 -1
- {anyscale-0.26.4.dist-info → anyscale-0.26.5.dist-info}/RECORD +37 -41
- anyscale/client/openapi_client/models/setup_initialize_session_options.py +0 -225
- anyscale/commands/anyscale_api/session_commands_commands.py +0 -80
- anyscale/sdk/anyscale_client/models/create_session_command.py +0 -152
- anyscale/sdk/anyscale_client/models/session_command.py +0 -350
- anyscale/sdk/anyscale_client/models/sessioncommand_list_response.py +0 -147
- anyscale/sdk/anyscale_client/models/sessioncommand_response.py +0 -121
- {anyscale-0.26.4.dist-info → anyscale-0.26.5.dist-info}/LICENSE +0 -0
- {anyscale-0.26.4.dist-info → anyscale-0.26.5.dist-info}/NOTICE +0 -0
- {anyscale-0.26.4.dist-info → anyscale-0.26.5.dist-info}/WHEEL +0 -0
- {anyscale-0.26.4.dist-info → anyscale-0.26.5.dist-info}/entry_points.txt +0 -0
- {anyscale-0.26.4.dist-info → anyscale-0.26.5.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,256 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
"""
|
4
|
+
Managed Ray API
|
5
|
+
|
6
|
+
No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) # noqa: E501
|
7
|
+
|
8
|
+
The version of the OpenAPI document: 0.1.0
|
9
|
+
Generated by: https://openapi-generator.tech
|
10
|
+
"""
|
11
|
+
|
12
|
+
|
13
|
+
import pprint
|
14
|
+
import re # noqa: F401
|
15
|
+
|
16
|
+
import six
|
17
|
+
|
18
|
+
from openapi_client.configuration import Configuration
|
19
|
+
|
20
|
+
|
21
|
+
class OperatorMetrics(object):
|
22
|
+
"""NOTE: This class is auto generated by OpenAPI Generator.
|
23
|
+
Ref: https://openapi-generator.tech
|
24
|
+
|
25
|
+
Do not edit the class manually.
|
26
|
+
"""
|
27
|
+
|
28
|
+
"""
|
29
|
+
Attributes:
|
30
|
+
openapi_types (dict): The key is attribute name
|
31
|
+
and the value is attribute type.
|
32
|
+
attribute_map (dict): The key is attribute name
|
33
|
+
and the value is json key in definition.
|
34
|
+
"""
|
35
|
+
openapi_types = {
|
36
|
+
'id': 'str',
|
37
|
+
'name': 'str',
|
38
|
+
'state': 'DatasetState',
|
39
|
+
'progress': 'int',
|
40
|
+
'total': 'int',
|
41
|
+
'metrics': 'dict(str, Metric)'
|
42
|
+
}
|
43
|
+
|
44
|
+
attribute_map = {
|
45
|
+
'id': 'id',
|
46
|
+
'name': 'name',
|
47
|
+
'state': 'state',
|
48
|
+
'progress': 'progress',
|
49
|
+
'total': 'total',
|
50
|
+
'metrics': 'metrics'
|
51
|
+
}
|
52
|
+
|
53
|
+
def __init__(self, id=None, name=None, state=None, progress=None, total=None, metrics=None, local_vars_configuration=None): # noqa: E501
|
54
|
+
"""OperatorMetrics - a model defined in OpenAPI""" # noqa: E501
|
55
|
+
if local_vars_configuration is None:
|
56
|
+
local_vars_configuration = Configuration()
|
57
|
+
self.local_vars_configuration = local_vars_configuration
|
58
|
+
|
59
|
+
self._id = None
|
60
|
+
self._name = None
|
61
|
+
self._state = None
|
62
|
+
self._progress = None
|
63
|
+
self._total = None
|
64
|
+
self._metrics = None
|
65
|
+
self.discriminator = None
|
66
|
+
|
67
|
+
self.id = id
|
68
|
+
self.name = name
|
69
|
+
self.state = state
|
70
|
+
self.progress = progress
|
71
|
+
self.total = total
|
72
|
+
self.metrics = metrics
|
73
|
+
|
74
|
+
@property
|
75
|
+
def id(self):
|
76
|
+
"""Gets the id of this OperatorMetrics. # noqa: E501
|
77
|
+
|
78
|
+
|
79
|
+
:return: The id of this OperatorMetrics. # noqa: E501
|
80
|
+
:rtype: str
|
81
|
+
"""
|
82
|
+
return self._id
|
83
|
+
|
84
|
+
@id.setter
|
85
|
+
def id(self, id):
|
86
|
+
"""Sets the id of this OperatorMetrics.
|
87
|
+
|
88
|
+
|
89
|
+
:param id: The id of this OperatorMetrics. # noqa: E501
|
90
|
+
:type: str
|
91
|
+
"""
|
92
|
+
if self.local_vars_configuration.client_side_validation and id is None: # noqa: E501
|
93
|
+
raise ValueError("Invalid value for `id`, must not be `None`") # noqa: E501
|
94
|
+
|
95
|
+
self._id = id
|
96
|
+
|
97
|
+
@property
|
98
|
+
def name(self):
|
99
|
+
"""Gets the name of this OperatorMetrics. # noqa: E501
|
100
|
+
|
101
|
+
|
102
|
+
:return: The name of this OperatorMetrics. # noqa: E501
|
103
|
+
:rtype: str
|
104
|
+
"""
|
105
|
+
return self._name
|
106
|
+
|
107
|
+
@name.setter
|
108
|
+
def name(self, name):
|
109
|
+
"""Sets the name of this OperatorMetrics.
|
110
|
+
|
111
|
+
|
112
|
+
:param name: The name of this OperatorMetrics. # noqa: E501
|
113
|
+
:type: str
|
114
|
+
"""
|
115
|
+
if self.local_vars_configuration.client_side_validation and name is None: # noqa: E501
|
116
|
+
raise ValueError("Invalid value for `name`, must not be `None`") # noqa: E501
|
117
|
+
|
118
|
+
self._name = name
|
119
|
+
|
120
|
+
@property
|
121
|
+
def state(self):
|
122
|
+
"""Gets the state of this OperatorMetrics. # noqa: E501
|
123
|
+
|
124
|
+
|
125
|
+
:return: The state of this OperatorMetrics. # noqa: E501
|
126
|
+
:rtype: DatasetState
|
127
|
+
"""
|
128
|
+
return self._state
|
129
|
+
|
130
|
+
@state.setter
|
131
|
+
def state(self, state):
|
132
|
+
"""Sets the state of this OperatorMetrics.
|
133
|
+
|
134
|
+
|
135
|
+
:param state: The state of this OperatorMetrics. # noqa: E501
|
136
|
+
:type: DatasetState
|
137
|
+
"""
|
138
|
+
if self.local_vars_configuration.client_side_validation and state is None: # noqa: E501
|
139
|
+
raise ValueError("Invalid value for `state`, must not be `None`") # noqa: E501
|
140
|
+
|
141
|
+
self._state = state
|
142
|
+
|
143
|
+
@property
|
144
|
+
def progress(self):
|
145
|
+
"""Gets the progress of this OperatorMetrics. # noqa: E501
|
146
|
+
|
147
|
+
|
148
|
+
:return: The progress of this OperatorMetrics. # noqa: E501
|
149
|
+
:rtype: int
|
150
|
+
"""
|
151
|
+
return self._progress
|
152
|
+
|
153
|
+
@progress.setter
|
154
|
+
def progress(self, progress):
|
155
|
+
"""Sets the progress of this OperatorMetrics.
|
156
|
+
|
157
|
+
|
158
|
+
:param progress: The progress of this OperatorMetrics. # noqa: E501
|
159
|
+
:type: int
|
160
|
+
"""
|
161
|
+
if self.local_vars_configuration.client_side_validation and progress is None: # noqa: E501
|
162
|
+
raise ValueError("Invalid value for `progress`, must not be `None`") # noqa: E501
|
163
|
+
|
164
|
+
self._progress = progress
|
165
|
+
|
166
|
+
@property
|
167
|
+
def total(self):
|
168
|
+
"""Gets the total of this OperatorMetrics. # noqa: E501
|
169
|
+
|
170
|
+
|
171
|
+
:return: The total of this OperatorMetrics. # noqa: E501
|
172
|
+
:rtype: int
|
173
|
+
"""
|
174
|
+
return self._total
|
175
|
+
|
176
|
+
@total.setter
|
177
|
+
def total(self, total):
|
178
|
+
"""Sets the total of this OperatorMetrics.
|
179
|
+
|
180
|
+
|
181
|
+
:param total: The total of this OperatorMetrics. # noqa: E501
|
182
|
+
:type: int
|
183
|
+
"""
|
184
|
+
if self.local_vars_configuration.client_side_validation and total is None: # noqa: E501
|
185
|
+
raise ValueError("Invalid value for `total`, must not be `None`") # noqa: E501
|
186
|
+
|
187
|
+
self._total = total
|
188
|
+
|
189
|
+
@property
|
190
|
+
def metrics(self):
|
191
|
+
"""Gets the metrics of this OperatorMetrics. # noqa: E501
|
192
|
+
|
193
|
+
|
194
|
+
:return: The metrics of this OperatorMetrics. # noqa: E501
|
195
|
+
:rtype: dict(str, Metric)
|
196
|
+
"""
|
197
|
+
return self._metrics
|
198
|
+
|
199
|
+
@metrics.setter
|
200
|
+
def metrics(self, metrics):
|
201
|
+
"""Sets the metrics of this OperatorMetrics.
|
202
|
+
|
203
|
+
|
204
|
+
:param metrics: The metrics of this OperatorMetrics. # noqa: E501
|
205
|
+
:type: dict(str, Metric)
|
206
|
+
"""
|
207
|
+
if self.local_vars_configuration.client_side_validation and metrics is None: # noqa: E501
|
208
|
+
raise ValueError("Invalid value for `metrics`, must not be `None`") # noqa: E501
|
209
|
+
|
210
|
+
self._metrics = metrics
|
211
|
+
|
212
|
+
def to_dict(self):
|
213
|
+
"""Returns the model properties as a dict"""
|
214
|
+
result = {}
|
215
|
+
|
216
|
+
for attr, _ in six.iteritems(self.openapi_types):
|
217
|
+
value = getattr(self, attr)
|
218
|
+
if isinstance(value, list):
|
219
|
+
result[attr] = list(map(
|
220
|
+
lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
|
221
|
+
value
|
222
|
+
))
|
223
|
+
elif hasattr(value, "to_dict"):
|
224
|
+
result[attr] = value.to_dict()
|
225
|
+
elif isinstance(value, dict):
|
226
|
+
result[attr] = dict(map(
|
227
|
+
lambda item: (item[0], item[1].to_dict())
|
228
|
+
if hasattr(item[1], "to_dict") else item,
|
229
|
+
value.items()
|
230
|
+
))
|
231
|
+
else:
|
232
|
+
result[attr] = value
|
233
|
+
|
234
|
+
return result
|
235
|
+
|
236
|
+
def to_str(self):
|
237
|
+
"""Returns the string representation of the model"""
|
238
|
+
return pprint.pformat(self.to_dict())
|
239
|
+
|
240
|
+
def __repr__(self):
|
241
|
+
"""For `print` and `pprint`"""
|
242
|
+
return self.to_str()
|
243
|
+
|
244
|
+
def __eq__(self, other):
|
245
|
+
"""Returns true if both objects are equal"""
|
246
|
+
if not isinstance(other, OperatorMetrics):
|
247
|
+
return False
|
248
|
+
|
249
|
+
return self.to_dict() == other.to_dict()
|
250
|
+
|
251
|
+
def __ne__(self, other):
|
252
|
+
"""Returns true if both objects are not equal"""
|
253
|
+
if not isinstance(other, OperatorMetrics):
|
254
|
+
return True
|
255
|
+
|
256
|
+
return self.to_dict() != other.to_dict()
|
@@ -42,6 +42,7 @@ class TrainRun(object):
|
|
42
42
|
'start_time_ms': 'int',
|
43
43
|
'end_time_ms': 'int',
|
44
44
|
'attempts': 'list[TrainRunAttempt]',
|
45
|
+
'total_attempts': 'int',
|
45
46
|
'job_details': 'JobDetails',
|
46
47
|
'session_name': 'str',
|
47
48
|
'controller_log_id': 'str'
|
@@ -57,12 +58,13 @@ class TrainRun(object):
|
|
57
58
|
'start_time_ms': 'start_time_ms',
|
58
59
|
'end_time_ms': 'end_time_ms',
|
59
60
|
'attempts': 'attempts',
|
61
|
+
'total_attempts': 'total_attempts',
|
60
62
|
'job_details': 'job_details',
|
61
63
|
'session_name': 'session_name',
|
62
64
|
'controller_log_id': 'controller_log_id'
|
63
65
|
}
|
64
66
|
|
65
|
-
def __init__(self, id=None, name=None, job_id=None, controller_actor_id=None, status=None, status_detail=None, start_time_ms=None, end_time_ms=None, attempts=None, job_details=None, session_name=None, controller_log_id=None, local_vars_configuration=None): # noqa: E501
|
67
|
+
def __init__(self, id=None, name=None, job_id=None, controller_actor_id=None, status=None, status_detail=None, start_time_ms=None, end_time_ms=None, attempts=None, total_attempts=None, job_details=None, session_name=None, controller_log_id=None, local_vars_configuration=None): # noqa: E501
|
66
68
|
"""TrainRun - a model defined in OpenAPI""" # noqa: E501
|
67
69
|
if local_vars_configuration is None:
|
68
70
|
local_vars_configuration = Configuration()
|
@@ -77,6 +79,7 @@ class TrainRun(object):
|
|
77
79
|
self._start_time_ms = None
|
78
80
|
self._end_time_ms = None
|
79
81
|
self._attempts = None
|
82
|
+
self._total_attempts = None
|
80
83
|
self._job_details = None
|
81
84
|
self._session_name = None
|
82
85
|
self._controller_log_id = None
|
@@ -94,6 +97,7 @@ class TrainRun(object):
|
|
94
97
|
if end_time_ms is not None:
|
95
98
|
self.end_time_ms = end_time_ms
|
96
99
|
self.attempts = attempts
|
100
|
+
self.total_attempts = total_attempts
|
97
101
|
self.job_details = job_details
|
98
102
|
if session_name is not None:
|
99
103
|
self.session_name = session_name
|
@@ -301,6 +305,29 @@ class TrainRun(object):
|
|
301
305
|
|
302
306
|
self._attempts = attempts
|
303
307
|
|
308
|
+
@property
|
309
|
+
def total_attempts(self):
|
310
|
+
"""Gets the total_attempts of this TrainRun. # noqa: E501
|
311
|
+
|
312
|
+
|
313
|
+
:return: The total_attempts of this TrainRun. # noqa: E501
|
314
|
+
:rtype: int
|
315
|
+
"""
|
316
|
+
return self._total_attempts
|
317
|
+
|
318
|
+
@total_attempts.setter
|
319
|
+
def total_attempts(self, total_attempts):
|
320
|
+
"""Sets the total_attempts of this TrainRun.
|
321
|
+
|
322
|
+
|
323
|
+
:param total_attempts: The total_attempts of this TrainRun. # noqa: E501
|
324
|
+
:type: int
|
325
|
+
"""
|
326
|
+
if self.local_vars_configuration.client_side_validation and total_attempts is None: # noqa: E501
|
327
|
+
raise ValueError("Invalid value for `total_attempts`, must not be `None`") # noqa: E501
|
328
|
+
|
329
|
+
self._total_attempts = total_attempts
|
330
|
+
|
304
331
|
@property
|
305
332
|
def job_details(self):
|
306
333
|
"""Gets the job_details of this TrainRun. # noqa: E501
|
anyscale/cluster.py
CHANGED
@@ -121,10 +121,13 @@ def get_job_submission_client_cluster_info(
|
|
121
121
|
|
122
122
|
if len(cluster_list) > 0:
|
123
123
|
cluster = cluster_list[0]
|
124
|
-
|
124
|
+
access_token = api_client.get_cluster_access_token_api_v2_authentication_cluster_id_cluster_access_token_get(
|
125
|
+
cluster_id=cluster.id
|
126
|
+
)
|
127
|
+
if cluster.host_name and access_token:
|
125
128
|
return ClusterInfo(
|
126
129
|
address=cluster.host_name,
|
127
|
-
cookies={"anyscale-token":
|
130
|
+
cookies={"anyscale-token": access_token},
|
128
131
|
metadata=metadata,
|
129
132
|
)
|
130
133
|
else:
|
@@ -4,7 +4,6 @@ Commands to interact with the Anyscale API
|
|
4
4
|
|
5
5
|
import click
|
6
6
|
|
7
|
-
from anyscale.commands.anyscale_api.session_commands_commands import session_commands
|
8
7
|
from anyscale.commands.anyscale_api.session_operations_commands import (
|
9
8
|
session_operations_commands,
|
10
9
|
)
|
@@ -18,6 +17,5 @@ def anyscale_api() -> None:
|
|
18
17
|
pass
|
19
18
|
|
20
19
|
|
21
|
-
anyscale_api.add_command(session_commands)
|
22
20
|
anyscale_api.add_command(sessions)
|
23
21
|
anyscale_api.add_command(session_operations_commands)
|
@@ -329,7 +329,10 @@ class StartInteractiveSessionBlock:
|
|
329
329
|
) -> Tuple[str, bool, Any]:
|
330
330
|
"""Get the params from the cluster needed to use Ray client."""
|
331
331
|
connect_url = None
|
332
|
-
|
332
|
+
access_token = self.api_client.get_cluster_access_token_api_v2_authentication_cluster_id_cluster_access_token_get(
|
333
|
+
cluster_id=session_meta.id
|
334
|
+
)
|
335
|
+
metadata = [("cookie", "anyscale-token=" + access_token)]
|
333
336
|
if session_meta.connect_url:
|
334
337
|
url_components = session_meta.connect_url.split("?port=")
|
335
338
|
metadata += [("port", url_components[1])] if len(url_components) > 1 else []
|
@@ -358,22 +358,18 @@ class ClusterController(BaseController):
|
|
358
358
|
project_id = get_project_id(project_definition.root)
|
359
359
|
except click.ClickException:
|
360
360
|
parent_cloud_id = None
|
361
|
-
feature_flag_on = self.api_client.check_is_feature_flag_on_api_v2_userinfo_check_is_feature_flag_on_get(
|
362
|
-
"cloud-isolation-phase-1"
|
363
|
-
).result.is_on
|
364
361
|
log_msg = "No project context detected or `--project-id` provided. Continuing without a project."
|
365
|
-
if
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
anyscale_api_client=self.anyscale_api_client,
|
370
|
-
)
|
371
|
-
parent_cloud_id, _ = get_cloud_id_and_name(
|
372
|
-
api_client=self.api_client,
|
373
|
-
cloud_id=cloud_id,
|
374
|
-
cloud_name=cloud_name,
|
362
|
+
if not (cloud_id or cloud_name):
|
363
|
+
cloud_name = get_last_used_cloud(
|
364
|
+
project_id=None,
|
365
|
+
anyscale_api_client=self.anyscale_api_client,
|
375
366
|
)
|
376
|
-
|
367
|
+
parent_cloud_id, _ = get_cloud_id_and_name(
|
368
|
+
api_client=self.api_client,
|
369
|
+
cloud_id=cloud_id,
|
370
|
+
cloud_name=cloud_name,
|
371
|
+
)
|
372
|
+
log_msg = f"No project context detected or `--project-id` provided. Continuing without a project assuming cloud {parent_cloud_id}."
|
377
373
|
default_project = self.anyscale_api_client.get_default_project(
|
378
374
|
parent_cloud_id=parent_cloud_id
|
379
375
|
).result
|
@@ -480,18 +476,11 @@ class ClusterController(BaseController):
|
|
480
476
|
"`--cloud-name` and `--cloud-id` cannot both be specified. Please only provide one "
|
481
477
|
"of these two arguments."
|
482
478
|
)
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
and cluster_name is not None
|
489
|
-
and (
|
490
|
-
project_id is None
|
491
|
-
and project_name is None
|
492
|
-
and cloud_id is None
|
493
|
-
and cloud_name is None
|
494
|
-
)
|
479
|
+
if cluster_name is not None and (
|
480
|
+
project_id is None
|
481
|
+
and project_name is None
|
482
|
+
and cloud_id is None
|
483
|
+
and cloud_name is None
|
495
484
|
):
|
496
485
|
raise click.ClickException(
|
497
486
|
"Please specify the project of the cluster through `--project-id` or `--project-name`. If the cluster "
|
@@ -66,12 +66,7 @@ class ProjectController(BaseController):
|
|
66
66
|
"""
|
67
67
|
Call API to create a new project given a project name.
|
68
68
|
"""
|
69
|
-
if not parent_cloud_id
|
70
|
-
self.api_client.check_is_feature_flag_on_api_v2_userinfo_check_is_feature_flag_on_get(
|
71
|
-
"cloud-isolation-phase-1"
|
72
|
-
).result.is_on
|
73
|
-
is True
|
74
|
-
):
|
69
|
+
if not parent_cloud_id:
|
75
70
|
raise click.ClickException(
|
76
71
|
"Parent cloud id should be specified when creating a new project because "
|
77
72
|
"cloud isolation has been enabled."
|
anyscale/job/_private/job_sdk.py
CHANGED
@@ -295,7 +295,12 @@ class PrivateJobSDK(WorkloadSDK):
|
|
295
295
|
runs = [self._job_run_model_to_job_run_status(run) for run in runs]
|
296
296
|
|
297
297
|
return JobStatus(
|
298
|
-
name=model.name,
|
298
|
+
name=model.name,
|
299
|
+
id=model.id,
|
300
|
+
state=state,
|
301
|
+
runs=runs,
|
302
|
+
config=config,
|
303
|
+
creator_id=model.creator_id,
|
299
304
|
)
|
300
305
|
|
301
306
|
def _resolve_to_job_model(
|
anyscale/job/models.py
CHANGED
@@ -487,6 +487,14 @@ state: STARTING
|
|
487
487
|
if not isinstance(run, JobRunStatus):
|
488
488
|
raise TypeError("Each run in 'runs' must be a JobRunStatus.")
|
489
489
|
|
490
|
+
creator_id: str = field(
|
491
|
+
metadata={"docstring": "ID of the user who created the job.",},
|
492
|
+
)
|
493
|
+
|
494
|
+
def _validate_creator_id(self, creator_id: str):
|
495
|
+
if creator_id is not None and not isinstance(creator_id, str):
|
496
|
+
raise TypeError("'creator_id' must be a string.")
|
497
|
+
|
490
498
|
|
491
499
|
class JobLogMode(ModelEnum):
|
492
500
|
"""Mode to use for getting job logs."""
|
anyscale/project_utils.py
CHANGED
@@ -277,10 +277,7 @@ def get_parent_cloud_id_and_name_of_project(
|
|
277
277
|
project = api_client.get_project_api_v2_projects_project_id_get(
|
278
278
|
project_id=project_id
|
279
279
|
).result
|
280
|
-
|
281
|
-
"cloud-isolation-phase-1"
|
282
|
-
).result.is_on
|
283
|
-
if project and cloud_isolation_ff_on:
|
280
|
+
if project:
|
284
281
|
parent_cloud_id, parent_cloud_name = get_cloud_id_and_name(
|
285
282
|
api_client, cloud_id=project.parent_cloud_id
|
286
283
|
)
|
@@ -439,22 +436,14 @@ def get_default_project(
|
|
439
436
|
anyscale_api_client or get_auth_api_client(log_output=False).anyscale_api_client
|
440
437
|
)
|
441
438
|
api_client = api_client or get_auth_api_client(log_output=False).api_client
|
442
|
-
if
|
443
|
-
|
444
|
-
"cloud
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
if not parent_cloud_id:
|
451
|
-
raise click.ClickException(
|
452
|
-
"Please specify a cloud for this command either through the cloud or "
|
453
|
-
"compute config arguments."
|
454
|
-
)
|
455
|
-
default_project = anyscale_api_client.get_default_project(
|
456
|
-
parent_cloud_id=parent_cloud_id
|
457
|
-
).result
|
439
|
+
if not parent_cloud_id:
|
440
|
+
raise click.ClickException(
|
441
|
+
"Please specify a cloud for this command either through the cloud or "
|
442
|
+
"compute config arguments."
|
443
|
+
)
|
444
|
+
default_project = anyscale_api_client.get_default_project(
|
445
|
+
parent_cloud_id=parent_cloud_id
|
446
|
+
).result
|
458
447
|
return default_project
|
459
448
|
|
460
449
|
|
@@ -113,7 +113,6 @@ from anyscale_client.models.create_project import CreateProject
|
|
113
113
|
from anyscale_client.models.create_sso_config import CreateSSOConfig
|
114
114
|
from anyscale_client.models.create_schedule import CreateSchedule
|
115
115
|
from anyscale_client.models.create_session import CreateSession
|
116
|
-
from anyscale_client.models.create_session_command import CreateSessionCommand
|
117
116
|
from anyscale_client.models.grpc_protocol_config import GrpcProtocolConfig
|
118
117
|
from anyscale_client.models.http_validation_error import HTTPValidationError
|
119
118
|
from anyscale_client.models.ha_job_goal_states import HaJobGoalStates
|
@@ -188,8 +187,6 @@ from anyscale_client.models.service_version_state import ServiceVersionState
|
|
188
187
|
from anyscale_client.models.servicemodel_list_response import ServicemodelListResponse
|
189
188
|
from anyscale_client.models.servicemodel_response import ServicemodelResponse
|
190
189
|
from anyscale_client.models.session import Session
|
191
|
-
from anyscale_client.models.session_command import SessionCommand
|
192
|
-
from anyscale_client.models.session_command_types import SessionCommandTypes
|
193
190
|
from anyscale_client.models.session_list_response import SessionListResponse
|
194
191
|
from anyscale_client.models.session_operation import SessionOperation
|
195
192
|
from anyscale_client.models.session_operation_type import SessionOperationType
|
@@ -198,8 +195,6 @@ from anyscale_client.models.session_starting_up_data import SessionStartingUpDat
|
|
198
195
|
from anyscale_client.models.session_state import SessionState
|
199
196
|
from anyscale_client.models.session_state_data import SessionStateData
|
200
197
|
from anyscale_client.models.session_stopping_data import SessionStoppingData
|
201
|
-
from anyscale_client.models.sessioncommand_list_response import SessioncommandListResponse
|
202
|
-
from anyscale_client.models.sessioncommand_response import SessioncommandResponse
|
203
198
|
from anyscale_client.models.sessionoperation_response import SessionoperationResponse
|
204
199
|
from anyscale_client.models.sessions_query import SessionsQuery
|
205
200
|
from anyscale_client.models.sort_by_clause_jobs_sort_field import SortByClauseJobsSortField
|