anyscale 0.24.88__py3-none-any.whl → 0.25.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/__init__.py +56 -0
- anyscale/_private/anyscale_client/anyscale_client.py +179 -28
- anyscale/_private/anyscale_client/common.py +109 -2
- anyscale/_private/anyscale_client/fake_anyscale_client.py +239 -1
- anyscale/_private/docgen/README.md +1 -1
- anyscale/_private/docgen/__main__.py +71 -21
- anyscale/_private/docgen/api.md +13 -20
- anyscale/_private/docgen/generator.py +3 -2
- anyscale/_private/docgen/models.md +4 -49
- anyscale/_private/workload/workload_config.py +21 -7
- anyscale/aggregated_instance_usage/__init__.py +1 -1
- anyscale/aggregated_instance_usage/commands.py +2 -4
- anyscale/aggregated_instance_usage/models.py +8 -8
- anyscale/client/README.md +25 -22
- anyscale/client/openapi_client/__init__.py +16 -14
- anyscale/client/openapi_client/api/default_api.py +1139 -959
- anyscale/client/openapi_client/models/__init__.py +16 -14
- anyscale/client/openapi_client/models/baseimagesenum.py +43 -1
- anyscale/client/openapi_client/models/{session_event_types.py → cloud_deployment_config.py} +35 -24
- anyscale/client/openapi_client/models/{platformfinetuningjob_response.py → clouddeploymentconfig_response.py} +11 -11
- anyscale/client/openapi_client/models/{log_level_types.py → cluster_event_source.py} +12 -7
- anyscale/client/openapi_client/models/{company_size.py → cluster_size.py} +10 -10
- anyscale/client/openapi_client/models/cluster_status_details.py +2 -1
- anyscale/client/openapi_client/models/{sessionevent_list_response.py → clusterevent_list_response.py} +15 -15
- anyscale/client/openapi_client/models/create_experimental_workspace.py +29 -1
- anyscale/client/openapi_client/models/create_notification_channel_record.py +29 -3
- anyscale/client/openapi_client/models/decorated_interactive_session.py +1 -57
- anyscale/client/openapi_client/models/decorated_job.py +1 -57
- anyscale/client/openapi_client/models/decorated_job_submission.py +1 -29
- anyscale/client/openapi_client/models/decorated_production_job.py +1 -29
- anyscale/client/openapi_client/models/decorated_session.py +1 -57
- anyscale/client/openapi_client/models/decorated_unified_job.py +1 -30
- anyscale/client/openapi_client/models/{resubmit_ft_job_request.py → describe_machine_pool_request.py} +21 -20
- anyscale/client/openapi_client/models/describe_machine_pool_response.py +123 -0
- anyscale/client/openapi_client/models/describemachinepoolresponse_response.py +121 -0
- anyscale/client/openapi_client/models/ha_jobs_sort_field.py +1 -2
- anyscale/client/openapi_client/models/internal_production_job.py +1 -29
- anyscale/client/openapi_client/models/jobs_sort_field.py +1 -2
- anyscale/client/openapi_client/models/machine_allocation_state.py +3 -1
- anyscale/client/openapi_client/models/machine_state_info.py +326 -0
- anyscale/client/openapi_client/models/{fine_tuning_job_status.py → notification_channel_slack_config.py} +34 -16
- anyscale/client/openapi_client/models/organization_marketing_questions.py +80 -54
- anyscale/client/openapi_client/models/request_state_info.py +210 -0
- anyscale/client/openapi_client/models/{platformfinetuningjob_list_response.py → scheduler_info.py} +43 -38
- anyscale/client/openapi_client/models/serve_deployment_fast_api_docs_status.py +123 -0
- anyscale/client/openapi_client/models/serve_deployment_state.py +2 -1
- anyscale/client/openapi_client/models/servedeploymentfastapidocsstatus_response.py +121 -0
- anyscale/client/openapi_client/models/sessions_sort_field.py +1 -2
- anyscale/client/openapi_client/models/supportedbaseimagesenum.py +43 -1
- anyscale/client/openapi_client/models/unified_job_sort_field.py +1 -2
- anyscale/client/openapi_client/models/update_cloud_collaborator.py +121 -0
- anyscale/client/openapi_client/models/usage_by_cluster.py +28 -1
- anyscale/client/openapi_client/models/usage_by_user.py +30 -3
- anyscale/client/openapi_client/models/workload_info.py +210 -0
- anyscale/cloud/__init__.py +83 -0
- anyscale/cloud/_private/cloud_sdk.py +25 -0
- anyscale/cloud/commands.py +45 -0
- anyscale/cloud/models.py +91 -0
- anyscale/cluster_compute.py +1 -1
- anyscale/commands/aggregated_instance_usage_commands.py +4 -4
- anyscale/commands/cloud_commands.py +87 -14
- anyscale/commands/command_examples.py +65 -0
- anyscale/commands/job_commands.py +15 -3
- anyscale/commands/machine_pool_commands.py +113 -1
- anyscale/commands/organization_invitation_commands.py +98 -0
- anyscale/commands/project_commands.py +52 -2
- anyscale/commands/resource_quota_commands.py +98 -11
- anyscale/commands/service_account_commands.py +65 -8
- anyscale/commands/service_commands.py +61 -1
- anyscale/commands/session_commands_hidden.py +5 -1
- anyscale/commands/user_commands.py +1 -1
- anyscale/commands/util.py +2 -2
- anyscale/commands/workspace_commands.py +1 -1
- anyscale/connect.py +1 -1
- anyscale/connect_utils/project.py +7 -4
- anyscale/controllers/cloud_controller.py +63 -30
- anyscale/controllers/cloud_functional_verification_controller.py +1 -1
- anyscale/controllers/cluster_controller.py +3 -11
- anyscale/controllers/compute_config_controller.py +1 -1
- anyscale/controllers/experimental_integrations_controller.py +1 -1
- anyscale/controllers/job_controller.py +8 -6
- anyscale/controllers/list_controller.py +2 -2
- anyscale/controllers/machine_pool_controller.py +12 -1
- anyscale/controllers/project_controller.py +4 -3
- anyscale/controllers/schedule_controller.py +1 -1
- anyscale/controllers/service_controller.py +1 -1
- anyscale/controllers/workspace_controller.py +1 -1
- anyscale/models/job_model.py +1 -1
- anyscale/organization_invitation/__init__.py +61 -0
- anyscale/organization_invitation/_private/organization_invitation_sdk.py +24 -0
- anyscale/organization_invitation/commands.py +84 -0
- anyscale/organization_invitation/models.py +45 -0
- anyscale/project/__init__.py +35 -0
- anyscale/project/_private/project_sdk.py +27 -0
- anyscale/project/commands.py +56 -0
- anyscale/project/models.py +91 -0
- anyscale/{project.py → project_utils.py} +3 -4
- anyscale/resource_quota/__init__.py +99 -0
- anyscale/resource_quota/_private/resource_quota_sdk.py +120 -0
- anyscale/resource_quota/commands.py +150 -0
- anyscale/resource_quota/models.py +303 -0
- anyscale/scripts.py +4 -0
- anyscale/sdk/anyscale_client/__init__.py +0 -5
- anyscale/sdk/anyscale_client/api/default_api.py +119 -150
- anyscale/sdk/anyscale_client/models/__init__.py +0 -5
- anyscale/sdk/anyscale_client/models/baseimagesenum.py +43 -1
- anyscale/sdk/anyscale_client/models/cluster_status_details.py +2 -1
- anyscale/sdk/anyscale_client/models/jobs_sort_field.py +1 -2
- anyscale/sdk/anyscale_client/models/supportedbaseimagesenum.py +43 -1
- anyscale/sdk/anyscale_client/sdk.py +1 -1
- anyscale/service/__init__.py +21 -0
- anyscale/service/_private/service_sdk.py +13 -0
- anyscale/service/commands.py +35 -0
- anyscale/service_account/__init__.py +88 -0
- anyscale/service_account/_private/service_account_sdk.py +101 -0
- anyscale/service_account/commands.py +147 -0
- anyscale/service_account/models.py +66 -0
- anyscale/shared_anyscale_utils/latest_ray_version.py +1 -1
- anyscale/shared_anyscale_utils/utils/id_gen.py +2 -0
- anyscale/user/__init__.py +1 -1
- anyscale/user/commands.py +1 -1
- anyscale/user/models.py +25 -15
- anyscale/util.py +23 -0
- anyscale/utils/cloud_utils.py +1 -1
- anyscale/version.py +1 -1
- anyscale/workspace_utils.py +1 -1
- {anyscale-0.24.88.dist-info → anyscale-0.25.5.dist-info}/METADATA +1 -5
- {anyscale-0.24.88.dist-info → anyscale-0.25.5.dist-info}/RECORD +134 -119
- anyscale/client/openapi_client/models/create_fine_tuning_hyperparameters.py +0 -156
- anyscale/client/openapi_client/models/create_fine_tuning_job_product_request.py +0 -353
- anyscale/client/openapi_client/models/finish_ft_job_request.py +0 -204
- anyscale/client/openapi_client/models/platform_fine_tuning_job.py +0 -577
- anyscale/client/openapi_client/models/session_event.py +0 -267
- anyscale/client/openapi_client/models/session_event_cause.py +0 -150
- anyscale/controllers/resource_quota_controller.py +0 -183
- anyscale/controllers/service_account_controller.py +0 -168
- anyscale/sdk/anyscale_client/models/log_level_types.py +0 -100
- anyscale/sdk/anyscale_client/models/session_event.py +0 -267
- anyscale/sdk/anyscale_client/models/session_event_cause.py +0 -150
- anyscale/sdk/anyscale_client/models/session_event_types.py +0 -111
- anyscale/sdk/anyscale_client/models/sessionevent_list_response.py +0 -147
- anyscale/utils/imports/azure.py +0 -14
- /anyscale/{cloud.py → cloud_utils.py} +0 -0
- {anyscale-0.24.88.dist-info → anyscale-0.25.5.dist-info}/LICENSE +0 -0
- {anyscale-0.24.88.dist-info → anyscale-0.25.5.dist-info}/NOTICE +0 -0
- {anyscale-0.24.88.dist-info → anyscale-0.25.5.dist-info}/WHEEL +0 -0
- {anyscale-0.24.88.dist-info → anyscale-0.25.5.dist-info}/entry_points.txt +0 -0
- {anyscale-0.24.88.dist-info → anyscale-0.25.5.dist-info}/top_level.txt +0 -0
@@ -1,267 +0,0 @@
|
|
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 SessionEvent(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
|
-
'event_type': 'str',
|
37
|
-
'log_level': 'LogLevelTypes',
|
38
|
-
'timestamp': 'datetime',
|
39
|
-
'description': 'str',
|
40
|
-
'cause': 'SessionEventCause',
|
41
|
-
'id': 'str'
|
42
|
-
}
|
43
|
-
|
44
|
-
attribute_map = {
|
45
|
-
'event_type': 'event_type',
|
46
|
-
'log_level': 'log_level',
|
47
|
-
'timestamp': 'timestamp',
|
48
|
-
'description': 'description',
|
49
|
-
'cause': 'cause',
|
50
|
-
'id': 'id'
|
51
|
-
}
|
52
|
-
|
53
|
-
def __init__(self, event_type=None, log_level=None, timestamp=None, description=None, cause=None, id=None, local_vars_configuration=None): # noqa: E501
|
54
|
-
"""SessionEvent - 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._event_type = None
|
60
|
-
self._log_level = None
|
61
|
-
self._timestamp = None
|
62
|
-
self._description = None
|
63
|
-
self._cause = None
|
64
|
-
self._id = None
|
65
|
-
self.discriminator = None
|
66
|
-
|
67
|
-
self.event_type = event_type
|
68
|
-
self.log_level = log_level
|
69
|
-
self.timestamp = timestamp
|
70
|
-
self.description = description
|
71
|
-
if cause is not None:
|
72
|
-
self.cause = cause
|
73
|
-
self.id = id
|
74
|
-
|
75
|
-
@property
|
76
|
-
def event_type(self):
|
77
|
-
"""Gets the event_type of this SessionEvent. # noqa: E501
|
78
|
-
|
79
|
-
The category of session event. # noqa: E501
|
80
|
-
|
81
|
-
:return: The event_type of this SessionEvent. # noqa: E501
|
82
|
-
:rtype: str
|
83
|
-
"""
|
84
|
-
return self._event_type
|
85
|
-
|
86
|
-
@event_type.setter
|
87
|
-
def event_type(self, event_type):
|
88
|
-
"""Sets the event_type of this SessionEvent.
|
89
|
-
|
90
|
-
The category of session event. # noqa: E501
|
91
|
-
|
92
|
-
:param event_type: The event_type of this SessionEvent. # noqa: E501
|
93
|
-
:type: str
|
94
|
-
"""
|
95
|
-
if self.local_vars_configuration.client_side_validation and event_type is None: # noqa: E501
|
96
|
-
raise ValueError("Invalid value for `event_type`, must not be `None`") # noqa: E501
|
97
|
-
|
98
|
-
self._event_type = event_type
|
99
|
-
|
100
|
-
@property
|
101
|
-
def log_level(self):
|
102
|
-
"""Gets the log_level of this SessionEvent. # noqa: E501
|
103
|
-
|
104
|
-
The severity of the session event. # noqa: E501
|
105
|
-
|
106
|
-
:return: The log_level of this SessionEvent. # noqa: E501
|
107
|
-
:rtype: LogLevelTypes
|
108
|
-
"""
|
109
|
-
return self._log_level
|
110
|
-
|
111
|
-
@log_level.setter
|
112
|
-
def log_level(self, log_level):
|
113
|
-
"""Sets the log_level of this SessionEvent.
|
114
|
-
|
115
|
-
The severity of the session event. # noqa: E501
|
116
|
-
|
117
|
-
:param log_level: The log_level of this SessionEvent. # noqa: E501
|
118
|
-
:type: LogLevelTypes
|
119
|
-
"""
|
120
|
-
if self.local_vars_configuration.client_side_validation and log_level is None: # noqa: E501
|
121
|
-
raise ValueError("Invalid value for `log_level`, must not be `None`") # noqa: E501
|
122
|
-
|
123
|
-
self._log_level = log_level
|
124
|
-
|
125
|
-
@property
|
126
|
-
def timestamp(self):
|
127
|
-
"""Gets the timestamp of this SessionEvent. # noqa: E501
|
128
|
-
|
129
|
-
The time at which the session event occurred. # noqa: E501
|
130
|
-
|
131
|
-
:return: The timestamp of this SessionEvent. # noqa: E501
|
132
|
-
:rtype: datetime
|
133
|
-
"""
|
134
|
-
return self._timestamp
|
135
|
-
|
136
|
-
@timestamp.setter
|
137
|
-
def timestamp(self, timestamp):
|
138
|
-
"""Sets the timestamp of this SessionEvent.
|
139
|
-
|
140
|
-
The time at which the session event occurred. # noqa: E501
|
141
|
-
|
142
|
-
:param timestamp: The timestamp of this SessionEvent. # noqa: E501
|
143
|
-
:type: datetime
|
144
|
-
"""
|
145
|
-
if self.local_vars_configuration.client_side_validation and timestamp is None: # noqa: E501
|
146
|
-
raise ValueError("Invalid value for `timestamp`, must not be `None`") # noqa: E501
|
147
|
-
|
148
|
-
self._timestamp = timestamp
|
149
|
-
|
150
|
-
@property
|
151
|
-
def description(self):
|
152
|
-
"""Gets the description of this SessionEvent. # noqa: E501
|
153
|
-
|
154
|
-
A human readable description of the session event. # noqa: E501
|
155
|
-
|
156
|
-
:return: The description of this SessionEvent. # noqa: E501
|
157
|
-
:rtype: str
|
158
|
-
"""
|
159
|
-
return self._description
|
160
|
-
|
161
|
-
@description.setter
|
162
|
-
def description(self, description):
|
163
|
-
"""Sets the description of this SessionEvent.
|
164
|
-
|
165
|
-
A human readable description of the session event. # noqa: E501
|
166
|
-
|
167
|
-
:param description: The description of this SessionEvent. # noqa: E501
|
168
|
-
:type: str
|
169
|
-
"""
|
170
|
-
if self.local_vars_configuration.client_side_validation and description is None: # noqa: E501
|
171
|
-
raise ValueError("Invalid value for `description`, must not be `None`") # noqa: E501
|
172
|
-
|
173
|
-
self._description = description
|
174
|
-
|
175
|
-
@property
|
176
|
-
def cause(self):
|
177
|
-
"""Gets the cause of this SessionEvent. # noqa: E501
|
178
|
-
|
179
|
-
The reason why the session event occurred. None indicates an unknown cause. # noqa: E501
|
180
|
-
|
181
|
-
:return: The cause of this SessionEvent. # noqa: E501
|
182
|
-
:rtype: SessionEventCause
|
183
|
-
"""
|
184
|
-
return self._cause
|
185
|
-
|
186
|
-
@cause.setter
|
187
|
-
def cause(self, cause):
|
188
|
-
"""Sets the cause of this SessionEvent.
|
189
|
-
|
190
|
-
The reason why the session event occurred. None indicates an unknown cause. # noqa: E501
|
191
|
-
|
192
|
-
:param cause: The cause of this SessionEvent. # noqa: E501
|
193
|
-
:type: SessionEventCause
|
194
|
-
"""
|
195
|
-
|
196
|
-
self._cause = cause
|
197
|
-
|
198
|
-
@property
|
199
|
-
def id(self):
|
200
|
-
"""Gets the id of this SessionEvent. # noqa: E501
|
201
|
-
|
202
|
-
A unique identifier for the session event. # noqa: E501
|
203
|
-
|
204
|
-
:return: The id of this SessionEvent. # noqa: E501
|
205
|
-
:rtype: str
|
206
|
-
"""
|
207
|
-
return self._id
|
208
|
-
|
209
|
-
@id.setter
|
210
|
-
def id(self, id):
|
211
|
-
"""Sets the id of this SessionEvent.
|
212
|
-
|
213
|
-
A unique identifier for the session event. # noqa: E501
|
214
|
-
|
215
|
-
:param id: The id of this SessionEvent. # noqa: E501
|
216
|
-
:type: str
|
217
|
-
"""
|
218
|
-
if self.local_vars_configuration.client_side_validation and id is None: # noqa: E501
|
219
|
-
raise ValueError("Invalid value for `id`, must not be `None`") # noqa: E501
|
220
|
-
|
221
|
-
self._id = id
|
222
|
-
|
223
|
-
def to_dict(self):
|
224
|
-
"""Returns the model properties as a dict"""
|
225
|
-
result = {}
|
226
|
-
|
227
|
-
for attr, _ in six.iteritems(self.openapi_types):
|
228
|
-
value = getattr(self, attr)
|
229
|
-
if isinstance(value, list):
|
230
|
-
result[attr] = list(map(
|
231
|
-
lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
|
232
|
-
value
|
233
|
-
))
|
234
|
-
elif hasattr(value, "to_dict"):
|
235
|
-
result[attr] = value.to_dict()
|
236
|
-
elif isinstance(value, dict):
|
237
|
-
result[attr] = dict(map(
|
238
|
-
lambda item: (item[0], item[1].to_dict())
|
239
|
-
if hasattr(item[1], "to_dict") else item,
|
240
|
-
value.items()
|
241
|
-
))
|
242
|
-
else:
|
243
|
-
result[attr] = value
|
244
|
-
|
245
|
-
return result
|
246
|
-
|
247
|
-
def to_str(self):
|
248
|
-
"""Returns the string representation of the model"""
|
249
|
-
return pprint.pformat(self.to_dict())
|
250
|
-
|
251
|
-
def __repr__(self):
|
252
|
-
"""For `print` and `pprint`"""
|
253
|
-
return self.to_str()
|
254
|
-
|
255
|
-
def __eq__(self, other):
|
256
|
-
"""Returns true if both objects are equal"""
|
257
|
-
if not isinstance(other, SessionEvent):
|
258
|
-
return False
|
259
|
-
|
260
|
-
return self.to_dict() == other.to_dict()
|
261
|
-
|
262
|
-
def __ne__(self, other):
|
263
|
-
"""Returns true if both objects are not equal"""
|
264
|
-
if not isinstance(other, SessionEvent):
|
265
|
-
return True
|
266
|
-
|
267
|
-
return self.to_dict() != other.to_dict()
|
@@ -1,150 +0,0 @@
|
|
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 SessionEventCause(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
|
-
'cause_user': 'str',
|
37
|
-
'cause_system': 'str'
|
38
|
-
}
|
39
|
-
|
40
|
-
attribute_map = {
|
41
|
-
'cause_user': 'cause_user',
|
42
|
-
'cause_system': 'cause_system'
|
43
|
-
}
|
44
|
-
|
45
|
-
def __init__(self, cause_user=None, cause_system=None, local_vars_configuration=None): # noqa: E501
|
46
|
-
"""SessionEventCause - a model defined in OpenAPI""" # noqa: E501
|
47
|
-
if local_vars_configuration is None:
|
48
|
-
local_vars_configuration = Configuration()
|
49
|
-
self.local_vars_configuration = local_vars_configuration
|
50
|
-
|
51
|
-
self._cause_user = None
|
52
|
-
self._cause_system = None
|
53
|
-
self.discriminator = None
|
54
|
-
|
55
|
-
if cause_user is not None:
|
56
|
-
self.cause_user = cause_user
|
57
|
-
if cause_system is not None:
|
58
|
-
self.cause_system = cause_system
|
59
|
-
|
60
|
-
@property
|
61
|
-
def cause_user(self):
|
62
|
-
"""Gets the cause_user of this SessionEventCause. # noqa: E501
|
63
|
-
|
64
|
-
The username of the user who caused the session event. # noqa: E501
|
65
|
-
|
66
|
-
:return: The cause_user of this SessionEventCause. # noqa: E501
|
67
|
-
:rtype: str
|
68
|
-
"""
|
69
|
-
return self._cause_user
|
70
|
-
|
71
|
-
@cause_user.setter
|
72
|
-
def cause_user(self, cause_user):
|
73
|
-
"""Sets the cause_user of this SessionEventCause.
|
74
|
-
|
75
|
-
The username of the user who caused the session event. # noqa: E501
|
76
|
-
|
77
|
-
:param cause_user: The cause_user of this SessionEventCause. # noqa: E501
|
78
|
-
:type: str
|
79
|
-
"""
|
80
|
-
|
81
|
-
self._cause_user = cause_user
|
82
|
-
|
83
|
-
@property
|
84
|
-
def cause_system(self):
|
85
|
-
"""Gets the cause_system of this SessionEventCause. # noqa: E501
|
86
|
-
|
87
|
-
The name of the internal anyscale system that caused the session event. # noqa: E501
|
88
|
-
|
89
|
-
:return: The cause_system of this SessionEventCause. # noqa: E501
|
90
|
-
:rtype: str
|
91
|
-
"""
|
92
|
-
return self._cause_system
|
93
|
-
|
94
|
-
@cause_system.setter
|
95
|
-
def cause_system(self, cause_system):
|
96
|
-
"""Sets the cause_system of this SessionEventCause.
|
97
|
-
|
98
|
-
The name of the internal anyscale system that caused the session event. # noqa: E501
|
99
|
-
|
100
|
-
:param cause_system: The cause_system of this SessionEventCause. # noqa: E501
|
101
|
-
:type: str
|
102
|
-
"""
|
103
|
-
|
104
|
-
self._cause_system = cause_system
|
105
|
-
|
106
|
-
def to_dict(self):
|
107
|
-
"""Returns the model properties as a dict"""
|
108
|
-
result = {}
|
109
|
-
|
110
|
-
for attr, _ in six.iteritems(self.openapi_types):
|
111
|
-
value = getattr(self, attr)
|
112
|
-
if isinstance(value, list):
|
113
|
-
result[attr] = list(map(
|
114
|
-
lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
|
115
|
-
value
|
116
|
-
))
|
117
|
-
elif hasattr(value, "to_dict"):
|
118
|
-
result[attr] = value.to_dict()
|
119
|
-
elif isinstance(value, dict):
|
120
|
-
result[attr] = dict(map(
|
121
|
-
lambda item: (item[0], item[1].to_dict())
|
122
|
-
if hasattr(item[1], "to_dict") else item,
|
123
|
-
value.items()
|
124
|
-
))
|
125
|
-
else:
|
126
|
-
result[attr] = value
|
127
|
-
|
128
|
-
return result
|
129
|
-
|
130
|
-
def to_str(self):
|
131
|
-
"""Returns the string representation of the model"""
|
132
|
-
return pprint.pformat(self.to_dict())
|
133
|
-
|
134
|
-
def __repr__(self):
|
135
|
-
"""For `print` and `pprint`"""
|
136
|
-
return self.to_str()
|
137
|
-
|
138
|
-
def __eq__(self, other):
|
139
|
-
"""Returns true if both objects are equal"""
|
140
|
-
if not isinstance(other, SessionEventCause):
|
141
|
-
return False
|
142
|
-
|
143
|
-
return self.to_dict() == other.to_dict()
|
144
|
-
|
145
|
-
def __ne__(self, other):
|
146
|
-
"""Returns true if both objects are not equal"""
|
147
|
-
if not isinstance(other, SessionEventCause):
|
148
|
-
return True
|
149
|
-
|
150
|
-
return self.to_dict() != other.to_dict()
|
@@ -1,183 +0,0 @@
|
|
1
|
-
from typing import Dict, List, Optional
|
2
|
-
|
3
|
-
import tabulate
|
4
|
-
|
5
|
-
from anyscale.cli_logger import LogsLogger
|
6
|
-
from anyscale.client.openapi_client.models.create_resource_quota import (
|
7
|
-
CreateResourceQuota,
|
8
|
-
)
|
9
|
-
from anyscale.client.openapi_client.models.list_resource_quotas_query import (
|
10
|
-
ListResourceQuotasQuery,
|
11
|
-
)
|
12
|
-
from anyscale.client.openapi_client.models.quota import Quota
|
13
|
-
from anyscale.client.openapi_client.models.resource_quota import ResourceQuota
|
14
|
-
from anyscale.client.openapi_client.models.resource_quota_status import (
|
15
|
-
ResourceQuotaStatus,
|
16
|
-
)
|
17
|
-
from anyscale.cloud import get_cloud_id_and_name
|
18
|
-
from anyscale.controllers.base_controller import BaseController
|
19
|
-
from anyscale.project import get_project_id_for_cloud_from_name
|
20
|
-
from anyscale.sdk.anyscale_client.models.page_query import PageQuery
|
21
|
-
from anyscale.sdk.anyscale_client.models.text_query import TextQuery
|
22
|
-
from anyscale.utils.user_utils import get_user_id_by_email
|
23
|
-
|
24
|
-
|
25
|
-
class ResourceQuotaController(BaseController):
|
26
|
-
def __init__(self):
|
27
|
-
super().__init__()
|
28
|
-
self.log = LogsLogger()
|
29
|
-
|
30
|
-
def create( # noqa: PLR0913
|
31
|
-
self,
|
32
|
-
name: str,
|
33
|
-
cloud: str,
|
34
|
-
project: Optional[str] = None,
|
35
|
-
user_email: Optional[str] = None,
|
36
|
-
num_cpus: Optional[int] = None,
|
37
|
-
num_instances: Optional[int] = None,
|
38
|
-
num_gpus: Optional[int] = None,
|
39
|
-
num_accelerators: Optional[Dict[str, int]] = None,
|
40
|
-
) -> str:
|
41
|
-
|
42
|
-
cloud_id, _ = get_cloud_id_and_name(self.api_client, cloud_name=cloud)
|
43
|
-
project_id = (
|
44
|
-
get_project_id_for_cloud_from_name(
|
45
|
-
project, cloud_id, self.api_client, self.anyscale_api_client
|
46
|
-
)
|
47
|
-
if project
|
48
|
-
else None
|
49
|
-
)
|
50
|
-
user_id = (
|
51
|
-
get_user_id_by_email(self.api_client, user_email) if user_email else None
|
52
|
-
)
|
53
|
-
|
54
|
-
create_resource_quota = CreateResourceQuota(
|
55
|
-
name=name,
|
56
|
-
cloud_id=cloud_id,
|
57
|
-
project_id=project_id,
|
58
|
-
user_id=user_id,
|
59
|
-
quota=Quota(
|
60
|
-
num_cpus=num_cpus,
|
61
|
-
num_instances=num_instances,
|
62
|
-
num_gpus=num_gpus,
|
63
|
-
num_accelerators=num_accelerators,
|
64
|
-
),
|
65
|
-
)
|
66
|
-
|
67
|
-
with self.log.spinner("Creating resource quota..."):
|
68
|
-
resource_quota_id = self.api_client.create_resource_quota_api_v2_resource_quotas_post(
|
69
|
-
create_resource_quota
|
70
|
-
).result.id
|
71
|
-
|
72
|
-
create_resource_quota_message = [f"Name: {name}\nCloud name: {cloud}"]
|
73
|
-
if project:
|
74
|
-
create_resource_quota_message.append(f"Project name: {project}")
|
75
|
-
if user_email:
|
76
|
-
create_resource_quota_message.append(f"User email: {user_email}")
|
77
|
-
if num_cpus:
|
78
|
-
create_resource_quota_message.append(f"Number of CPUs: {num_cpus}")
|
79
|
-
if num_instances:
|
80
|
-
create_resource_quota_message.append(
|
81
|
-
f"Number of instances: {num_instances}"
|
82
|
-
)
|
83
|
-
if num_gpus:
|
84
|
-
create_resource_quota_message.append(f"Number of GPUs: {num_gpus}")
|
85
|
-
if num_accelerators:
|
86
|
-
create_resource_quota_message.append(
|
87
|
-
f"Number of accelerators: {dict(num_accelerators)}"
|
88
|
-
)
|
89
|
-
|
90
|
-
self.log.info("\n".join(create_resource_quota_message))
|
91
|
-
self.log.info(f"Resource quota created successfully ID: {resource_quota_id}")
|
92
|
-
|
93
|
-
return resource_quota_id
|
94
|
-
|
95
|
-
def _format_resource_quotas(self, resource_quotas: List[ResourceQuota]) -> str:
|
96
|
-
table_rows = []
|
97
|
-
for resource_quota in resource_quotas:
|
98
|
-
table_rows.append(
|
99
|
-
[
|
100
|
-
resource_quota.id,
|
101
|
-
resource_quota.name,
|
102
|
-
resource_quota.cloud_id,
|
103
|
-
resource_quota.project_id,
|
104
|
-
resource_quota.user_id,
|
105
|
-
resource_quota.is_enabled,
|
106
|
-
resource_quota.created_at.strftime("%m/%d/%Y"),
|
107
|
-
resource_quota.deleted_at.strftime("%m/%d/%Y")
|
108
|
-
if resource_quota.deleted_at
|
109
|
-
else None,
|
110
|
-
resource_quota.quota,
|
111
|
-
]
|
112
|
-
)
|
113
|
-
table = tabulate.tabulate(
|
114
|
-
table_rows,
|
115
|
-
headers=[
|
116
|
-
"ID",
|
117
|
-
"NAME",
|
118
|
-
"CLOUD ID",
|
119
|
-
"PROJECT ID",
|
120
|
-
"USER ID",
|
121
|
-
"IS ENABLED",
|
122
|
-
"CREATED AT",
|
123
|
-
"DELETED AT",
|
124
|
-
"QUOTA",
|
125
|
-
],
|
126
|
-
tablefmt="plain",
|
127
|
-
)
|
128
|
-
|
129
|
-
return f"Resource quotas:\n{table}"
|
130
|
-
|
131
|
-
def list_resource_quotas(
|
132
|
-
self,
|
133
|
-
*,
|
134
|
-
name: Optional[str] = None,
|
135
|
-
cloud: Optional[str] = None,
|
136
|
-
creator_id: Optional[str] = None,
|
137
|
-
is_enabled: Optional[bool] = None,
|
138
|
-
max_items: int = 20,
|
139
|
-
) -> List[ResourceQuota]:
|
140
|
-
cloud_id, _ = (
|
141
|
-
get_cloud_id_and_name(self.api_client, cloud_name=cloud)
|
142
|
-
if cloud
|
143
|
-
else (None, None)
|
144
|
-
)
|
145
|
-
|
146
|
-
resource_quotas = self.api_client.search_resource_quotas_api_v2_resource_quotas_search_post(
|
147
|
-
ListResourceQuotasQuery(
|
148
|
-
name=TextQuery(equals=name) if name else None,
|
149
|
-
cloud_id=cloud_id,
|
150
|
-
creator_id=creator_id,
|
151
|
-
is_enabled=is_enabled,
|
152
|
-
paging=PageQuery(count=max_items),
|
153
|
-
)
|
154
|
-
).results
|
155
|
-
|
156
|
-
print(self._format_resource_quotas(resource_quotas))
|
157
|
-
return resource_quotas
|
158
|
-
|
159
|
-
def delete(self, resource_quota_id: str,) -> None:
|
160
|
-
"""
|
161
|
-
Delete a resource quota.
|
162
|
-
"""
|
163
|
-
with self.log.spinner("Deleting resource quota..."):
|
164
|
-
self.api_client.delete_resource_quota_api_v2_resource_quotas_resource_quota_id_delete(
|
165
|
-
resource_quota_id
|
166
|
-
)
|
167
|
-
|
168
|
-
self.log.info(
|
169
|
-
f"Resource quota with ID {resource_quota_id} deleted successfully."
|
170
|
-
)
|
171
|
-
|
172
|
-
def set_status(self, resource_quota_id: str, *, is_enabled: bool,) -> None:
|
173
|
-
"""
|
174
|
-
Set the status of a resource quota.
|
175
|
-
"""
|
176
|
-
with self.log.spinner("Setting resource quota status..."):
|
177
|
-
self.api_client.set_resource_quota_status_api_v2_resource_quotas_resource_quota_id_status_patch(
|
178
|
-
resource_quota_id, ResourceQuotaStatus(is_enabled=is_enabled)
|
179
|
-
)
|
180
|
-
|
181
|
-
self.log.info(
|
182
|
-
f"{'Enabled' if is_enabled else 'Disabled'} resource quota with ID {resource_quota_id} successfully."
|
183
|
-
)
|