lightning-sdk 2025.12.16__py3-none-any.whl → 2026.1.22__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.
- lightning_sdk/__version__.py +1 -1
- lightning_sdk/api/k8s_api.py +75 -29
- lightning_sdk/api/org_api.py +7 -0
- lightning_sdk/api/studio_api.py +223 -36
- lightning_sdk/api/teamspace_api.py +28 -9
- lightning_sdk/api/user_api.py +5 -0
- lightning_sdk/cli/cp/__init__.py +64 -0
- lightning_sdk/cli/entrypoint.py +2 -0
- lightning_sdk/cli/groups.py +22 -0
- lightning_sdk/cli/legacy/clusters_menu.py +2 -2
- lightning_sdk/cli/legacy/deploy/_auth.py +7 -6
- lightning_sdk/cli/legacy/download.py +2 -1
- lightning_sdk/cli/legacy/run.py +13 -2
- lightning_sdk/cli/legacy/studios_menu.py +8 -1
- lightning_sdk/cli/studio/__init__.py +4 -0
- lightning_sdk/cli/studio/cp.py +20 -64
- lightning_sdk/cli/studio/ls.py +57 -0
- lightning_sdk/cli/studio/rm.py +71 -0
- lightning_sdk/cli/utils/logging.py +2 -1
- lightning_sdk/cli/utils/studio_filesystem.py +65 -0
- lightning_sdk/cli/utils/teamspace_selection.py +5 -0
- lightning_sdk/exceptions.py +4 -0
- lightning_sdk/job/base.py +24 -5
- lightning_sdk/job/job.py +12 -5
- lightning_sdk/job/v1.py +5 -2
- lightning_sdk/job/v2.py +9 -1
- lightning_sdk/k8s_cluster.py +9 -10
- lightning_sdk/lightning_cloud/__version__.py +1 -1
- lightning_sdk/lightning_cloud/openapi/__init__.py +46 -3
- lightning_sdk/lightning_cloud/openapi/api/__init__.py +1 -0
- lightning_sdk/lightning_cloud/openapi/api/cloud_space_service_api.py +118 -1
- lightning_sdk/lightning_cloud/openapi/api/cluster_service_api.py +787 -125
- lightning_sdk/lightning_cloud/openapi/api/data_connection_service_api.py +5 -1
- lightning_sdk/lightning_cloud/openapi/api/file_system_service_api.py +11 -11
- lightning_sdk/lightning_cloud/openapi/api/k8_s_cluster_service_api.py +246 -19
- lightning_sdk/lightning_cloud/openapi/api/lightningwork_service_api.py +116 -11
- lightning_sdk/lightning_cloud/openapi/api/lit_logger_service_api.py +588 -2
- lightning_sdk/lightning_cloud/openapi/api/models_store_api.py +9 -1
- lightning_sdk/lightning_cloud/openapi/api/storage_service_api.py +5 -1
- lightning_sdk/lightning_cloud/openapi/api/virtual_machine_service_api.py +557 -0
- lightning_sdk/lightning_cloud/openapi/models/__init__.py +45 -3
- lightning_sdk/lightning_cloud/openapi/models/cloud_space_environment_template_service_update_cloud_space_environment_template_body.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/cluster_service_add_container_registry_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/cluster_service_create_cluster_capacity_reservation_body.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/cluster_service_create_machine_body.py +79 -1
- lightning_sdk/lightning_cloud/openapi/models/cluster_service_create_org_cluster_capacity_reservation_body.py +409 -0
- lightning_sdk/lightning_cloud/openapi/models/cluster_service_refresh_container_registry_credentials_body.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/cluster_service_report_machine_system_metrics_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/cluster_service_validate_container_registry_body.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/externalv1_cloud_space_instance_status.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/lit_logger_service_create_lit_logger_media_body.py +305 -0
- lightning_sdk/lightning_cloud/openapi/models/lit_logger_service_update_lit_logger_media_body.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/lit_logger_service_update_metrics_stream_body.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_add_container_registry_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_capacity_reservation_used_by.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_provider.py +1 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_environment_template_config.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_environment_type.py +1 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_specialized_view.py +1 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_accelerator.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_capacity_reservation.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_spec.py +53 -27
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_type.py +0 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_container_registry.py +253 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_container_registry_info.py +281 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_container_registry_integration.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_container_registry_status.py +105 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_cloud_space_environment_template_request.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_create_lit_logger_media_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_org_cluster_capacity_reservation_response.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_sdk_command_history_request.py +29 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_cudo_direct_v1.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_container_registry_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_lit_logger_media_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_virtual_machine_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_ai_pod_v1.py → v1_ecr_registry_config.py} +49 -49
- lightning_sdk/lightning_cloud/openapi/models/v1_ecr_registry_config_input.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_ecr_registry_details.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_external_cluster_spec.py +27 -27
- lightning_sdk/lightning_cloud/openapi/models/v1_external_search_user.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_get_artifacts_page_response.py +29 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_get_kubernetes_pod_logs_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_get_machine_response.py → v1_get_kubernetes_pod_response.py} +23 -23
- lightning_sdk/lightning_cloud/openapi/models/v1_get_user_response.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_job_spec.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_joinable_organization.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_k8s_incident_setting.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_k8s_incident_type.py +108 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_direct_settings_v1.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_direct_v1.py +105 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_pod.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_pod_logs_page.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_kubevirt_config.py +357 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_container_registries_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_kubernetes_pods_response.py +43 -17
- lightning_sdk/lightning_cloud/openapi/models/v1_list_kubernetes_pods_sort_order.py +104 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_lit_logger_media_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_models_response.py +55 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_list_virtual_machines_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_lit_logger_media.py +513 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_machine.py +53 -53
- lightning_sdk/lightning_cloud/openapi/models/v1_machine_direct_v1.py +107 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_media_type.py +104 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_nebius_direct_v1.py +29 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_node_metrics.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_organization.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_refresh_container_registry_credentials_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_report_cloud_space_instance_idle_state_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_report_machine_system_metrics_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_search_user.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_tenant_credentials.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_user_features.py +217 -113
- lightning_sdk/lightning_cloud/openapi/models/v1_validate_container_registry_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_virtual_machine.py +409 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_vm_configuration.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_vm_provider_configuration.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/virtual_machine_service_create_virtual_machine_body.py +565 -0
- lightning_sdk/lightning_cloud/openapi/models/virtual_machine_service_update_virtual_machine_body.py +97 -0
- lightning_sdk/lightning_cloud/openapi/rest.py +2 -2
- lightning_sdk/lightning_cloud/rest_client.py +0 -2
- lightning_sdk/machine.py +3 -3
- lightning_sdk/mmt/base.py +26 -7
- lightning_sdk/mmt/mmt.py +11 -6
- lightning_sdk/mmt/v1.py +5 -2
- lightning_sdk/mmt/v2.py +5 -2
- lightning_sdk/organization.py +10 -1
- lightning_sdk/owner.py +4 -0
- lightning_sdk/plugin.py +2 -2
- lightning_sdk/studio.py +47 -6
- lightning_sdk/user.py +22 -2
- lightning_sdk/utils/logging.py +2 -1
- lightning_sdk/utils/resolve.py +9 -7
- {lightning_sdk-2025.12.16.dist-info → lightning_sdk-2026.1.22.dist-info}/METADATA +1 -5
- {lightning_sdk-2025.12.16.dist-info → lightning_sdk-2026.1.22.dist-info}/RECORD +139 -94
- {lightning_sdk-2025.12.16.dist-info → lightning_sdk-2026.1.22.dist-info}/WHEEL +1 -1
- lightning_sdk/lightning_cloud/cli/__main__.py +0 -29
- lightning_sdk/lightning_cloud/source_code/logs_socket_api.py +0 -103
- /lightning_sdk/lightning_cloud/openapi/models/{v1_list_filesystem_mm_ts_response.py → v1_list_filesystem_mmts_response.py} +0 -0
- {lightning_sdk-2025.12.16.dist-info → lightning_sdk-2026.1.22.dist-info}/LICENSE +0 -0
- {lightning_sdk-2025.12.16.dist-info → lightning_sdk-2026.1.22.dist-info}/entry_points.txt +0 -0
- {lightning_sdk-2025.12.16.dist-info → lightning_sdk-2026.1.22.dist-info}/top_level.txt +0 -0
|
@@ -42,15 +42,14 @@ class V1Machine(object):
|
|
|
42
42
|
"""
|
|
43
43
|
swagger_types = {
|
|
44
44
|
'address': 'str',
|
|
45
|
-
'cloud_space_name': 'str',
|
|
46
45
|
'cluster_id': 'str',
|
|
47
46
|
'created_at': 'datetime',
|
|
48
|
-
'display_name': 'str',
|
|
49
47
|
'id': 'str',
|
|
50
48
|
'instance_type': 'str',
|
|
51
49
|
'management_api_url': 'str',
|
|
52
50
|
'name': 'str',
|
|
53
51
|
'org_id': 'str',
|
|
52
|
+
'private_address': 'str',
|
|
54
53
|
'project_id': 'str',
|
|
55
54
|
'provider': 'str',
|
|
56
55
|
'provider_instance_id': 'str',
|
|
@@ -60,6 +59,7 @@ class V1Machine(object):
|
|
|
60
59
|
'resource_id': 'str',
|
|
61
60
|
'resource_type': 'str',
|
|
62
61
|
'resources': 'V1Resources',
|
|
62
|
+
'ssh_username': 'str',
|
|
63
63
|
'status': 'str',
|
|
64
64
|
'unschedulable': 'bool',
|
|
65
65
|
'updated_at': 'datetime',
|
|
@@ -68,15 +68,14 @@ class V1Machine(object):
|
|
|
68
68
|
|
|
69
69
|
attribute_map = {
|
|
70
70
|
'address': 'address',
|
|
71
|
-
'cloud_space_name': 'cloudSpaceName',
|
|
72
71
|
'cluster_id': 'clusterId',
|
|
73
72
|
'created_at': 'createdAt',
|
|
74
|
-
'display_name': 'displayName',
|
|
75
73
|
'id': 'id',
|
|
76
74
|
'instance_type': 'instanceType',
|
|
77
75
|
'management_api_url': 'managementApiUrl',
|
|
78
76
|
'name': 'name',
|
|
79
77
|
'org_id': 'orgId',
|
|
78
|
+
'private_address': 'privateAddress',
|
|
80
79
|
'project_id': 'projectId',
|
|
81
80
|
'provider': 'provider',
|
|
82
81
|
'provider_instance_id': 'providerInstanceId',
|
|
@@ -86,24 +85,24 @@ class V1Machine(object):
|
|
|
86
85
|
'resource_id': 'resourceId',
|
|
87
86
|
'resource_type': 'resourceType',
|
|
88
87
|
'resources': 'resources',
|
|
88
|
+
'ssh_username': 'sshUsername',
|
|
89
89
|
'status': 'status',
|
|
90
90
|
'unschedulable': 'unschedulable',
|
|
91
91
|
'updated_at': 'updatedAt',
|
|
92
92
|
'warning_message': 'warningMessage'
|
|
93
93
|
}
|
|
94
94
|
|
|
95
|
-
def __init__(self, address: 'str' =None,
|
|
95
|
+
def __init__(self, address: 'str' =None, cluster_id: 'str' =None, created_at: 'datetime' =None, id: 'str' =None, instance_type: 'str' =None, management_api_url: 'str' =None, name: 'str' =None, org_id: 'str' =None, private_address: 'str' =None, project_id: 'str' =None, provider: 'str' =None, provider_instance_id: 'str' =None, provider_region: 'str' =None, provisioning_method: 'str' =None, ready_at: 'datetime' =None, resource_id: 'str' =None, resource_type: 'str' =None, resources: 'V1Resources' =None, ssh_username: 'str' =None, status: 'str' =None, unschedulable: 'bool' =None, updated_at: 'datetime' =None, warning_message: 'str' =None): # noqa: E501
|
|
96
96
|
"""V1Machine - a model defined in Swagger""" # noqa: E501
|
|
97
97
|
self._address = None
|
|
98
|
-
self._cloud_space_name = None
|
|
99
98
|
self._cluster_id = None
|
|
100
99
|
self._created_at = None
|
|
101
|
-
self._display_name = None
|
|
102
100
|
self._id = None
|
|
103
101
|
self._instance_type = None
|
|
104
102
|
self._management_api_url = None
|
|
105
103
|
self._name = None
|
|
106
104
|
self._org_id = None
|
|
105
|
+
self._private_address = None
|
|
107
106
|
self._project_id = None
|
|
108
107
|
self._provider = None
|
|
109
108
|
self._provider_instance_id = None
|
|
@@ -113,6 +112,7 @@ class V1Machine(object):
|
|
|
113
112
|
self._resource_id = None
|
|
114
113
|
self._resource_type = None
|
|
115
114
|
self._resources = None
|
|
115
|
+
self._ssh_username = None
|
|
116
116
|
self._status = None
|
|
117
117
|
self._unschedulable = None
|
|
118
118
|
self._updated_at = None
|
|
@@ -120,14 +120,10 @@ class V1Machine(object):
|
|
|
120
120
|
self.discriminator = None
|
|
121
121
|
if address is not None:
|
|
122
122
|
self.address = address
|
|
123
|
-
if cloud_space_name is not None:
|
|
124
|
-
self.cloud_space_name = cloud_space_name
|
|
125
123
|
if cluster_id is not None:
|
|
126
124
|
self.cluster_id = cluster_id
|
|
127
125
|
if created_at is not None:
|
|
128
126
|
self.created_at = created_at
|
|
129
|
-
if display_name is not None:
|
|
130
|
-
self.display_name = display_name
|
|
131
127
|
if id is not None:
|
|
132
128
|
self.id = id
|
|
133
129
|
if instance_type is not None:
|
|
@@ -138,6 +134,8 @@ class V1Machine(object):
|
|
|
138
134
|
self.name = name
|
|
139
135
|
if org_id is not None:
|
|
140
136
|
self.org_id = org_id
|
|
137
|
+
if private_address is not None:
|
|
138
|
+
self.private_address = private_address
|
|
141
139
|
if project_id is not None:
|
|
142
140
|
self.project_id = project_id
|
|
143
141
|
if provider is not None:
|
|
@@ -156,6 +154,8 @@ class V1Machine(object):
|
|
|
156
154
|
self.resource_type = resource_type
|
|
157
155
|
if resources is not None:
|
|
158
156
|
self.resources = resources
|
|
157
|
+
if ssh_username is not None:
|
|
158
|
+
self.ssh_username = ssh_username
|
|
159
159
|
if status is not None:
|
|
160
160
|
self.status = status
|
|
161
161
|
if unschedulable is not None:
|
|
@@ -186,27 +186,6 @@ class V1Machine(object):
|
|
|
186
186
|
|
|
187
187
|
self._address = address
|
|
188
188
|
|
|
189
|
-
@property
|
|
190
|
-
def cloud_space_name(self) -> 'str':
|
|
191
|
-
"""Gets the cloud_space_name of this V1Machine. # noqa: E501
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
:return: The cloud_space_name of this V1Machine. # noqa: E501
|
|
195
|
-
:rtype: str
|
|
196
|
-
"""
|
|
197
|
-
return self._cloud_space_name
|
|
198
|
-
|
|
199
|
-
@cloud_space_name.setter
|
|
200
|
-
def cloud_space_name(self, cloud_space_name: 'str'):
|
|
201
|
-
"""Sets the cloud_space_name of this V1Machine.
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
:param cloud_space_name: The cloud_space_name of this V1Machine. # noqa: E501
|
|
205
|
-
:type: str
|
|
206
|
-
"""
|
|
207
|
-
|
|
208
|
-
self._cloud_space_name = cloud_space_name
|
|
209
|
-
|
|
210
189
|
@property
|
|
211
190
|
def cluster_id(self) -> 'str':
|
|
212
191
|
"""Gets the cluster_id of this V1Machine. # noqa: E501
|
|
@@ -249,27 +228,6 @@ class V1Machine(object):
|
|
|
249
228
|
|
|
250
229
|
self._created_at = created_at
|
|
251
230
|
|
|
252
|
-
@property
|
|
253
|
-
def display_name(self) -> 'str':
|
|
254
|
-
"""Gets the display_name of this V1Machine. # noqa: E501
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
:return: The display_name of this V1Machine. # noqa: E501
|
|
258
|
-
:rtype: str
|
|
259
|
-
"""
|
|
260
|
-
return self._display_name
|
|
261
|
-
|
|
262
|
-
@display_name.setter
|
|
263
|
-
def display_name(self, display_name: 'str'):
|
|
264
|
-
"""Sets the display_name of this V1Machine.
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
:param display_name: The display_name of this V1Machine. # noqa: E501
|
|
268
|
-
:type: str
|
|
269
|
-
"""
|
|
270
|
-
|
|
271
|
-
self._display_name = display_name
|
|
272
|
-
|
|
273
231
|
@property
|
|
274
232
|
def id(self) -> 'str':
|
|
275
233
|
"""Gets the id of this V1Machine. # noqa: E501
|
|
@@ -375,6 +333,27 @@ class V1Machine(object):
|
|
|
375
333
|
|
|
376
334
|
self._org_id = org_id
|
|
377
335
|
|
|
336
|
+
@property
|
|
337
|
+
def private_address(self) -> 'str':
|
|
338
|
+
"""Gets the private_address of this V1Machine. # noqa: E501
|
|
339
|
+
|
|
340
|
+
|
|
341
|
+
:return: The private_address of this V1Machine. # noqa: E501
|
|
342
|
+
:rtype: str
|
|
343
|
+
"""
|
|
344
|
+
return self._private_address
|
|
345
|
+
|
|
346
|
+
@private_address.setter
|
|
347
|
+
def private_address(self, private_address: 'str'):
|
|
348
|
+
"""Sets the private_address of this V1Machine.
|
|
349
|
+
|
|
350
|
+
|
|
351
|
+
:param private_address: The private_address of this V1Machine. # noqa: E501
|
|
352
|
+
:type: str
|
|
353
|
+
"""
|
|
354
|
+
|
|
355
|
+
self._private_address = private_address
|
|
356
|
+
|
|
378
357
|
@property
|
|
379
358
|
def project_id(self) -> 'str':
|
|
380
359
|
"""Gets the project_id of this V1Machine. # noqa: E501
|
|
@@ -564,6 +543,27 @@ class V1Machine(object):
|
|
|
564
543
|
|
|
565
544
|
self._resources = resources
|
|
566
545
|
|
|
546
|
+
@property
|
|
547
|
+
def ssh_username(self) -> 'str':
|
|
548
|
+
"""Gets the ssh_username of this V1Machine. # noqa: E501
|
|
549
|
+
|
|
550
|
+
|
|
551
|
+
:return: The ssh_username of this V1Machine. # noqa: E501
|
|
552
|
+
:rtype: str
|
|
553
|
+
"""
|
|
554
|
+
return self._ssh_username
|
|
555
|
+
|
|
556
|
+
@ssh_username.setter
|
|
557
|
+
def ssh_username(self, ssh_username: 'str'):
|
|
558
|
+
"""Sets the ssh_username of this V1Machine.
|
|
559
|
+
|
|
560
|
+
|
|
561
|
+
:param ssh_username: The ssh_username of this V1Machine. # noqa: E501
|
|
562
|
+
:type: str
|
|
563
|
+
"""
|
|
564
|
+
|
|
565
|
+
self._ssh_username = ssh_username
|
|
566
|
+
|
|
567
567
|
@property
|
|
568
568
|
def status(self) -> 'str':
|
|
569
569
|
"""Gets the status of this V1Machine. # noqa: E501
|
|
@@ -41,34 +41,96 @@ class V1MachineDirectV1(object):
|
|
|
41
41
|
and the value is json key in definition.
|
|
42
42
|
"""
|
|
43
43
|
swagger_types = {
|
|
44
|
+
'cloud_hypervisor_user': 'str',
|
|
45
|
+
'extra_setup_commands': 'list[str]',
|
|
44
46
|
'primary_region': 'str',
|
|
45
47
|
'regions': 'list[str]',
|
|
46
48
|
'setup_infiniband': 'bool',
|
|
47
|
-
'
|
|
49
|
+
'storage_overcommit_factor': 'float',
|
|
50
|
+
'tailscale_auth_key_secret_id': 'str',
|
|
51
|
+
'use_nvme_disks': 'bool'
|
|
48
52
|
}
|
|
49
53
|
|
|
50
54
|
attribute_map = {
|
|
55
|
+
'cloud_hypervisor_user': 'cloudHypervisorUser',
|
|
56
|
+
'extra_setup_commands': 'extraSetupCommands',
|
|
51
57
|
'primary_region': 'primaryRegion',
|
|
52
58
|
'regions': 'regions',
|
|
53
59
|
'setup_infiniband': 'setupInfiniband',
|
|
54
|
-
'
|
|
60
|
+
'storage_overcommit_factor': 'storageOvercommitFactor',
|
|
61
|
+
'tailscale_auth_key_secret_id': 'tailscaleAuthKeySecretId',
|
|
62
|
+
'use_nvme_disks': 'useNvmeDisks'
|
|
55
63
|
}
|
|
56
64
|
|
|
57
|
-
def __init__(self, primary_region: 'str' =None, regions: 'list[str]' =None, setup_infiniband: 'bool' =None, tailscale_auth_key_secret_id: 'str' =None): # noqa: E501
|
|
65
|
+
def __init__(self, cloud_hypervisor_user: 'str' =None, extra_setup_commands: 'list[str]' =None, primary_region: 'str' =None, regions: 'list[str]' =None, setup_infiniband: 'bool' =None, storage_overcommit_factor: 'float' =None, tailscale_auth_key_secret_id: 'str' =None, use_nvme_disks: 'bool' =None): # noqa: E501
|
|
58
66
|
"""V1MachineDirectV1 - a model defined in Swagger""" # noqa: E501
|
|
67
|
+
self._cloud_hypervisor_user = None
|
|
68
|
+
self._extra_setup_commands = None
|
|
59
69
|
self._primary_region = None
|
|
60
70
|
self._regions = None
|
|
61
71
|
self._setup_infiniband = None
|
|
72
|
+
self._storage_overcommit_factor = None
|
|
62
73
|
self._tailscale_auth_key_secret_id = None
|
|
74
|
+
self._use_nvme_disks = None
|
|
63
75
|
self.discriminator = None
|
|
76
|
+
if cloud_hypervisor_user is not None:
|
|
77
|
+
self.cloud_hypervisor_user = cloud_hypervisor_user
|
|
78
|
+
if extra_setup_commands is not None:
|
|
79
|
+
self.extra_setup_commands = extra_setup_commands
|
|
64
80
|
if primary_region is not None:
|
|
65
81
|
self.primary_region = primary_region
|
|
66
82
|
if regions is not None:
|
|
67
83
|
self.regions = regions
|
|
68
84
|
if setup_infiniband is not None:
|
|
69
85
|
self.setup_infiniband = setup_infiniband
|
|
86
|
+
if storage_overcommit_factor is not None:
|
|
87
|
+
self.storage_overcommit_factor = storage_overcommit_factor
|
|
70
88
|
if tailscale_auth_key_secret_id is not None:
|
|
71
89
|
self.tailscale_auth_key_secret_id = tailscale_auth_key_secret_id
|
|
90
|
+
if use_nvme_disks is not None:
|
|
91
|
+
self.use_nvme_disks = use_nvme_disks
|
|
92
|
+
|
|
93
|
+
@property
|
|
94
|
+
def cloud_hypervisor_user(self) -> 'str':
|
|
95
|
+
"""Gets the cloud_hypervisor_user of this V1MachineDirectV1. # noqa: E501
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
:return: The cloud_hypervisor_user of this V1MachineDirectV1. # noqa: E501
|
|
99
|
+
:rtype: str
|
|
100
|
+
"""
|
|
101
|
+
return self._cloud_hypervisor_user
|
|
102
|
+
|
|
103
|
+
@cloud_hypervisor_user.setter
|
|
104
|
+
def cloud_hypervisor_user(self, cloud_hypervisor_user: 'str'):
|
|
105
|
+
"""Sets the cloud_hypervisor_user of this V1MachineDirectV1.
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
:param cloud_hypervisor_user: The cloud_hypervisor_user of this V1MachineDirectV1. # noqa: E501
|
|
109
|
+
:type: str
|
|
110
|
+
"""
|
|
111
|
+
|
|
112
|
+
self._cloud_hypervisor_user = cloud_hypervisor_user
|
|
113
|
+
|
|
114
|
+
@property
|
|
115
|
+
def extra_setup_commands(self) -> 'list[str]':
|
|
116
|
+
"""Gets the extra_setup_commands of this V1MachineDirectV1. # noqa: E501
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
:return: The extra_setup_commands of this V1MachineDirectV1. # noqa: E501
|
|
120
|
+
:rtype: list[str]
|
|
121
|
+
"""
|
|
122
|
+
return self._extra_setup_commands
|
|
123
|
+
|
|
124
|
+
@extra_setup_commands.setter
|
|
125
|
+
def extra_setup_commands(self, extra_setup_commands: 'list[str]'):
|
|
126
|
+
"""Sets the extra_setup_commands of this V1MachineDirectV1.
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
:param extra_setup_commands: The extra_setup_commands of this V1MachineDirectV1. # noqa: E501
|
|
130
|
+
:type: list[str]
|
|
131
|
+
"""
|
|
132
|
+
|
|
133
|
+
self._extra_setup_commands = extra_setup_commands
|
|
72
134
|
|
|
73
135
|
@property
|
|
74
136
|
def primary_region(self) -> 'str':
|
|
@@ -133,6 +195,27 @@ class V1MachineDirectV1(object):
|
|
|
133
195
|
|
|
134
196
|
self._setup_infiniband = setup_infiniband
|
|
135
197
|
|
|
198
|
+
@property
|
|
199
|
+
def storage_overcommit_factor(self) -> 'float':
|
|
200
|
+
"""Gets the storage_overcommit_factor of this V1MachineDirectV1. # noqa: E501
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
:return: The storage_overcommit_factor of this V1MachineDirectV1. # noqa: E501
|
|
204
|
+
:rtype: float
|
|
205
|
+
"""
|
|
206
|
+
return self._storage_overcommit_factor
|
|
207
|
+
|
|
208
|
+
@storage_overcommit_factor.setter
|
|
209
|
+
def storage_overcommit_factor(self, storage_overcommit_factor: 'float'):
|
|
210
|
+
"""Sets the storage_overcommit_factor of this V1MachineDirectV1.
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
:param storage_overcommit_factor: The storage_overcommit_factor of this V1MachineDirectV1. # noqa: E501
|
|
214
|
+
:type: float
|
|
215
|
+
"""
|
|
216
|
+
|
|
217
|
+
self._storage_overcommit_factor = storage_overcommit_factor
|
|
218
|
+
|
|
136
219
|
@property
|
|
137
220
|
def tailscale_auth_key_secret_id(self) -> 'str':
|
|
138
221
|
"""Gets the tailscale_auth_key_secret_id of this V1MachineDirectV1. # noqa: E501
|
|
@@ -154,6 +237,27 @@ class V1MachineDirectV1(object):
|
|
|
154
237
|
|
|
155
238
|
self._tailscale_auth_key_secret_id = tailscale_auth_key_secret_id
|
|
156
239
|
|
|
240
|
+
@property
|
|
241
|
+
def use_nvme_disks(self) -> 'bool':
|
|
242
|
+
"""Gets the use_nvme_disks of this V1MachineDirectV1. # noqa: E501
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
:return: The use_nvme_disks of this V1MachineDirectV1. # noqa: E501
|
|
246
|
+
:rtype: bool
|
|
247
|
+
"""
|
|
248
|
+
return self._use_nvme_disks
|
|
249
|
+
|
|
250
|
+
@use_nvme_disks.setter
|
|
251
|
+
def use_nvme_disks(self, use_nvme_disks: 'bool'):
|
|
252
|
+
"""Sets the use_nvme_disks of this V1MachineDirectV1.
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
:param use_nvme_disks: The use_nvme_disks of this V1MachineDirectV1. # noqa: E501
|
|
256
|
+
:type: bool
|
|
257
|
+
"""
|
|
258
|
+
|
|
259
|
+
self._use_nvme_disks = use_nvme_disks
|
|
260
|
+
|
|
157
261
|
def to_dict(self) -> dict:
|
|
158
262
|
"""Returns the model properties as a dict"""
|
|
159
263
|
result = {}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
external/v1/auth_service.proto
|
|
5
|
+
|
|
6
|
+
No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) # noqa: E501
|
|
7
|
+
|
|
8
|
+
OpenAPI spec version: version not set
|
|
9
|
+
|
|
10
|
+
Generated by: https://github.com/swagger-api/swagger-codegen.git
|
|
11
|
+
|
|
12
|
+
NOTE
|
|
13
|
+
----
|
|
14
|
+
standard swagger-codegen-cli for this python client has been modified
|
|
15
|
+
by custom templates. The purpose of these templates is to include
|
|
16
|
+
typing information in the API and Model code. Please refer to the
|
|
17
|
+
main grid repository for more info
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
import pprint
|
|
21
|
+
import re # noqa: F401
|
|
22
|
+
|
|
23
|
+
from typing import TYPE_CHECKING
|
|
24
|
+
|
|
25
|
+
import six
|
|
26
|
+
|
|
27
|
+
if TYPE_CHECKING:
|
|
28
|
+
from datetime import datetime
|
|
29
|
+
from lightning_sdk.lightning_cloud.openapi.models import *
|
|
30
|
+
|
|
31
|
+
class V1MediaType(object):
|
|
32
|
+
"""NOTE: This class is auto generated by the swagger code generator program.
|
|
33
|
+
|
|
34
|
+
Do not edit the class manually.
|
|
35
|
+
"""
|
|
36
|
+
|
|
37
|
+
"""
|
|
38
|
+
allowed enum values
|
|
39
|
+
"""
|
|
40
|
+
UNSPECIFIED = "MEDIA_TYPE_UNSPECIFIED"
|
|
41
|
+
IMAGE = "MEDIA_TYPE_IMAGE"
|
|
42
|
+
TEXT = "MEDIA_TYPE_TEXT"
|
|
43
|
+
"""
|
|
44
|
+
Attributes:
|
|
45
|
+
swagger_types (dict): The key is attribute name
|
|
46
|
+
and the value is attribute type.
|
|
47
|
+
attribute_map (dict): The key is attribute name
|
|
48
|
+
and the value is json key in definition.
|
|
49
|
+
"""
|
|
50
|
+
swagger_types = {
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
attribute_map = {
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
def __init__(self): # noqa: E501
|
|
57
|
+
"""V1MediaType - a model defined in Swagger""" # noqa: E501
|
|
58
|
+
self.discriminator = None
|
|
59
|
+
|
|
60
|
+
def to_dict(self) -> dict:
|
|
61
|
+
"""Returns the model properties as a dict"""
|
|
62
|
+
result = {}
|
|
63
|
+
|
|
64
|
+
for attr, _ in six.iteritems(self.swagger_types):
|
|
65
|
+
value = getattr(self, attr)
|
|
66
|
+
if isinstance(value, list):
|
|
67
|
+
result[attr] = list(map(
|
|
68
|
+
lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
|
|
69
|
+
value
|
|
70
|
+
))
|
|
71
|
+
elif hasattr(value, "to_dict"):
|
|
72
|
+
result[attr] = value.to_dict()
|
|
73
|
+
elif isinstance(value, dict):
|
|
74
|
+
result[attr] = dict(map(
|
|
75
|
+
lambda item: (item[0], item[1].to_dict())
|
|
76
|
+
if hasattr(item[1], "to_dict") else item,
|
|
77
|
+
value.items()
|
|
78
|
+
))
|
|
79
|
+
else:
|
|
80
|
+
result[attr] = value
|
|
81
|
+
if issubclass(V1MediaType, dict):
|
|
82
|
+
for key, value in self.items():
|
|
83
|
+
result[key] = value
|
|
84
|
+
|
|
85
|
+
return result
|
|
86
|
+
|
|
87
|
+
def to_str(self) -> str:
|
|
88
|
+
"""Returns the string representation of the model"""
|
|
89
|
+
return pprint.pformat(self.to_dict())
|
|
90
|
+
|
|
91
|
+
def __repr__(self) -> str:
|
|
92
|
+
"""For `print` and `pprint`"""
|
|
93
|
+
return self.to_str()
|
|
94
|
+
|
|
95
|
+
def __eq__(self, other: 'V1MediaType') -> bool:
|
|
96
|
+
"""Returns true if both objects are equal"""
|
|
97
|
+
if not isinstance(other, V1MediaType):
|
|
98
|
+
return False
|
|
99
|
+
|
|
100
|
+
return self.__dict__ == other.__dict__
|
|
101
|
+
|
|
102
|
+
def __ne__(self, other: 'V1MediaType') -> bool:
|
|
103
|
+
"""Returns true if both objects are not equal"""
|
|
104
|
+
return not self == other
|
|
@@ -43,20 +43,23 @@ class V1NebiusDirectV1(object):
|
|
|
43
43
|
swagger_types = {
|
|
44
44
|
'primary_region': 'str',
|
|
45
45
|
'regions': 'list[str]',
|
|
46
|
-
'subnet_cidr_ranges': 'list[str]'
|
|
46
|
+
'subnet_cidr_ranges': 'list[str]',
|
|
47
|
+
'tenant_credentials': 'list[V1TenantCredentials]'
|
|
47
48
|
}
|
|
48
49
|
|
|
49
50
|
attribute_map = {
|
|
50
51
|
'primary_region': 'primaryRegion',
|
|
51
52
|
'regions': 'regions',
|
|
52
|
-
'subnet_cidr_ranges': 'subnetCidrRanges'
|
|
53
|
+
'subnet_cidr_ranges': 'subnetCidrRanges',
|
|
54
|
+
'tenant_credentials': 'tenantCredentials'
|
|
53
55
|
}
|
|
54
56
|
|
|
55
|
-
def __init__(self, primary_region: 'str' =None, regions: 'list[str]' =None, subnet_cidr_ranges: 'list[str]' =None): # noqa: E501
|
|
57
|
+
def __init__(self, primary_region: 'str' =None, regions: 'list[str]' =None, subnet_cidr_ranges: 'list[str]' =None, tenant_credentials: 'list[V1TenantCredentials]' =None): # noqa: E501
|
|
56
58
|
"""V1NebiusDirectV1 - a model defined in Swagger""" # noqa: E501
|
|
57
59
|
self._primary_region = None
|
|
58
60
|
self._regions = None
|
|
59
61
|
self._subnet_cidr_ranges = None
|
|
62
|
+
self._tenant_credentials = None
|
|
60
63
|
self.discriminator = None
|
|
61
64
|
if primary_region is not None:
|
|
62
65
|
self.primary_region = primary_region
|
|
@@ -64,6 +67,8 @@ class V1NebiusDirectV1(object):
|
|
|
64
67
|
self.regions = regions
|
|
65
68
|
if subnet_cidr_ranges is not None:
|
|
66
69
|
self.subnet_cidr_ranges = subnet_cidr_ranges
|
|
70
|
+
if tenant_credentials is not None:
|
|
71
|
+
self.tenant_credentials = tenant_credentials
|
|
67
72
|
|
|
68
73
|
@property
|
|
69
74
|
def primary_region(self) -> 'str':
|
|
@@ -128,6 +133,27 @@ class V1NebiusDirectV1(object):
|
|
|
128
133
|
|
|
129
134
|
self._subnet_cidr_ranges = subnet_cidr_ranges
|
|
130
135
|
|
|
136
|
+
@property
|
|
137
|
+
def tenant_credentials(self) -> 'list[V1TenantCredentials]':
|
|
138
|
+
"""Gets the tenant_credentials of this V1NebiusDirectV1. # noqa: E501
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
:return: The tenant_credentials of this V1NebiusDirectV1. # noqa: E501
|
|
142
|
+
:rtype: list[V1TenantCredentials]
|
|
143
|
+
"""
|
|
144
|
+
return self._tenant_credentials
|
|
145
|
+
|
|
146
|
+
@tenant_credentials.setter
|
|
147
|
+
def tenant_credentials(self, tenant_credentials: 'list[V1TenantCredentials]'):
|
|
148
|
+
"""Sets the tenant_credentials of this V1NebiusDirectV1.
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
:param tenant_credentials: The tenant_credentials of this V1NebiusDirectV1. # noqa: E501
|
|
152
|
+
:type: list[V1TenantCredentials]
|
|
153
|
+
"""
|
|
154
|
+
|
|
155
|
+
self._tenant_credentials = tenant_credentials
|
|
156
|
+
|
|
131
157
|
def to_dict(self) -> dict:
|
|
132
158
|
"""Returns the model properties as a dict"""
|
|
133
159
|
result = {}
|
|
@@ -44,6 +44,7 @@ class V1NodeMetrics(object):
|
|
|
44
44
|
'cpu_capacity_cores': 'float',
|
|
45
45
|
'cpu_util': 'float',
|
|
46
46
|
'filesystem': 'dict(str, V1FilesystemMetrics)',
|
|
47
|
+
'kubelet_failure': 'bool',
|
|
47
48
|
'max_gpu_temp_recorded': 'float',
|
|
48
49
|
'max_power_per_gpu': 'float',
|
|
49
50
|
'mem_total': 'str',
|
|
@@ -70,6 +71,7 @@ class V1NodeMetrics(object):
|
|
|
70
71
|
'cpu_capacity_cores': 'cpuCapacityCores',
|
|
71
72
|
'cpu_util': 'cpuUtil',
|
|
72
73
|
'filesystem': 'filesystem',
|
|
74
|
+
'kubelet_failure': 'kubeletFailure',
|
|
73
75
|
'max_gpu_temp_recorded': 'maxGpuTempRecorded',
|
|
74
76
|
'max_power_per_gpu': 'maxPowerPerGpu',
|
|
75
77
|
'mem_total': 'memTotal',
|
|
@@ -92,11 +94,12 @@ class V1NodeMetrics(object):
|
|
|
92
94
|
'unschedulable': 'unschedulable'
|
|
93
95
|
}
|
|
94
96
|
|
|
95
|
-
def __init__(self, cpu_capacity_cores: 'float' =None, cpu_util: 'float' =None, filesystem: 'dict(str, V1FilesystemMetrics)' =None, max_gpu_temp_recorded: 'float' =None, max_power_per_gpu: 'float' =None, mem_total: 'str' =None, mem_util: 'float' =None, node_name: 'str' =None, num_unschedulable_gpus: 'int' =None, nvlink_rx_gib: 'dict(str, float)' =None, nvlink_tx_gib: 'dict(str, float)' =None, pcie_rx_gib: 'dict(str, float)' =None, pcie_tx_gib: 'dict(str, float)' =None, per_gpu_errors: 'dict(str, int)' =None, per_gpu_mem_free: 'dict(str, int)' =None, per_gpu_mem_used: 'dict(str, int)' =None, per_gpu_power_usage_watts: 'dict(str, int)' =None, per_gpu_sm_active: 'dict(str, float)' =None, per_gpu_sm_occupancy: 'dict(str, float)' =None, per_gpu_temperature_c: 'dict(str, int)' =None, per_gpu_util: 'dict(str, float)' =None, timestamp: 'datetime' =None, unschedulable: 'bool' =None): # noqa: E501
|
|
97
|
+
def __init__(self, cpu_capacity_cores: 'float' =None, cpu_util: 'float' =None, filesystem: 'dict(str, V1FilesystemMetrics)' =None, kubelet_failure: 'bool' =None, max_gpu_temp_recorded: 'float' =None, max_power_per_gpu: 'float' =None, mem_total: 'str' =None, mem_util: 'float' =None, node_name: 'str' =None, num_unschedulable_gpus: 'int' =None, nvlink_rx_gib: 'dict(str, float)' =None, nvlink_tx_gib: 'dict(str, float)' =None, pcie_rx_gib: 'dict(str, float)' =None, pcie_tx_gib: 'dict(str, float)' =None, per_gpu_errors: 'dict(str, int)' =None, per_gpu_mem_free: 'dict(str, int)' =None, per_gpu_mem_used: 'dict(str, int)' =None, per_gpu_power_usage_watts: 'dict(str, int)' =None, per_gpu_sm_active: 'dict(str, float)' =None, per_gpu_sm_occupancy: 'dict(str, float)' =None, per_gpu_temperature_c: 'dict(str, int)' =None, per_gpu_util: 'dict(str, float)' =None, timestamp: 'datetime' =None, unschedulable: 'bool' =None): # noqa: E501
|
|
96
98
|
"""V1NodeMetrics - a model defined in Swagger""" # noqa: E501
|
|
97
99
|
self._cpu_capacity_cores = None
|
|
98
100
|
self._cpu_util = None
|
|
99
101
|
self._filesystem = None
|
|
102
|
+
self._kubelet_failure = None
|
|
100
103
|
self._max_gpu_temp_recorded = None
|
|
101
104
|
self._max_power_per_gpu = None
|
|
102
105
|
self._mem_total = None
|
|
@@ -124,6 +127,8 @@ class V1NodeMetrics(object):
|
|
|
124
127
|
self.cpu_util = cpu_util
|
|
125
128
|
if filesystem is not None:
|
|
126
129
|
self.filesystem = filesystem
|
|
130
|
+
if kubelet_failure is not None:
|
|
131
|
+
self.kubelet_failure = kubelet_failure
|
|
127
132
|
if max_gpu_temp_recorded is not None:
|
|
128
133
|
self.max_gpu_temp_recorded = max_gpu_temp_recorded
|
|
129
134
|
if max_power_per_gpu is not None:
|
|
@@ -228,6 +233,27 @@ class V1NodeMetrics(object):
|
|
|
228
233
|
|
|
229
234
|
self._filesystem = filesystem
|
|
230
235
|
|
|
236
|
+
@property
|
|
237
|
+
def kubelet_failure(self) -> 'bool':
|
|
238
|
+
"""Gets the kubelet_failure of this V1NodeMetrics. # noqa: E501
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
:return: The kubelet_failure of this V1NodeMetrics. # noqa: E501
|
|
242
|
+
:rtype: bool
|
|
243
|
+
"""
|
|
244
|
+
return self._kubelet_failure
|
|
245
|
+
|
|
246
|
+
@kubelet_failure.setter
|
|
247
|
+
def kubelet_failure(self, kubelet_failure: 'bool'):
|
|
248
|
+
"""Sets the kubelet_failure of this V1NodeMetrics.
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
:param kubelet_failure: The kubelet_failure of this V1NodeMetrics. # noqa: E501
|
|
252
|
+
:type: bool
|
|
253
|
+
"""
|
|
254
|
+
|
|
255
|
+
self._kubelet_failure = kubelet_failure
|
|
256
|
+
|
|
231
257
|
@property
|
|
232
258
|
def max_gpu_temp_recorded(self) -> 'float':
|
|
233
259
|
"""Gets the max_gpu_temp_recorded of this V1NodeMetrics. # noqa: E501
|