Py4HEAppE 1.0.0__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 (183) hide show
  1. __init__.py +1 -0
  2. py4heappe/__init__.py +1 -0
  3. py4heappe/cli/__init__.py +1 -0
  4. py4heappe/cli/auth.py +153 -0
  5. py4heappe/cli/command_template.py +370 -0
  6. py4heappe/cli/configuration.py +65 -0
  7. py4heappe/cli/information.py +163 -0
  8. py4heappe/cli/job_management.py +211 -0
  9. py4heappe/cli/report.py +173 -0
  10. py4heappe/core/__init__.py +167 -0
  11. py4heappe/core/api/__init__.py +12 -0
  12. py4heappe/core/api/cluster_information_api.py +308 -0
  13. py4heappe/core/api/data_transfer_api.py +405 -0
  14. py4heappe/core/api/file_transfer_api.py +498 -0
  15. py4heappe/core/api/job_management_api.py +866 -0
  16. py4heappe/core/api/job_reporting_api.py +692 -0
  17. py4heappe/core/api/management_api.py +2540 -0
  18. py4heappe/core/api/user_and_limitation_management_api.py +676 -0
  19. py4heappe/core/api_client.py +632 -0
  20. py4heappe/core/base/__init__.py +1 -0
  21. py4heappe/core/base/exceptions.py +41 -0
  22. py4heappe/core/base/logger.py +11 -0
  23. py4heappe/core/base/utils.py +43 -0
  24. py4heappe/core/configuration.py +247 -0
  25. py4heappe/core/models/__init__.py +155 -0
  26. py4heappe/core/models/adaptor_user.py +398 -0
  27. py4heappe/core/models/adaptor_user_group.py +268 -0
  28. py4heappe/core/models/adaptor_user_role.py +242 -0
  29. py4heappe/core/models/adaptor_user_role_ext.py +138 -0
  30. py4heappe/core/models/adaptor_user_role_type.py +95 -0
  31. py4heappe/core/models/adaptor_user_type.py +91 -0
  32. py4heappe/core/models/adaptor_user_user_group_role.py +320 -0
  33. py4heappe/core/models/allocated_nodes_ips_model.py +136 -0
  34. py4heappe/core/models/authenticate_lexis_token_model.py +110 -0
  35. py4heappe/core/models/authenticate_user_digital_signature_model.py +110 -0
  36. py4heappe/core/models/authenticate_user_open_id_model.py +110 -0
  37. py4heappe/core/models/authenticate_user_open_id_open_stack_model.py +136 -0
  38. py4heappe/core/models/authenticate_user_password_model.py +110 -0
  39. py4heappe/core/models/authentication_credentials.py +110 -0
  40. py4heappe/core/models/bad_request_result.py +110 -0
  41. py4heappe/core/models/cancel_job_model.py +136 -0
  42. py4heappe/core/models/cluster.py +478 -0
  43. py4heappe/core/models/cluster_authentication_credentials.py +375 -0
  44. py4heappe/core/models/cluster_authentication_credentials_auth_type.py +97 -0
  45. py4heappe/core/models/cluster_connection_protocol.py +91 -0
  46. py4heappe/core/models/cluster_detailed_report_ext.py +214 -0
  47. py4heappe/core/models/cluster_ext.py +188 -0
  48. py4heappe/core/models/cluster_init_report_ext.py +136 -0
  49. py4heappe/core/models/cluster_node_type.py +528 -0
  50. py4heappe/core/models/cluster_node_type_detailed_report_ext.py +240 -0
  51. py4heappe/core/models/cluster_node_type_ext.py +292 -0
  52. py4heappe/core/models/cluster_node_type_for_task_ext.py +188 -0
  53. py4heappe/core/models/cluster_node_type_report_ext.py +214 -0
  54. py4heappe/core/models/cluster_node_type_requested_group.py +136 -0
  55. py4heappe/core/models/cluster_node_type_resource_usage_ext.py +292 -0
  56. py4heappe/core/models/cluster_node_usage_ext.py +318 -0
  57. py4heappe/core/models/cluster_project.py +347 -0
  58. py4heappe/core/models/cluster_project_credential.py +294 -0
  59. py4heappe/core/models/cluster_proxy_connection.py +243 -0
  60. py4heappe/core/models/cluster_proxy_connection_ext.py +214 -0
  61. py4heappe/core/models/cluster_report_ext.py +215 -0
  62. py4heappe/core/models/command_template.py +557 -0
  63. py4heappe/core/models/command_template_ext.py +240 -0
  64. py4heappe/core/models/command_template_parameter.py +347 -0
  65. py4heappe/core/models/command_template_parameter_ext.py +136 -0
  66. py4heappe/core/models/command_template_parameter_value_ext.py +136 -0
  67. py4heappe/core/models/contact.py +269 -0
  68. py4heappe/core/models/copy_job_data_from_temp_model.py +162 -0
  69. py4heappe/core/models/copy_job_data_to_temp_model.py +162 -0
  70. py4heappe/core/models/create_command_inner_template_parameter_model.py +162 -0
  71. py4heappe/core/models/create_command_template_from_generic_model.py +292 -0
  72. py4heappe/core/models/create_command_template_model.py +318 -0
  73. py4heappe/core/models/create_command_template_parameter_model.py +214 -0
  74. py4heappe/core/models/create_job_by_project_model.py +136 -0
  75. py4heappe/core/models/create_project_assignment_to_cluster_model.py +188 -0
  76. py4heappe/core/models/create_project_model.py +318 -0
  77. py4heappe/core/models/create_secure_shell_key_model.py +162 -0
  78. py4heappe/core/models/create_secure_shell_key_model_obsolete.py +188 -0
  79. py4heappe/core/models/current_cluster_node_usage_model.py +136 -0
  80. py4heappe/core/models/current_info_for_job_model.py +136 -0
  81. py4heappe/core/models/data_transfer_method_ext.py +188 -0
  82. py4heappe/core/models/delete_job_model.py +136 -0
  83. py4heappe/core/models/deployment_type_ext.py +91 -0
  84. py4heappe/core/models/digital_signature_credentials_ext.py +162 -0
  85. py4heappe/core/models/download_file_from_cluster_model.py +162 -0
  86. py4heappe/core/models/download_parts_of_job_files_from_cluster_model.py +162 -0
  87. py4heappe/core/models/end_data_transfer_model.py +136 -0
  88. py4heappe/core/models/end_file_transfer_model.py +162 -0
  89. py4heappe/core/models/environment_variable_ext.py +136 -0
  90. py4heappe/core/models/extended_command_template_ext.py +370 -0
  91. py4heappe/core/models/extended_command_template_parameter_ext.py +188 -0
  92. py4heappe/core/models/extended_project_info_ext.py +318 -0
  93. py4heappe/core/models/file_information_ext.py +136 -0
  94. py4heappe/core/models/file_transfer_cipher_type.py +94 -0
  95. py4heappe/core/models/file_transfer_cipher_type_ext.py +93 -0
  96. py4heappe/core/models/file_transfer_key_credentials_ext.py +240 -0
  97. py4heappe/core/models/file_transfer_method.py +294 -0
  98. py4heappe/core/models/file_transfer_method_ext.py +240 -0
  99. py4heappe/core/models/file_transfer_protocol.py +91 -0
  100. py4heappe/core/models/file_transfer_protocol_ext.py +91 -0
  101. py4heappe/core/models/get_command_template_parameters_name_model.py +188 -0
  102. py4heappe/core/models/get_current_usage_and_limitations_for_current_user_model.py +110 -0
  103. py4heappe/core/models/get_data_transfer_method_model.py +188 -0
  104. py4heappe/core/models/get_file_transfer_method_model.py +136 -0
  105. py4heappe/core/models/http_get_to_job_node_model.py +241 -0
  106. py4heappe/core/models/http_header_ext.py +136 -0
  107. py4heappe/core/models/http_post_to_job_node_model.py +267 -0
  108. py4heappe/core/models/initialize_cluster_script_directory_model.py +162 -0
  109. py4heappe/core/models/instance_information_ext.py +344 -0
  110. py4heappe/core/models/job_detailed_report_ext.py +318 -0
  111. py4heappe/core/models/job_file_content_ext.py +214 -0
  112. py4heappe/core/models/job_report_ext.py +188 -0
  113. py4heappe/core/models/job_specification_by_project_ext.py +448 -0
  114. py4heappe/core/models/job_specification_ext.py +448 -0
  115. py4heappe/core/models/job_state_aggregation_report_ext.py +162 -0
  116. py4heappe/core/models/job_state_ext.py +96 -0
  117. py4heappe/core/models/lexis_credentials_ext.py +137 -0
  118. py4heappe/core/models/list_changed_files_for_job_model.py +136 -0
  119. py4heappe/core/models/list_jobs_for_current_user_model.py +110 -0
  120. py4heappe/core/models/modify_command_template_from_generic_model.py +292 -0
  121. py4heappe/core/models/modify_command_template_model.py +292 -0
  122. py4heappe/core/models/modify_command_template_parameter_model.py +214 -0
  123. py4heappe/core/models/modify_project_assignment_to_cluster_model.py +188 -0
  124. py4heappe/core/models/modify_project_model.py +292 -0
  125. py4heappe/core/models/node_used_cores_and_limitation_ext.py +110 -0
  126. py4heappe/core/models/open_id_credentials_ext.py +137 -0
  127. py4heappe/core/models/open_stack_application_credentials_ext.py +136 -0
  128. py4heappe/core/models/password_credentials_ext.py +136 -0
  129. py4heappe/core/models/problem_details.py +89 -0
  130. py4heappe/core/models/project.py +482 -0
  131. py4heappe/core/models/project_contact.py +215 -0
  132. py4heappe/core/models/project_detailed_report_ext.py +292 -0
  133. py4heappe/core/models/project_ext.py +266 -0
  134. py4heappe/core/models/project_for_task_ext.py +214 -0
  135. py4heappe/core/models/project_list_report_ext.py +214 -0
  136. py4heappe/core/models/project_reference_ext.py +137 -0
  137. py4heappe/core/models/project_report_ext.py +240 -0
  138. py4heappe/core/models/project_resource_usage_ext.py +266 -0
  139. py4heappe/core/models/proxy_type.py +91 -0
  140. py4heappe/core/models/proxy_type_ext.py +91 -0
  141. py4heappe/core/models/public_key_ext.py +188 -0
  142. py4heappe/core/models/recreate_secure_shell_key_model.py +214 -0
  143. py4heappe/core/models/regenerate_secure_shell_key_model.py +188 -0
  144. py4heappe/core/models/regenerate_secure_shell_key_model_obsolete.py +188 -0
  145. py4heappe/core/models/remove_command_template_model.py +136 -0
  146. py4heappe/core/models/remove_command_template_parameter_model.py +136 -0
  147. py4heappe/core/models/remove_project_assignment_to_cluster_model.py +162 -0
  148. py4heappe/core/models/remove_project_model.py +136 -0
  149. py4heappe/core/models/remove_secure_shell_key_model.py +162 -0
  150. py4heappe/core/models/remove_secure_shell_key_model_obsolete.py +162 -0
  151. py4heappe/core/models/resource_allocation_type_ext.py +91 -0
  152. py4heappe/core/models/resource_limitation_ext.py +136 -0
  153. py4heappe/core/models/resource_usage_ext.py +163 -0
  154. py4heappe/core/models/scheduler_type.py +92 -0
  155. py4heappe/core/models/ssh_key_user_credentials_model.py +136 -0
  156. py4heappe/core/models/submit_job_model.py +136 -0
  157. py4heappe/core/models/submitted_job_info_ext.py +318 -0
  158. py4heappe/core/models/submitted_task_info_ext.py +370 -0
  159. py4heappe/core/models/synchronizable_files_ext.py +92 -0
  160. py4heappe/core/models/task_detailed_report_ext.py +318 -0
  161. py4heappe/core/models/task_file_offset_ext.py +162 -0
  162. py4heappe/core/models/task_paralization_parameter_ext.py +162 -0
  163. py4heappe/core/models/task_priority_ext.py +97 -0
  164. py4heappe/core/models/task_report_ext.py +266 -0
  165. py4heappe/core/models/task_specification_ext.py +682 -0
  166. py4heappe/core/models/task_state_ext.py +95 -0
  167. py4heappe/core/models/test_cluster_access_for_account_model.py +162 -0
  168. py4heappe/core/models/test_cluster_access_for_account_model_obsolete.py +162 -0
  169. py4heappe/core/models/unauthorized_result.py +110 -0
  170. py4heappe/core/models/usage_type.py +90 -0
  171. py4heappe/core/models/usage_type_ext.py +90 -0
  172. py4heappe/core/models/user_group_detailed_report_ext.py +240 -0
  173. py4heappe/core/models/user_group_list_report_ext.py +240 -0
  174. py4heappe/core/models/user_group_report_ext.py +240 -0
  175. py4heappe/core/models/version_information_ext.py +162 -0
  176. py4heappe/core/rest.py +311 -0
  177. py4heappe-1.0.0.dist-info/METADATA +147 -0
  178. py4heappe-1.0.0.dist-info/RECORD +183 -0
  179. py4heappe-1.0.0.dist-info/WHEEL +5 -0
  180. py4heappe-1.0.0.dist-info/entry_points.txt +2 -0
  181. py4heappe-1.0.0.dist-info/licenses/LICENSE +20 -0
  182. py4heappe-1.0.0.dist-info/top_level.txt +3 -0
  183. py4heappe_cli.py +22 -0
@@ -0,0 +1,214 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ HEAppE Web API
5
+
6
+ HEAppE middleware API v4.2.1 # noqa: E501
7
+
8
+ OpenAPI spec version: v4.2.1
9
+ Contact: support.heappe@it4i.cz
10
+ Generated by: https://github.com/swagger-api/swagger-codegen.git
11
+ """
12
+
13
+ import pprint
14
+ import re # noqa: F401
15
+
16
+ import six
17
+
18
+ class JobFileContentExt(object):
19
+ """NOTE: This class is auto generated by the swagger code generator program.
20
+
21
+ Do not edit the class manually.
22
+ """
23
+ """
24
+ Attributes:
25
+ swagger_types (dict): The key is attribute name
26
+ and the value is attribute type.
27
+ attribute_map (dict): The key is attribute name
28
+ and the value is json key in definition.
29
+ """
30
+ swagger_types = {
31
+ 'content': 'str',
32
+ 'relative_path': 'str',
33
+ 'offset': 'int',
34
+ 'file_type': 'SynchronizableFilesExt',
35
+ 'submitted_task_info_id': 'int'
36
+ }
37
+
38
+ attribute_map = {
39
+ 'content': 'Content',
40
+ 'relative_path': 'RelativePath',
41
+ 'offset': 'Offset',
42
+ 'file_type': 'FileType',
43
+ 'submitted_task_info_id': 'SubmittedTaskInfoId'
44
+ }
45
+
46
+ def __init__(self, content=None, relative_path=None, offset=None, file_type=None, submitted_task_info_id=None): # noqa: E501
47
+ """JobFileContentExt - a model defined in Swagger""" # noqa: E501
48
+ self._content = None
49
+ self._relative_path = None
50
+ self._offset = None
51
+ self._file_type = None
52
+ self._submitted_task_info_id = None
53
+ self.discriminator = None
54
+ if content is not None:
55
+ self.content = content
56
+ if relative_path is not None:
57
+ self.relative_path = relative_path
58
+ if offset is not None:
59
+ self.offset = offset
60
+ if file_type is not None:
61
+ self.file_type = file_type
62
+ if submitted_task_info_id is not None:
63
+ self.submitted_task_info_id = submitted_task_info_id
64
+
65
+ @property
66
+ def content(self):
67
+ """Gets the content of this JobFileContentExt. # noqa: E501
68
+
69
+
70
+ :return: The content of this JobFileContentExt. # noqa: E501
71
+ :rtype: str
72
+ """
73
+ return self._content
74
+
75
+ @content.setter
76
+ def content(self, content):
77
+ """Sets the content of this JobFileContentExt.
78
+
79
+
80
+ :param content: The content of this JobFileContentExt. # noqa: E501
81
+ :type: str
82
+ """
83
+
84
+ self._content = content
85
+
86
+ @property
87
+ def relative_path(self):
88
+ """Gets the relative_path of this JobFileContentExt. # noqa: E501
89
+
90
+
91
+ :return: The relative_path of this JobFileContentExt. # noqa: E501
92
+ :rtype: str
93
+ """
94
+ return self._relative_path
95
+
96
+ @relative_path.setter
97
+ def relative_path(self, relative_path):
98
+ """Sets the relative_path of this JobFileContentExt.
99
+
100
+
101
+ :param relative_path: The relative_path of this JobFileContentExt. # noqa: E501
102
+ :type: str
103
+ """
104
+
105
+ self._relative_path = relative_path
106
+
107
+ @property
108
+ def offset(self):
109
+ """Gets the offset of this JobFileContentExt. # noqa: E501
110
+
111
+
112
+ :return: The offset of this JobFileContentExt. # noqa: E501
113
+ :rtype: int
114
+ """
115
+ return self._offset
116
+
117
+ @offset.setter
118
+ def offset(self, offset):
119
+ """Sets the offset of this JobFileContentExt.
120
+
121
+
122
+ :param offset: The offset of this JobFileContentExt. # noqa: E501
123
+ :type: int
124
+ """
125
+
126
+ self._offset = offset
127
+
128
+ @property
129
+ def file_type(self):
130
+ """Gets the file_type of this JobFileContentExt. # noqa: E501
131
+
132
+
133
+ :return: The file_type of this JobFileContentExt. # noqa: E501
134
+ :rtype: SynchronizableFilesExt
135
+ """
136
+ return self._file_type
137
+
138
+ @file_type.setter
139
+ def file_type(self, file_type):
140
+ """Sets the file_type of this JobFileContentExt.
141
+
142
+
143
+ :param file_type: The file_type of this JobFileContentExt. # noqa: E501
144
+ :type: SynchronizableFilesExt
145
+ """
146
+
147
+ self._file_type = file_type
148
+
149
+ @property
150
+ def submitted_task_info_id(self):
151
+ """Gets the submitted_task_info_id of this JobFileContentExt. # noqa: E501
152
+
153
+
154
+ :return: The submitted_task_info_id of this JobFileContentExt. # noqa: E501
155
+ :rtype: int
156
+ """
157
+ return self._submitted_task_info_id
158
+
159
+ @submitted_task_info_id.setter
160
+ def submitted_task_info_id(self, submitted_task_info_id):
161
+ """Sets the submitted_task_info_id of this JobFileContentExt.
162
+
163
+
164
+ :param submitted_task_info_id: The submitted_task_info_id of this JobFileContentExt. # noqa: E501
165
+ :type: int
166
+ """
167
+
168
+ self._submitted_task_info_id = submitted_task_info_id
169
+
170
+ def to_dict(self):
171
+ """Returns the model properties as a dict"""
172
+ result = {}
173
+
174
+ for attr, _ in six.iteritems(self.swagger_types):
175
+ value = getattr(self, attr)
176
+ if isinstance(value, list):
177
+ result[attr] = list(map(
178
+ lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
179
+ value
180
+ ))
181
+ elif hasattr(value, "to_dict"):
182
+ result[attr] = value.to_dict()
183
+ elif isinstance(value, dict):
184
+ result[attr] = dict(map(
185
+ lambda item: (item[0], item[1].to_dict())
186
+ if hasattr(item[1], "to_dict") else item,
187
+ value.items()
188
+ ))
189
+ else:
190
+ result[attr] = value
191
+ if issubclass(JobFileContentExt, dict):
192
+ for key, value in self.items():
193
+ result[key] = value
194
+
195
+ return result
196
+
197
+ def to_str(self):
198
+ """Returns the string representation of the model"""
199
+ return pprint.pformat(self.to_dict())
200
+
201
+ def __repr__(self):
202
+ """For `print` and `pprint`"""
203
+ return self.to_str()
204
+
205
+ def __eq__(self, other):
206
+ """Returns true if both objects are equal"""
207
+ if not isinstance(other, JobFileContentExt):
208
+ return False
209
+
210
+ return self.__dict__ == other.__dict__
211
+
212
+ def __ne__(self, other):
213
+ """Returns true if both objects are not equal"""
214
+ return not self == other
@@ -0,0 +1,188 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ HEAppE Web API
5
+
6
+ HEAppE middleware API v4.2.1 # noqa: E501
7
+
8
+ OpenAPI spec version: v4.2.1
9
+ Contact: support.heappe@it4i.cz
10
+ Generated by: https://github.com/swagger-api/swagger-codegen.git
11
+ """
12
+
13
+ import pprint
14
+ import re # noqa: F401
15
+
16
+ import six
17
+
18
+ class JobReportExt(object):
19
+ """NOTE: This class is auto generated by the swagger code generator program.
20
+
21
+ Do not edit the class manually.
22
+ """
23
+ """
24
+ Attributes:
25
+ swagger_types (dict): The key is attribute name
26
+ and the value is attribute type.
27
+ attribute_map (dict): The key is attribute name
28
+ and the value is json key in definition.
29
+ """
30
+ swagger_types = {
31
+ 'id': 'int',
32
+ 'name': 'str',
33
+ 'state': 'JobStateExt',
34
+ 'tasks': 'list[TaskReportExt]'
35
+ }
36
+
37
+ attribute_map = {
38
+ 'id': 'Id',
39
+ 'name': 'Name',
40
+ 'state': 'State',
41
+ 'tasks': 'Tasks'
42
+ }
43
+
44
+ def __init__(self, id=None, name=None, state=None, tasks=None): # noqa: E501
45
+ """JobReportExt - a model defined in Swagger""" # noqa: E501
46
+ self._id = None
47
+ self._name = None
48
+ self._state = None
49
+ self._tasks = None
50
+ self.discriminator = None
51
+ if id is not None:
52
+ self.id = id
53
+ if name is not None:
54
+ self.name = name
55
+ if state is not None:
56
+ self.state = state
57
+ if tasks is not None:
58
+ self.tasks = tasks
59
+
60
+ @property
61
+ def id(self):
62
+ """Gets the id of this JobReportExt. # noqa: E501
63
+
64
+
65
+ :return: The id of this JobReportExt. # noqa: E501
66
+ :rtype: int
67
+ """
68
+ return self._id
69
+
70
+ @id.setter
71
+ def id(self, id):
72
+ """Sets the id of this JobReportExt.
73
+
74
+
75
+ :param id: The id of this JobReportExt. # noqa: E501
76
+ :type: int
77
+ """
78
+
79
+ self._id = id
80
+
81
+ @property
82
+ def name(self):
83
+ """Gets the name of this JobReportExt. # noqa: E501
84
+
85
+
86
+ :return: The name of this JobReportExt. # noqa: E501
87
+ :rtype: str
88
+ """
89
+ return self._name
90
+
91
+ @name.setter
92
+ def name(self, name):
93
+ """Sets the name of this JobReportExt.
94
+
95
+
96
+ :param name: The name of this JobReportExt. # noqa: E501
97
+ :type: str
98
+ """
99
+
100
+ self._name = name
101
+
102
+ @property
103
+ def state(self):
104
+ """Gets the state of this JobReportExt. # noqa: E501
105
+
106
+
107
+ :return: The state of this JobReportExt. # noqa: E501
108
+ :rtype: JobStateExt
109
+ """
110
+ return self._state
111
+
112
+ @state.setter
113
+ def state(self, state):
114
+ """Sets the state of this JobReportExt.
115
+
116
+
117
+ :param state: The state of this JobReportExt. # noqa: E501
118
+ :type: JobStateExt
119
+ """
120
+
121
+ self._state = state
122
+
123
+ @property
124
+ def tasks(self):
125
+ """Gets the tasks of this JobReportExt. # noqa: E501
126
+
127
+
128
+ :return: The tasks of this JobReportExt. # noqa: E501
129
+ :rtype: list[TaskReportExt]
130
+ """
131
+ return self._tasks
132
+
133
+ @tasks.setter
134
+ def tasks(self, tasks):
135
+ """Sets the tasks of this JobReportExt.
136
+
137
+
138
+ :param tasks: The tasks of this JobReportExt. # noqa: E501
139
+ :type: list[TaskReportExt]
140
+ """
141
+
142
+ self._tasks = tasks
143
+
144
+ def to_dict(self):
145
+ """Returns the model properties as a dict"""
146
+ result = {}
147
+
148
+ for attr, _ in six.iteritems(self.swagger_types):
149
+ value = getattr(self, attr)
150
+ if isinstance(value, list):
151
+ result[attr] = list(map(
152
+ lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
153
+ value
154
+ ))
155
+ elif hasattr(value, "to_dict"):
156
+ result[attr] = value.to_dict()
157
+ elif isinstance(value, dict):
158
+ result[attr] = dict(map(
159
+ lambda item: (item[0], item[1].to_dict())
160
+ if hasattr(item[1], "to_dict") else item,
161
+ value.items()
162
+ ))
163
+ else:
164
+ result[attr] = value
165
+ if issubclass(JobReportExt, dict):
166
+ for key, value in self.items():
167
+ result[key] = value
168
+
169
+ return result
170
+
171
+ def to_str(self):
172
+ """Returns the string representation of the model"""
173
+ return pprint.pformat(self.to_dict())
174
+
175
+ def __repr__(self):
176
+ """For `print` and `pprint`"""
177
+ return self.to_str()
178
+
179
+ def __eq__(self, other):
180
+ """Returns true if both objects are equal"""
181
+ if not isinstance(other, JobReportExt):
182
+ return False
183
+
184
+ return self.__dict__ == other.__dict__
185
+
186
+ def __ne__(self, other):
187
+ """Returns true if both objects are not equal"""
188
+ return not self == other