lightning-sdk 0.1.40__py3-none-any.whl → 0.1.42__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.
Files changed (82) hide show
  1. lightning_sdk/__init__.py +1 -1
  2. lightning_sdk/ai_hub.py +8 -3
  3. lightning_sdk/api/ai_hub_api.py +3 -3
  4. lightning_sdk/api/deployment_api.py +6 -6
  5. lightning_sdk/api/job_api.py +32 -6
  6. lightning_sdk/api/mmt_api.py +60 -19
  7. lightning_sdk/api/studio_api.py +37 -19
  8. lightning_sdk/api/teamspace_api.py +34 -29
  9. lightning_sdk/api/utils.py +48 -35
  10. lightning_sdk/cli/ai_hub.py +3 -3
  11. lightning_sdk/cli/entrypoint.py +3 -1
  12. lightning_sdk/cli/mmt.py +11 -10
  13. lightning_sdk/cli/run.py +9 -8
  14. lightning_sdk/cli/serve.py +130 -0
  15. lightning_sdk/deployment/deployment.py +18 -12
  16. lightning_sdk/job/base.py +118 -24
  17. lightning_sdk/job/job.py +87 -9
  18. lightning_sdk/job/v1.py +75 -18
  19. lightning_sdk/job/v2.py +51 -15
  20. lightning_sdk/job/work.py +36 -7
  21. lightning_sdk/lightning_cloud/openapi/__init__.py +13 -0
  22. lightning_sdk/lightning_cloud/openapi/api/jobs_service_api.py +215 -5
  23. lightning_sdk/lightning_cloud/openapi/api/lit_logger_service_api.py +218 -0
  24. lightning_sdk/lightning_cloud/openapi/api/models_store_api.py +226 -0
  25. lightning_sdk/lightning_cloud/openapi/api/secret_service_api.py +5 -1
  26. lightning_sdk/lightning_cloud/openapi/api/snowflake_service_api.py +21 -1
  27. lightning_sdk/lightning_cloud/openapi/models/__init__.py +13 -0
  28. lightning_sdk/lightning_cloud/openapi/models/create_deployment_request_defines_a_spec_for_the_job_that_allows_for_autoscaling_jobs.py +27 -1
  29. lightning_sdk/lightning_cloud/openapi/models/deploymenttemplates_id_body.py +27 -1
  30. lightning_sdk/lightning_cloud/openapi/models/id_visibility_body.py +123 -0
  31. lightning_sdk/lightning_cloud/openapi/models/model_id_versions_body.py +29 -3
  32. lightning_sdk/lightning_cloud/openapi/models/project_id_multimachinejobs_body.py +27 -1
  33. lightning_sdk/lightning_cloud/openapi/models/project_id_snowflake_body.py +15 -67
  34. lightning_sdk/lightning_cloud/openapi/models/query_query_id_body.py +17 -69
  35. lightning_sdk/lightning_cloud/openapi/models/snowflake_export_body.py +29 -81
  36. lightning_sdk/lightning_cloud/openapi/models/snowflake_query_body.py +17 -69
  37. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_api.py +27 -1
  38. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_spec.py +27 -1
  39. lightning_sdk/lightning_cloud/openapi/models/v1_get_model_file_url_response.py +27 -1
  40. lightning_sdk/lightning_cloud/openapi/models/v1_get_model_files_response.py +17 -17
  41. lightning_sdk/lightning_cloud/openapi/models/v1_get_model_files_url_response.py +149 -0
  42. lightning_sdk/lightning_cloud/openapi/models/v1_get_project_balance_response.py +27 -1
  43. lightning_sdk/lightning_cloud/openapi/models/v1_header.py +175 -0
  44. lightning_sdk/lightning_cloud/openapi/models/v1_job_spec.py +27 -1
  45. lightning_sdk/lightning_cloud/openapi/models/v1_list_multi_machine_job_events_response.py +123 -0
  46. lightning_sdk/lightning_cloud/openapi/models/v1_managed_model.py +29 -3
  47. lightning_sdk/lightning_cloud/openapi/models/v1_metrics_stream.py +27 -1
  48. lightning_sdk/lightning_cloud/openapi/models/v1_model_file.py +175 -0
  49. lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job.py +27 -1
  50. lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job_event.py +331 -0
  51. lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job_event_type.py +104 -0
  52. lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job_fault_tolerance.py +149 -0
  53. lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job_fault_tolerance_strategy.py +105 -0
  54. lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job_status.py +27 -1
  55. lightning_sdk/lightning_cloud/openapi/models/v1_rule_resource.py +2 -0
  56. lightning_sdk/lightning_cloud/openapi/models/v1_secret_type.py +1 -0
  57. lightning_sdk/lightning_cloud/openapi/models/v1_snowflake_data_connection.py +29 -81
  58. lightning_sdk/lightning_cloud/openapi/models/v1_system_metrics.py +29 -3
  59. lightning_sdk/lightning_cloud/openapi/models/v1_trainium_system_metrics.py +175 -0
  60. lightning_sdk/lightning_cloud/openapi/models/v1_update_metrics_stream_visibility_response.py +97 -0
  61. lightning_sdk/lightning_cloud/openapi/models/v1_user_features.py +41 -67
  62. lightning_sdk/lightning_cloud/openapi/models/v1_validate_deployment_image_request.py +149 -0
  63. lightning_sdk/lightning_cloud/openapi/models/v1_validate_deployment_image_response.py +97 -0
  64. lightning_sdk/lightning_cloud/rest_client.py +2 -0
  65. lightning_sdk/mmt/__init__.py +3 -0
  66. lightning_sdk/{_mmt → mmt}/base.py +20 -14
  67. lightning_sdk/{_mmt → mmt}/mmt.py +46 -17
  68. lightning_sdk/mmt/v1.py +129 -0
  69. lightning_sdk/{_mmt → mmt}/v2.py +16 -21
  70. lightning_sdk/plugin.py +43 -16
  71. lightning_sdk/services/file_endpoint.py +11 -5
  72. lightning_sdk/studio.py +16 -9
  73. lightning_sdk/teamspace.py +26 -14
  74. lightning_sdk/utils/resolve.py +18 -0
  75. {lightning_sdk-0.1.40.dist-info → lightning_sdk-0.1.42.dist-info}/METADATA +3 -1
  76. {lightning_sdk-0.1.40.dist-info → lightning_sdk-0.1.42.dist-info}/RECORD +80 -66
  77. lightning_sdk/_mmt/__init__.py +0 -3
  78. lightning_sdk/_mmt/v1.py +0 -69
  79. {lightning_sdk-0.1.40.dist-info → lightning_sdk-0.1.42.dist-info}/LICENSE +0 -0
  80. {lightning_sdk-0.1.40.dist-info → lightning_sdk-0.1.42.dist-info}/WHEEL +0 -0
  81. {lightning_sdk-0.1.40.dist-info → lightning_sdk-0.1.42.dist-info}/entry_points.txt +0 -0
  82. {lightning_sdk-0.1.40.dist-info → lightning_sdk-0.1.42.dist-info}/top_level.txt +0 -0
@@ -66,6 +66,7 @@ class V1MetricsStream(object):
66
66
  'user_id': 'str',
67
67
  'version': 'datetime',
68
68
  'version_number': 'int',
69
+ 'visibility': 'V1ResourceVisibility',
69
70
  'work_id': 'str'
70
71
  }
71
72
 
@@ -95,10 +96,11 @@ class V1MetricsStream(object):
95
96
  'user_id': 'userId',
96
97
  'version': 'version',
97
98
  'version_number': 'versionNumber',
99
+ 'visibility': 'visibility',
98
100
  'work_id': 'workId'
99
101
  }
100
102
 
101
- def __init__(self, app_id: 'str' =None, cloudspace_id: 'str' =None, cluster_id: 'str' =None, created_at: 'datetime' =None, dark_color: 'str' =None, id: 'str' =None, job_name: 'str' =None, light_color: 'str' =None, name: 'str' =None, persisted: 'bool' =None, phase: 'V1PhaseType' =None, plugin_id: 'str' =None, project_id: 'str' =None, source_id: 'str' =None, stopped_at: 'datetime' =None, store_created_at: 'bool' =None, store_step: 'bool' =None, system_info: 'V1SystemInfo' =None, tags: 'list[V1MetricsTags]' =None, trackers: 'dict(str, V1MetricsTracker)' =None, updated_at: 'datetime' =None, updates_counter: 'int' =None, user_id: 'str' =None, version: 'datetime' =None, version_number: 'int' =None, work_id: 'str' =None): # noqa: E501
103
+ def __init__(self, app_id: 'str' =None, cloudspace_id: 'str' =None, cluster_id: 'str' =None, created_at: 'datetime' =None, dark_color: 'str' =None, id: 'str' =None, job_name: 'str' =None, light_color: 'str' =None, name: 'str' =None, persisted: 'bool' =None, phase: 'V1PhaseType' =None, plugin_id: 'str' =None, project_id: 'str' =None, source_id: 'str' =None, stopped_at: 'datetime' =None, store_created_at: 'bool' =None, store_step: 'bool' =None, system_info: 'V1SystemInfo' =None, tags: 'list[V1MetricsTags]' =None, trackers: 'dict(str, V1MetricsTracker)' =None, updated_at: 'datetime' =None, updates_counter: 'int' =None, user_id: 'str' =None, version: 'datetime' =None, version_number: 'int' =None, visibility: 'V1ResourceVisibility' =None, work_id: 'str' =None): # noqa: E501
102
104
  """V1MetricsStream - a model defined in Swagger""" # noqa: E501
103
105
  self._app_id = None
104
106
  self._cloudspace_id = None
@@ -125,6 +127,7 @@ class V1MetricsStream(object):
125
127
  self._user_id = None
126
128
  self._version = None
127
129
  self._version_number = None
130
+ self._visibility = None
128
131
  self._work_id = None
129
132
  self.discriminator = None
130
133
  if app_id is not None:
@@ -177,6 +180,8 @@ class V1MetricsStream(object):
177
180
  self.version = version
178
181
  if version_number is not None:
179
182
  self.version_number = version_number
183
+ if visibility is not None:
184
+ self.visibility = visibility
180
185
  if work_id is not None:
181
186
  self.work_id = work_id
182
187
 
@@ -705,6 +710,27 @@ class V1MetricsStream(object):
705
710
 
706
711
  self._version_number = version_number
707
712
 
713
+ @property
714
+ def visibility(self) -> 'V1ResourceVisibility':
715
+ """Gets the visibility of this V1MetricsStream. # noqa: E501
716
+
717
+
718
+ :return: The visibility of this V1MetricsStream. # noqa: E501
719
+ :rtype: V1ResourceVisibility
720
+ """
721
+ return self._visibility
722
+
723
+ @visibility.setter
724
+ def visibility(self, visibility: 'V1ResourceVisibility'):
725
+ """Sets the visibility of this V1MetricsStream.
726
+
727
+
728
+ :param visibility: The visibility of this V1MetricsStream. # noqa: E501
729
+ :type: V1ResourceVisibility
730
+ """
731
+
732
+ self._visibility = visibility
733
+
708
734
  @property
709
735
  def work_id(self) -> 'str':
710
736
  """Gets the work_id of this V1MetricsStream. # noqa: E501
@@ -0,0 +1,175 @@
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 V1ModelFile(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
+ Attributes:
38
+ swagger_types (dict): The key is attribute name
39
+ and the value is attribute type.
40
+ attribute_map (dict): The key is attribute name
41
+ and the value is json key in definition.
42
+ """
43
+ swagger_types = {
44
+ 'filepath': 'str',
45
+ 'size': 'str',
46
+ 'url': 'str'
47
+ }
48
+
49
+ attribute_map = {
50
+ 'filepath': 'filepath',
51
+ 'size': 'size',
52
+ 'url': 'url'
53
+ }
54
+
55
+ def __init__(self, filepath: 'str' =None, size: 'str' =None, url: 'str' =None): # noqa: E501
56
+ """V1ModelFile - a model defined in Swagger""" # noqa: E501
57
+ self._filepath = None
58
+ self._size = None
59
+ self._url = None
60
+ self.discriminator = None
61
+ if filepath is not None:
62
+ self.filepath = filepath
63
+ if size is not None:
64
+ self.size = size
65
+ if url is not None:
66
+ self.url = url
67
+
68
+ @property
69
+ def filepath(self) -> 'str':
70
+ """Gets the filepath of this V1ModelFile. # noqa: E501
71
+
72
+
73
+ :return: The filepath of this V1ModelFile. # noqa: E501
74
+ :rtype: str
75
+ """
76
+ return self._filepath
77
+
78
+ @filepath.setter
79
+ def filepath(self, filepath: 'str'):
80
+ """Sets the filepath of this V1ModelFile.
81
+
82
+
83
+ :param filepath: The filepath of this V1ModelFile. # noqa: E501
84
+ :type: str
85
+ """
86
+
87
+ self._filepath = filepath
88
+
89
+ @property
90
+ def size(self) -> 'str':
91
+ """Gets the size of this V1ModelFile. # noqa: E501
92
+
93
+
94
+ :return: The size of this V1ModelFile. # noqa: E501
95
+ :rtype: str
96
+ """
97
+ return self._size
98
+
99
+ @size.setter
100
+ def size(self, size: 'str'):
101
+ """Sets the size of this V1ModelFile.
102
+
103
+
104
+ :param size: The size of this V1ModelFile. # noqa: E501
105
+ :type: str
106
+ """
107
+
108
+ self._size = size
109
+
110
+ @property
111
+ def url(self) -> 'str':
112
+ """Gets the url of this V1ModelFile. # noqa: E501
113
+
114
+
115
+ :return: The url of this V1ModelFile. # noqa: E501
116
+ :rtype: str
117
+ """
118
+ return self._url
119
+
120
+ @url.setter
121
+ def url(self, url: 'str'):
122
+ """Sets the url of this V1ModelFile.
123
+
124
+
125
+ :param url: The url of this V1ModelFile. # noqa: E501
126
+ :type: str
127
+ """
128
+
129
+ self._url = url
130
+
131
+ def to_dict(self) -> dict:
132
+ """Returns the model properties as a dict"""
133
+ result = {}
134
+
135
+ for attr, _ in six.iteritems(self.swagger_types):
136
+ value = getattr(self, attr)
137
+ if isinstance(value, list):
138
+ result[attr] = list(map(
139
+ lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
140
+ value
141
+ ))
142
+ elif hasattr(value, "to_dict"):
143
+ result[attr] = value.to_dict()
144
+ elif isinstance(value, dict):
145
+ result[attr] = dict(map(
146
+ lambda item: (item[0], item[1].to_dict())
147
+ if hasattr(item[1], "to_dict") else item,
148
+ value.items()
149
+ ))
150
+ else:
151
+ result[attr] = value
152
+ if issubclass(V1ModelFile, dict):
153
+ for key, value in self.items():
154
+ result[key] = value
155
+
156
+ return result
157
+
158
+ def to_str(self) -> str:
159
+ """Returns the string representation of the model"""
160
+ return pprint.pformat(self.to_dict())
161
+
162
+ def __repr__(self) -> str:
163
+ """For `print` and `pprint`"""
164
+ return self.to_str()
165
+
166
+ def __eq__(self, other: 'V1ModelFile') -> bool:
167
+ """Returns true if both objects are equal"""
168
+ if not isinstance(other, V1ModelFile):
169
+ return False
170
+
171
+ return self.__dict__ == other.__dict__
172
+
173
+ def __ne__(self, other: 'V1ModelFile') -> bool:
174
+ """Returns true if both objects are not equal"""
175
+ return not self == other
@@ -44,6 +44,7 @@ class V1MultiMachineJob(object):
44
44
  'cloudspace_id': 'str',
45
45
  'created_at': 'datetime',
46
46
  'desired_state': 'V1MultiMachineJobState',
47
+ 'fault_tolerance': 'V1MultiMachineJobFaultTolerance',
47
48
  'id': 'str',
48
49
  'machines': 'int',
49
50
  'message': 'str',
@@ -60,6 +61,7 @@ class V1MultiMachineJob(object):
60
61
  'cloudspace_id': 'cloudspaceId',
61
62
  'created_at': 'createdAt',
62
63
  'desired_state': 'desiredState',
64
+ 'fault_tolerance': 'faultTolerance',
63
65
  'id': 'id',
64
66
  'machines': 'machines',
65
67
  'message': 'message',
@@ -72,11 +74,12 @@ class V1MultiMachineJob(object):
72
74
  'user_id': 'userId'
73
75
  }
74
76
 
75
- def __init__(self, cloudspace_id: 'str' =None, created_at: 'datetime' =None, desired_state: 'V1MultiMachineJobState' =None, id: 'str' =None, machines: 'int' =None, message: 'str' =None, name: 'str' =None, project_id: 'str' =None, spec: 'V1JobSpec' =None, state: 'V1MultiMachineJobState' =None, status: 'V1MultiMachineJobStatus' =None, updated_at: 'datetime' =None, user_id: 'str' =None): # noqa: E501
77
+ def __init__(self, cloudspace_id: 'str' =None, created_at: 'datetime' =None, desired_state: 'V1MultiMachineJobState' =None, fault_tolerance: 'V1MultiMachineJobFaultTolerance' =None, id: 'str' =None, machines: 'int' =None, message: 'str' =None, name: 'str' =None, project_id: 'str' =None, spec: 'V1JobSpec' =None, state: 'V1MultiMachineJobState' =None, status: 'V1MultiMachineJobStatus' =None, updated_at: 'datetime' =None, user_id: 'str' =None): # noqa: E501
76
78
  """V1MultiMachineJob - a model defined in Swagger""" # noqa: E501
77
79
  self._cloudspace_id = None
78
80
  self._created_at = None
79
81
  self._desired_state = None
82
+ self._fault_tolerance = None
80
83
  self._id = None
81
84
  self._machines = None
82
85
  self._message = None
@@ -94,6 +97,8 @@ class V1MultiMachineJob(object):
94
97
  self.created_at = created_at
95
98
  if desired_state is not None:
96
99
  self.desired_state = desired_state
100
+ if fault_tolerance is not None:
101
+ self.fault_tolerance = fault_tolerance
97
102
  if id is not None:
98
103
  self.id = id
99
104
  if machines is not None:
@@ -178,6 +183,27 @@ class V1MultiMachineJob(object):
178
183
 
179
184
  self._desired_state = desired_state
180
185
 
186
+ @property
187
+ def fault_tolerance(self) -> 'V1MultiMachineJobFaultTolerance':
188
+ """Gets the fault_tolerance of this V1MultiMachineJob. # noqa: E501
189
+
190
+
191
+ :return: The fault_tolerance of this V1MultiMachineJob. # noqa: E501
192
+ :rtype: V1MultiMachineJobFaultTolerance
193
+ """
194
+ return self._fault_tolerance
195
+
196
+ @fault_tolerance.setter
197
+ def fault_tolerance(self, fault_tolerance: 'V1MultiMachineJobFaultTolerance'):
198
+ """Sets the fault_tolerance of this V1MultiMachineJob.
199
+
200
+
201
+ :param fault_tolerance: The fault_tolerance of this V1MultiMachineJob. # noqa: E501
202
+ :type: V1MultiMachineJobFaultTolerance
203
+ """
204
+
205
+ self._fault_tolerance = fault_tolerance
206
+
181
207
  @property
182
208
  def id(self) -> 'str':
183
209
  """Gets the id of this V1MultiMachineJob. # noqa: E501
@@ -0,0 +1,331 @@
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 V1MultiMachineJobEvent(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
+ Attributes:
38
+ swagger_types (dict): The key is attribute name
39
+ and the value is attribute type.
40
+ attribute_map (dict): The key is attribute name
41
+ and the value is json key in definition.
42
+ """
43
+ swagger_types = {
44
+ 'action': 'str',
45
+ 'id': 'str',
46
+ 'job_id': 'str',
47
+ 'message': 'str',
48
+ 'multi_machine_job_id': 'str',
49
+ 'project_id': 'str',
50
+ 'reason': 'str',
51
+ 'timestamp': 'datetime',
52
+ 'type': 'V1MultiMachineJobEventType'
53
+ }
54
+
55
+ attribute_map = {
56
+ 'action': 'action',
57
+ 'id': 'id',
58
+ 'job_id': 'jobId',
59
+ 'message': 'message',
60
+ 'multi_machine_job_id': 'multiMachineJobId',
61
+ 'project_id': 'projectId',
62
+ 'reason': 'reason',
63
+ 'timestamp': 'timestamp',
64
+ 'type': 'type'
65
+ }
66
+
67
+ def __init__(self, action: 'str' =None, id: 'str' =None, job_id: 'str' =None, message: 'str' =None, multi_machine_job_id: 'str' =None, project_id: 'str' =None, reason: 'str' =None, timestamp: 'datetime' =None, type: 'V1MultiMachineJobEventType' =None): # noqa: E501
68
+ """V1MultiMachineJobEvent - a model defined in Swagger""" # noqa: E501
69
+ self._action = None
70
+ self._id = None
71
+ self._job_id = None
72
+ self._message = None
73
+ self._multi_machine_job_id = None
74
+ self._project_id = None
75
+ self._reason = None
76
+ self._timestamp = None
77
+ self._type = None
78
+ self.discriminator = None
79
+ if action is not None:
80
+ self.action = action
81
+ if id is not None:
82
+ self.id = id
83
+ if job_id is not None:
84
+ self.job_id = job_id
85
+ if message is not None:
86
+ self.message = message
87
+ if multi_machine_job_id is not None:
88
+ self.multi_machine_job_id = multi_machine_job_id
89
+ if project_id is not None:
90
+ self.project_id = project_id
91
+ if reason is not None:
92
+ self.reason = reason
93
+ if timestamp is not None:
94
+ self.timestamp = timestamp
95
+ if type is not None:
96
+ self.type = type
97
+
98
+ @property
99
+ def action(self) -> 'str':
100
+ """Gets the action of this V1MultiMachineJobEvent. # noqa: E501
101
+
102
+
103
+ :return: The action of this V1MultiMachineJobEvent. # noqa: E501
104
+ :rtype: str
105
+ """
106
+ return self._action
107
+
108
+ @action.setter
109
+ def action(self, action: 'str'):
110
+ """Sets the action of this V1MultiMachineJobEvent.
111
+
112
+
113
+ :param action: The action of this V1MultiMachineJobEvent. # noqa: E501
114
+ :type: str
115
+ """
116
+
117
+ self._action = action
118
+
119
+ @property
120
+ def id(self) -> 'str':
121
+ """Gets the id of this V1MultiMachineJobEvent. # noqa: E501
122
+
123
+
124
+ :return: The id of this V1MultiMachineJobEvent. # noqa: E501
125
+ :rtype: str
126
+ """
127
+ return self._id
128
+
129
+ @id.setter
130
+ def id(self, id: 'str'):
131
+ """Sets the id of this V1MultiMachineJobEvent.
132
+
133
+
134
+ :param id: The id of this V1MultiMachineJobEvent. # noqa: E501
135
+ :type: str
136
+ """
137
+
138
+ self._id = id
139
+
140
+ @property
141
+ def job_id(self) -> 'str':
142
+ """Gets the job_id of this V1MultiMachineJobEvent. # noqa: E501
143
+
144
+
145
+ :return: The job_id of this V1MultiMachineJobEvent. # noqa: E501
146
+ :rtype: str
147
+ """
148
+ return self._job_id
149
+
150
+ @job_id.setter
151
+ def job_id(self, job_id: 'str'):
152
+ """Sets the job_id of this V1MultiMachineJobEvent.
153
+
154
+
155
+ :param job_id: The job_id of this V1MultiMachineJobEvent. # noqa: E501
156
+ :type: str
157
+ """
158
+
159
+ self._job_id = job_id
160
+
161
+ @property
162
+ def message(self) -> 'str':
163
+ """Gets the message of this V1MultiMachineJobEvent. # noqa: E501
164
+
165
+
166
+ :return: The message of this V1MultiMachineJobEvent. # noqa: E501
167
+ :rtype: str
168
+ """
169
+ return self._message
170
+
171
+ @message.setter
172
+ def message(self, message: 'str'):
173
+ """Sets the message of this V1MultiMachineJobEvent.
174
+
175
+
176
+ :param message: The message of this V1MultiMachineJobEvent. # noqa: E501
177
+ :type: str
178
+ """
179
+
180
+ self._message = message
181
+
182
+ @property
183
+ def multi_machine_job_id(self) -> 'str':
184
+ """Gets the multi_machine_job_id of this V1MultiMachineJobEvent. # noqa: E501
185
+
186
+
187
+ :return: The multi_machine_job_id of this V1MultiMachineJobEvent. # noqa: E501
188
+ :rtype: str
189
+ """
190
+ return self._multi_machine_job_id
191
+
192
+ @multi_machine_job_id.setter
193
+ def multi_machine_job_id(self, multi_machine_job_id: 'str'):
194
+ """Sets the multi_machine_job_id of this V1MultiMachineJobEvent.
195
+
196
+
197
+ :param multi_machine_job_id: The multi_machine_job_id of this V1MultiMachineJobEvent. # noqa: E501
198
+ :type: str
199
+ """
200
+
201
+ self._multi_machine_job_id = multi_machine_job_id
202
+
203
+ @property
204
+ def project_id(self) -> 'str':
205
+ """Gets the project_id of this V1MultiMachineJobEvent. # noqa: E501
206
+
207
+
208
+ :return: The project_id of this V1MultiMachineJobEvent. # noqa: E501
209
+ :rtype: str
210
+ """
211
+ return self._project_id
212
+
213
+ @project_id.setter
214
+ def project_id(self, project_id: 'str'):
215
+ """Sets the project_id of this V1MultiMachineJobEvent.
216
+
217
+
218
+ :param project_id: The project_id of this V1MultiMachineJobEvent. # noqa: E501
219
+ :type: str
220
+ """
221
+
222
+ self._project_id = project_id
223
+
224
+ @property
225
+ def reason(self) -> 'str':
226
+ """Gets the reason of this V1MultiMachineJobEvent. # noqa: E501
227
+
228
+
229
+ :return: The reason of this V1MultiMachineJobEvent. # noqa: E501
230
+ :rtype: str
231
+ """
232
+ return self._reason
233
+
234
+ @reason.setter
235
+ def reason(self, reason: 'str'):
236
+ """Sets the reason of this V1MultiMachineJobEvent.
237
+
238
+
239
+ :param reason: The reason of this V1MultiMachineJobEvent. # noqa: E501
240
+ :type: str
241
+ """
242
+
243
+ self._reason = reason
244
+
245
+ @property
246
+ def timestamp(self) -> 'datetime':
247
+ """Gets the timestamp of this V1MultiMachineJobEvent. # noqa: E501
248
+
249
+
250
+ :return: The timestamp of this V1MultiMachineJobEvent. # noqa: E501
251
+ :rtype: datetime
252
+ """
253
+ return self._timestamp
254
+
255
+ @timestamp.setter
256
+ def timestamp(self, timestamp: 'datetime'):
257
+ """Sets the timestamp of this V1MultiMachineJobEvent.
258
+
259
+
260
+ :param timestamp: The timestamp of this V1MultiMachineJobEvent. # noqa: E501
261
+ :type: datetime
262
+ """
263
+
264
+ self._timestamp = timestamp
265
+
266
+ @property
267
+ def type(self) -> 'V1MultiMachineJobEventType':
268
+ """Gets the type of this V1MultiMachineJobEvent. # noqa: E501
269
+
270
+
271
+ :return: The type of this V1MultiMachineJobEvent. # noqa: E501
272
+ :rtype: V1MultiMachineJobEventType
273
+ """
274
+ return self._type
275
+
276
+ @type.setter
277
+ def type(self, type: 'V1MultiMachineJobEventType'):
278
+ """Sets the type of this V1MultiMachineJobEvent.
279
+
280
+
281
+ :param type: The type of this V1MultiMachineJobEvent. # noqa: E501
282
+ :type: V1MultiMachineJobEventType
283
+ """
284
+
285
+ self._type = type
286
+
287
+ def to_dict(self) -> dict:
288
+ """Returns the model properties as a dict"""
289
+ result = {}
290
+
291
+ for attr, _ in six.iteritems(self.swagger_types):
292
+ value = getattr(self, attr)
293
+ if isinstance(value, list):
294
+ result[attr] = list(map(
295
+ lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
296
+ value
297
+ ))
298
+ elif hasattr(value, "to_dict"):
299
+ result[attr] = value.to_dict()
300
+ elif isinstance(value, dict):
301
+ result[attr] = dict(map(
302
+ lambda item: (item[0], item[1].to_dict())
303
+ if hasattr(item[1], "to_dict") else item,
304
+ value.items()
305
+ ))
306
+ else:
307
+ result[attr] = value
308
+ if issubclass(V1MultiMachineJobEvent, dict):
309
+ for key, value in self.items():
310
+ result[key] = value
311
+
312
+ return result
313
+
314
+ def to_str(self) -> str:
315
+ """Returns the string representation of the model"""
316
+ return pprint.pformat(self.to_dict())
317
+
318
+ def __repr__(self) -> str:
319
+ """For `print` and `pprint`"""
320
+ return self.to_str()
321
+
322
+ def __eq__(self, other: 'V1MultiMachineJobEvent') -> bool:
323
+ """Returns true if both objects are equal"""
324
+ if not isinstance(other, V1MultiMachineJobEvent):
325
+ return False
326
+
327
+ return self.__dict__ == other.__dict__
328
+
329
+ def __ne__(self, other: 'V1MultiMachineJobEvent') -> bool:
330
+ """Returns true if both objects are not equal"""
331
+ return not self == other