thestage 0.5.47__py3-none-any.whl → 0.5.49__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 (179) hide show
  1. thestage/.env +5 -5
  2. thestage/__init__.py +3 -4
  3. thestage/__main__.py +9 -9
  4. thestage/cli_command.py +56 -56
  5. thestage/cli_command_helper.py +51 -51
  6. thestage/color_scheme/color_scheme.py +7 -7
  7. thestage/config/__init__.py +18 -18
  8. thestage/config/config_storage.py +5 -3
  9. thestage/config/env_base.py +7 -7
  10. thestage/controllers/__init__.py +0 -0
  11. thestage/controllers/base_controller.py +67 -67
  12. thestage/controllers/config_controller.py +137 -137
  13. thestage/controllers/container_controller.py +389 -389
  14. thestage/controllers/instance_controller.py +183 -183
  15. thestage/controllers/project_controller.py +802 -783
  16. thestage/controllers/utils_controller.py +32 -32
  17. thestage/debug_main.dist.py +28 -28
  18. thestage/entities/__init__.py +0 -0
  19. thestage/entities/container.py +17 -17
  20. thestage/entities/enums/__init__.py +0 -0
  21. thestage/entities/enums/order_direction_type.py +6 -6
  22. thestage/entities/enums/shell_type.py +7 -7
  23. thestage/entities/enums/tail_output_type.py +6 -6
  24. thestage/entities/enums/yes_no_response.py +7 -7
  25. thestage/entities/file_item.py +27 -27
  26. thestage/entities/project_inference_simulator.py +18 -18
  27. thestage/entities/project_inference_simulator_model.py +16 -16
  28. thestage/entities/project_task.py +19 -19
  29. thestage/entities/rented_instance.py +19 -19
  30. thestage/entities/self_hosted_instance.py +18 -18
  31. thestage/exceptions/__init__.py +0 -0
  32. thestage/exceptions/auth_exception.py +6 -6
  33. thestage/exceptions/base_exception.py +13 -13
  34. thestage/exceptions/business_logic_exception.py +6 -6
  35. thestage/exceptions/config_exception.py +6 -6
  36. thestage/exceptions/file_system_exception.py +6 -6
  37. thestage/exceptions/git_access_exception.py +17 -17
  38. thestage/exceptions/remote_server_exception.py +24 -24
  39. thestage/git/ProgressPrinter.py +22 -22
  40. thestage/helpers/__init__.py +0 -0
  41. thestage/helpers/error_handler.py +115 -115
  42. thestage/helpers/exception_hook.py +14 -14
  43. thestage/helpers/logger/__init__.py +0 -0
  44. thestage/helpers/logger/app_logger.py +50 -50
  45. thestage/helpers/ssh_util.py +38 -38
  46. thestage/i18n/en_GB/messages.po +947 -947
  47. thestage/i18n/translation.py +9 -9
  48. thestage/main.py +36 -36
  49. thestage/services/.env +6 -6
  50. thestage/services/__init__.py +0 -0
  51. thestage/services/abstract_mapper.py +9 -9
  52. thestage/services/abstract_service.py +87 -87
  53. thestage/services/app_config_service.py +52 -52
  54. thestage/services/clients/__init__.py +0 -0
  55. thestage/services/clients/git/__init__.py +0 -0
  56. thestage/services/clients/git/git_client.py +433 -331
  57. thestage/services/clients/thestage_api/__init__.py +0 -0
  58. thestage/services/clients/thestage_api/api_client.py +718 -720
  59. thestage/services/clients/thestage_api/core/api_client_core.py +108 -108
  60. thestage/services/clients/thestage_api/core/http_client_exception.py +12 -12
  61. thestage/services/clients/thestage_api/dtos/__init__.py +0 -0
  62. thestage/services/clients/thestage_api/dtos/base_response.py +13 -13
  63. thestage/services/clients/thestage_api/dtos/cloud_provider_region.py +19 -19
  64. thestage/services/clients/thestage_api/dtos/container_param_request.py +11 -11
  65. thestage/services/clients/thestage_api/dtos/container_response.py +67 -67
  66. thestage/services/clients/thestage_api/dtos/docker_container_assigned_device.py +10 -10
  67. thestage/services/clients/thestage_api/dtos/docker_container_controller/docker_container_list_request.py +13 -13
  68. thestage/services/clients/thestage_api/dtos/docker_container_controller/docker_container_list_response.py +13 -13
  69. thestage/services/clients/thestage_api/dtos/docker_container_mapping.py +10 -10
  70. thestage/services/clients/thestage_api/dtos/entity_filter_request.py +14 -14
  71. thestage/services/clients/thestage_api/dtos/enums/__init__.py +0 -0
  72. thestage/services/clients/thestage_api/dtos/enums/container_pending_action.py +10 -10
  73. thestage/services/clients/thestage_api/dtos/enums/container_status.py +17 -17
  74. thestage/services/clients/thestage_api/dtos/enums/cpu_type.py +8 -8
  75. thestage/services/clients/thestage_api/dtos/enums/currency_type.py +10 -10
  76. thestage/services/clients/thestage_api/dtos/enums/daemon_status.py +9 -9
  77. thestage/services/clients/thestage_api/dtos/enums/disk_type.py +7 -7
  78. thestage/services/clients/thestage_api/dtos/enums/drive_type.py +7 -7
  79. thestage/services/clients/thestage_api/dtos/enums/gpu_name.py +8 -8
  80. thestage/services/clients/thestage_api/dtos/enums/inference_model_status.py +9 -9
  81. thestage/services/clients/thestage_api/dtos/enums/inference_simulator_status.py +15 -15
  82. thestage/services/clients/thestage_api/dtos/enums/instance_rented_status.py +17 -17
  83. thestage/services/clients/thestage_api/dtos/enums/instance_type.py +7 -7
  84. thestage/services/clients/thestage_api/dtos/enums/location_region.py +11 -11
  85. thestage/services/clients/thestage_api/dtos/enums/power_status.py +10 -10
  86. thestage/services/clients/thestage_api/dtos/enums/provider_name.py +11 -11
  87. thestage/services/clients/thestage_api/dtos/enums/selfhosted_status.py +10 -10
  88. thestage/services/clients/thestage_api/dtos/enums/task_execution_status.py +12 -12
  89. thestage/services/clients/thestage_api/dtos/enums/task_status.py +12 -12
  90. thestage/services/clients/thestage_api/dtos/frontend_status.py +10 -10
  91. thestage/services/clients/thestage_api/dtos/inference_controller/deploy_inference_model_to_instance_request.py +13 -13
  92. thestage/services/clients/thestage_api/dtos/inference_controller/deploy_inference_model_to_instance_response.py +13 -13
  93. thestage/services/clients/thestage_api/dtos/inference_controller/deploy_inference_model_to_sagemaker_request.py +12 -12
  94. thestage/services/clients/thestage_api/dtos/inference_controller/deploy_inference_model_to_sagemaker_response.py +12 -12
  95. thestage/services/clients/thestage_api/dtos/inference_controller/get_inference_simulator_request.py +10 -10
  96. thestage/services/clients/thestage_api/dtos/inference_controller/get_inference_simulator_response.py +13 -13
  97. thestage/services/clients/thestage_api/dtos/inference_controller/inference_simulator_list_for_project_request.py +14 -14
  98. thestage/services/clients/thestage_api/dtos/inference_controller/inference_simulator_list_for_project_response.py +12 -12
  99. thestage/services/clients/thestage_api/dtos/inference_controller/inference_simulator_model_list_for_project_request.py +12 -12
  100. thestage/services/clients/thestage_api/dtos/inference_controller/inference_simulator_model_list_for_project_response.py +13 -13
  101. thestage/services/clients/thestage_api/dtos/inference_simulator_model_response.py +11 -11
  102. thestage/services/clients/thestage_api/dtos/inference_simulator_response.py +11 -11
  103. thestage/services/clients/thestage_api/dtos/installed_service.py +17 -17
  104. thestage/services/clients/thestage_api/dtos/instance_detected_gpus.py +20 -20
  105. thestage/services/clients/thestage_api/dtos/instance_rented_response.py +71 -71
  106. thestage/services/clients/thestage_api/dtos/logging_controller/docker_container_log_stream_request.py +7 -7
  107. thestage/services/clients/thestage_api/dtos/logging_controller/log_polling_request.py +13 -13
  108. thestage/services/clients/thestage_api/dtos/logging_controller/log_polling_response.py +14 -14
  109. thestage/services/clients/thestage_api/dtos/logging_controller/task_log_stream_request.py +7 -7
  110. thestage/services/clients/thestage_api/dtos/logging_controller/user_logs_query_request.py +21 -21
  111. thestage/services/clients/thestage_api/dtos/logging_controller/user_logs_query_response.py +14 -14
  112. thestage/services/clients/thestage_api/dtos/paginated_entity_list.py +11 -11
  113. thestage/services/clients/thestage_api/dtos/pagination_data.py +10 -10
  114. thestage/services/clients/thestage_api/dtos/price_definition.py +14 -14
  115. thestage/services/clients/thestage_api/dtos/project_controller/project_get_deploy_ssh_key_request.py +7 -7
  116. thestage/services/clients/thestage_api/dtos/project_controller/project_get_deploy_ssh_key_response.py +10 -10
  117. thestage/services/clients/thestage_api/dtos/project_controller/project_push_inference_simulator_model_request.py +8 -8
  118. thestage/services/clients/thestage_api/dtos/project_controller/project_push_inference_simulator_model_response.py +6 -6
  119. thestage/services/clients/thestage_api/dtos/project_controller/project_run_task_request.py +15 -15
  120. thestage/services/clients/thestage_api/dtos/project_controller/project_run_task_response.py +10 -10
  121. thestage/services/clients/thestage_api/dtos/project_controller/project_start_inference_simulator_request.py +13 -14
  122. thestage/services/clients/thestage_api/dtos/project_controller/project_start_inference_simulator_response.py +10 -10
  123. thestage/services/clients/thestage_api/dtos/project_response.py +32 -32
  124. thestage/services/clients/thestage_api/dtos/selfhosted_instance_response.py +56 -56
  125. thestage/services/clients/thestage_api/dtos/sftp_path_helper.py +13 -13
  126. thestage/services/clients/thestage_api/dtos/ssh_key_controller/add_ssh_key_to_user_request.py +8 -8
  127. thestage/services/clients/thestage_api/dtos/ssh_key_controller/add_ssh_key_to_user_response.py +11 -11
  128. thestage/services/clients/thestage_api/dtos/ssh_key_controller/add_ssh_public_key_to_instance_request.py +8 -8
  129. thestage/services/clients/thestage_api/dtos/ssh_key_controller/add_ssh_public_key_to_instance_response.py +11 -11
  130. thestage/services/clients/thestage_api/dtos/ssh_key_controller/is_user_has_public_ssh_key_request.py +7 -7
  131. thestage/services/clients/thestage_api/dtos/ssh_key_controller/is_user_has_public_ssh_key_response.py +12 -12
  132. thestage/services/clients/thestage_api/dtos/task_controller/task_list_for_project_request.py +10 -10
  133. thestage/services/clients/thestage_api/dtos/task_controller/task_list_for_project_response.py +12 -12
  134. thestage/services/clients/thestage_api/dtos/task_controller/task_status_localized_map_response.py +9 -9
  135. thestage/services/clients/thestage_api/dtos/task_controller/task_view_response.py +12 -12
  136. thestage/services/clients/thestage_api/dtos/user_controller/user_profile.py +12 -12
  137. thestage/services/clients/thestage_api/dtos/validate_token_response.py +11 -11
  138. thestage/services/config_provider/__init__.py +0 -0
  139. thestage/services/config_provider/config_provider.py +237 -237
  140. thestage/services/connect/connect_service.py +196 -196
  141. thestage/services/connect/dto/remote_server_config.py +9 -9
  142. thestage/services/container/__init__.py +0 -0
  143. thestage/services/container/container_service.py +374 -374
  144. thestage/services/container/mapper/__init__.py +0 -0
  145. thestage/services/container/mapper/container_mapper.py +30 -30
  146. thestage/services/core_files/config_entity.py +26 -26
  147. thestage/services/filesystem_service.py +133 -133
  148. thestage/services/instance/__init__.py +0 -0
  149. thestage/services/instance/instance_service.py +303 -303
  150. thestage/services/instance/mapper/__init__.py +0 -0
  151. thestage/services/instance/mapper/instance_mapper.py +24 -24
  152. thestage/services/instance/mapper/selfhosted_mapper.py +33 -33
  153. thestage/services/logging/byte_print_style.py +5 -5
  154. thestage/services/logging/dto/log_message.py +15 -15
  155. thestage/services/logging/dto/log_type.py +6 -6
  156. thestage/services/logging/exception/log_polling_exception.py +6 -6
  157. thestage/services/logging/logging_constants.py +3 -3
  158. thestage/services/logging/logging_service.py +367 -367
  159. thestage/services/project/__init__.py +0 -0
  160. thestage/services/project/dto/inference_simulator_dto.py +22 -22
  161. thestage/services/project/dto/inference_simulator_model_dto.py +20 -20
  162. thestage/services/project/dto/project_config.py +14 -14
  163. thestage/services/project/mapper/__init__.py +0 -0
  164. thestage/services/project/mapper/project_inference_simulator_mapper.py +21 -21
  165. thestage/services/project/mapper/project_inference_simulator_model_mapper.py +21 -21
  166. thestage/services/project/mapper/project_task_mapper.py +22 -22
  167. thestage/services/project/project_service.py +1260 -1241
  168. thestage/services/remote_server_service.py +609 -609
  169. thestage/services/service_factory.py +97 -97
  170. thestage/services/task/dto/task_dto.py +40 -40
  171. thestage/services/validation_service.py +61 -61
  172. {thestage-0.5.47.dist-info → thestage-0.5.49.dist-info}/LICENSE.txt +12 -12
  173. {thestage-0.5.47.dist-info → thestage-0.5.49.dist-info}/METADATA +1 -1
  174. thestage-0.5.49.dist-info/RECORD +176 -0
  175. {thestage-0.5.47.dist-info → thestage-0.5.49.dist-info}/WHEEL +1 -1
  176. thestage/debug_tests.py +0 -12
  177. thestage/services/clients/.DS_Store +0 -0
  178. thestage-0.5.47.dist-info/RECORD +0 -178
  179. {thestage-0.5.47.dist-info → thestage-0.5.49.dist-info}/entry_points.txt +0 -0
@@ -1,108 +1,108 @@
1
- import json
2
- from typing import Optional
3
-
4
- import requests
5
-
6
- from thestage.config import THESTAGE_API_URL
7
- from thestage.exceptions.auth_exception import AuthException
8
- from thestage import __version__
9
- from thestage.services.clients.thestage_api.core.http_client_exception import HttpClientException
10
- from thestage.services.clients.thestage_api.dtos.validate_token_response import ValidateTokenResponse
11
-
12
-
13
- class TheStageApiClientCore:
14
- def __init__(self, url: Optional[str] = None):
15
- self.__api_url = url
16
-
17
-
18
- def validate_token(self, token: str) -> ValidateTokenResponse:
19
- data = {
20
- "userApiToken": token,
21
- "cliVersion": __version__,
22
- }
23
-
24
- response = self._request(
25
- method='POST',
26
- url='/user-api/v1/validate-token',
27
- data=data,
28
- )
29
- result = ValidateTokenResponse.model_validate(response) if response else None
30
- return result
31
-
32
-
33
- def _get_host(self, ) -> str:
34
- return self.__api_url or THESTAGE_API_URL
35
-
36
- def _request(
37
- self,
38
- method: str,
39
- url: str,
40
- data: dict = None,
41
- query_params: dict = None,
42
- headers: Optional[dict] = None,
43
- token: Optional[str] = None,
44
- ):
45
- if not data:
46
- data = {}
47
-
48
- host = self._get_host()
49
- url = f'{host}{url}'
50
-
51
- request_headers = {
52
- 'Content-Type': 'application/json',
53
- }
54
-
55
- if token:
56
- request_headers['Authorization'] = f"Bearer {token}"
57
-
58
- if headers:
59
- request_headers.update(headers)
60
- response = requests.request(
61
- method=method,
62
- url=url,
63
- json=data,
64
- params=query_params,
65
- headers=request_headers,
66
- timeout=90,
67
-
68
- )
69
- return self._parse_api_response(response)
70
-
71
-
72
- @staticmethod
73
- def _parse_api_response(raw_response):
74
- content_type = raw_response.headers.get('content-type')
75
- message_error = None
76
- if content_type == 'application/json':
77
- try:
78
- result = raw_response.json()
79
- message_error = result.get('message', None)
80
- except json.JSONDecodeError:
81
- raise HttpClientException(
82
- message=f"Failed to parse server response",
83
- status_code=raw_response.status_code,
84
- )
85
- else:
86
- result = raw_response.content.text()
87
-
88
- if raw_response.status_code == 401:
89
- raise AuthException(
90
- message=f"Unauthorized",
91
- )
92
- elif raw_response.status_code == 403:
93
- raise HttpClientException(
94
- message=f"{message_error if message_error else 'Forbidden'} ({raw_response.status_code})",
95
- status_code=raw_response.status_code,
96
- )
97
- elif raw_response.status_code >= 400:
98
- raise HttpClientException(
99
- message=f"{message_error if message_error else 'Request error'} ({raw_response.status_code})",
100
- status_code=raw_response.status_code,
101
- )
102
- elif raw_response.status_code < 200 or raw_response.status_code > 300:
103
- raise HttpClientException(
104
- message=f"{message_error if message_error else 'Request error'} ({raw_response.status_code})",
105
- status_code=raw_response.status_code,
106
- )
107
-
108
- return result
1
+ import json
2
+ from typing import Optional
3
+
4
+ import requests
5
+
6
+ from thestage.config import THESTAGE_API_URL
7
+ from thestage.exceptions.auth_exception import AuthException
8
+ from thestage import __version__
9
+ from thestage.services.clients.thestage_api.core.http_client_exception import HttpClientException
10
+ from thestage.services.clients.thestage_api.dtos.validate_token_response import ValidateTokenResponse
11
+
12
+
13
+ class TheStageApiClientCore:
14
+ def __init__(self, url: Optional[str] = None):
15
+ self.__api_url = url
16
+
17
+
18
+ def validate_token(self, token: str) -> ValidateTokenResponse:
19
+ data = {
20
+ "userApiToken": token,
21
+ "cliVersion": __version__,
22
+ }
23
+
24
+ response = self._request(
25
+ method='POST',
26
+ url='/user-api/v1/validate-token',
27
+ data=data,
28
+ )
29
+ result = ValidateTokenResponse.model_validate(response) if response else None
30
+ return result
31
+
32
+
33
+ def _get_host(self, ) -> str:
34
+ return self.__api_url or THESTAGE_API_URL
35
+
36
+ def _request(
37
+ self,
38
+ method: str,
39
+ url: str,
40
+ data: dict = None,
41
+ query_params: dict = None,
42
+ headers: Optional[dict] = None,
43
+ token: Optional[str] = None,
44
+ ):
45
+ if not data:
46
+ data = {}
47
+
48
+ host = self._get_host()
49
+ url = f'{host}{url}'
50
+
51
+ request_headers = {
52
+ 'Content-Type': 'application/json',
53
+ }
54
+
55
+ if token:
56
+ request_headers['Authorization'] = f"Bearer {token}"
57
+
58
+ if headers:
59
+ request_headers.update(headers)
60
+ response = requests.request(
61
+ method=method,
62
+ url=url,
63
+ json=data,
64
+ params=query_params,
65
+ headers=request_headers,
66
+ timeout=90,
67
+
68
+ )
69
+ return self._parse_api_response(response)
70
+
71
+
72
+ @staticmethod
73
+ def _parse_api_response(raw_response):
74
+ content_type = raw_response.headers.get('content-type')
75
+ message_error = None
76
+ if content_type == 'application/json':
77
+ try:
78
+ result = raw_response.json()
79
+ message_error = result.get('message', None)
80
+ except json.JSONDecodeError:
81
+ raise HttpClientException(
82
+ message=f"Failed to parse server response",
83
+ status_code=raw_response.status_code,
84
+ )
85
+ else:
86
+ result = raw_response.content.text()
87
+
88
+ if raw_response.status_code == 401:
89
+ raise AuthException(
90
+ message=f"Unauthorized",
91
+ )
92
+ elif raw_response.status_code == 403:
93
+ raise HttpClientException(
94
+ message=f"{message_error if message_error else 'Forbidden'} ({raw_response.status_code})",
95
+ status_code=raw_response.status_code,
96
+ )
97
+ elif raw_response.status_code >= 400:
98
+ raise HttpClientException(
99
+ message=f"{message_error if message_error else 'Request error'} ({raw_response.status_code})",
100
+ status_code=raw_response.status_code,
101
+ )
102
+ elif raw_response.status_code < 200 or raw_response.status_code > 300:
103
+ raise HttpClientException(
104
+ message=f"{message_error if message_error else 'Request error'} ({raw_response.status_code})",
105
+ status_code=raw_response.status_code,
106
+ )
107
+
108
+ return result
@@ -1,12 +1,12 @@
1
- from thestage.exceptions.base_exception import BaseAbstractException
2
-
3
-
4
- class HttpClientException(BaseAbstractException):
5
- _status_code: int = 0
6
-
7
- def __init__(self, message: str, status_code: int, ):
8
- super(HttpClientException, self).__init__(message=message)
9
- self._status_code = status_code
10
-
11
- def get_status_code(self) -> int:
12
- return self._status_code
1
+ from thestage.exceptions.base_exception import BaseAbstractException
2
+
3
+
4
+ class HttpClientException(BaseAbstractException):
5
+ _status_code: int = 0
6
+
7
+ def __init__(self, message: str, status_code: int, ):
8
+ super(HttpClientException, self).__init__(message=message)
9
+ self._status_code = status_code
10
+
11
+ def get_status_code(self) -> int:
12
+ return self._status_code
File without changes
@@ -1,13 +1,13 @@
1
- from typing import Optional, List
2
-
3
- from pydantic import BaseModel, Field
4
-
5
-
6
- class TheStageBaseResponse(BaseModel):
7
- message: Optional[str] = Field(None, alias='message')
8
- is_success: Optional[bool] = Field(None, alias='isSuccess')
9
-
10
-
11
- # TODO: add Generic then back doing that
12
- class TheStageBasePaginatedResponse(TheStageBaseResponse):
13
- fields_with_error: List[str] = Field(None, alias='fieldsWithError')
1
+ from typing import Optional, List
2
+
3
+ from pydantic import BaseModel, Field
4
+
5
+
6
+ class TheStageBaseResponse(BaseModel):
7
+ message: Optional[str] = Field(None, alias='message')
8
+ is_success: Optional[bool] = Field(None, alias='isSuccess')
9
+
10
+
11
+ # TODO: add Generic then back doing that
12
+ class TheStageBasePaginatedResponse(TheStageBaseResponse):
13
+ fields_with_error: List[str] = Field(None, alias='fieldsWithError')
@@ -1,19 +1,19 @@
1
- from typing import Optional
2
-
3
- from pydantic import BaseModel, Field, ConfigDict
4
-
5
- from thestage.services.clients.thestage_api.dtos.enums.location_region import LocationRegionEnumDto
6
- from thestage.services.clients.thestage_api.dtos.enums.provider_name import ProviderNameEnumDto
7
-
8
-
9
- class CloudProviderRegionDto(BaseModel):
10
- model_config = ConfigDict(use_enum_values=True)
11
-
12
- id: Optional[int] = Field(None, alias='id')
13
- region_key: Optional[str] = Field(None, alias='regionKey')
14
- provider_name: ProviderNameEnumDto = Field(ProviderNameEnumDto.UNKNOWN, alias='providerName')
15
- location_region: LocationRegionEnumDto = Field(LocationRegionEnumDto.UNKNOWN, alias='locationRegion')
16
- location_country: Optional[str] = Field(None, alias='locationCountry')
17
- location_detail: Optional[str] = Field(None, alias='locationDetail')
18
- is_active_for_storages: Optional[bool] = Field(False, alias='isActiveForStorages')
19
- is_active_for_instances: Optional[bool] = Field(False, alias='isActiveForInstances')
1
+ from typing import Optional
2
+
3
+ from pydantic import BaseModel, Field, ConfigDict
4
+
5
+ from thestage.services.clients.thestage_api.dtos.enums.location_region import LocationRegionEnumDto
6
+ from thestage.services.clients.thestage_api.dtos.enums.provider_name import ProviderNameEnumDto
7
+
8
+
9
+ class CloudProviderRegionDto(BaseModel):
10
+ model_config = ConfigDict(use_enum_values=True)
11
+
12
+ id: Optional[int] = Field(None, alias='id')
13
+ region_key: Optional[str] = Field(None, alias='regionKey')
14
+ provider_name: ProviderNameEnumDto = Field(ProviderNameEnumDto.UNKNOWN, alias='providerName')
15
+ location_region: LocationRegionEnumDto = Field(LocationRegionEnumDto.UNKNOWN, alias='locationRegion')
16
+ location_country: Optional[str] = Field(None, alias='locationCountry')
17
+ location_detail: Optional[str] = Field(None, alias='locationDetail')
18
+ is_active_for_storages: Optional[bool] = Field(False, alias='isActiveForStorages')
19
+ is_active_for_instances: Optional[bool] = Field(False, alias='isActiveForInstances')
@@ -1,11 +1,11 @@
1
- from typing import Optional, List
2
-
3
- from pydantic import Field, BaseModel, ConfigDict
4
-
5
- from thestage.services.clients.thestage_api.dtos.enums.container_pending_action import DockerContainerAction
6
-
7
- class DockerContainerActionRequestDto(BaseModel):
8
- model_config = ConfigDict(use_enum_values=True)
9
-
10
- container_id: Optional[int] = Field(None, alias='dockerContainerId')
11
- action: DockerContainerAction = Field(None, alias='action')
1
+ from typing import Optional, List
2
+
3
+ from pydantic import Field, BaseModel, ConfigDict
4
+
5
+ from thestage.services.clients.thestage_api.dtos.enums.container_pending_action import DockerContainerAction
6
+
7
+ class DockerContainerActionRequestDto(BaseModel):
8
+ model_config = ConfigDict(use_enum_values=True)
9
+
10
+ container_id: Optional[int] = Field(None, alias='dockerContainerId')
11
+ action: DockerContainerAction = Field(None, alias='action')
@@ -1,67 +1,67 @@
1
- from typing import Optional, List, Dict
2
-
3
- from pydantic import Field, BaseModel, ConfigDict
4
-
5
- from thestage.services.clients.thestage_api.dtos.docker_container_assigned_device import DockerContainerAssignedDeviceDto
6
- from thestage.services.clients.thestage_api.dtos.docker_container_mapping import DockerContainerMappingDto
7
- from thestage.services.clients.thestage_api.dtos.enums.container_pending_action import DockerContainerAction
8
- from thestage.services.clients.thestage_api.dtos.enums.container_status import DockerContainerStatus
9
- from thestage.services.clients.thestage_api.dtos.frontend_status import FrontendStatusDto
10
- from thestage.services.clients.thestage_api.dtos.installed_service import DockerContainerInstalledServicesDto
11
- from thestage.services.clients.thestage_api.dtos.instance_rented_response import InstanceRentedDto
12
- from thestage.services.clients.thestage_api.dtos.project_response import ProjectDto
13
- from thestage.services.clients.thestage_api.dtos.selfhosted_instance_response import SelfHostedInstanceDto
14
- from thestage.services.clients.thestage_api.dtos.base_response import TheStageBaseResponse, TheStageBasePaginatedResponse
15
- from thestage.services.clients.thestage_api.dtos.pagination_data import PaginationData
16
-
17
-
18
- class DockerContainerDto(BaseModel):
19
- model_config = ConfigDict(use_enum_values=True)
20
-
21
- id: Optional[int] = Field(None, alias='id')
22
- instance_rented_id: Optional[int] = Field(None, alias='instanceRentedId')
23
- selfhosted_instance_id: Optional[int] = Field(None, alias='selfhostedInstanceId')
24
- instance_rented: Optional[InstanceRentedDto] = Field(None, alias='instanceRented')
25
- selfhosted_instance: Optional[SelfHostedInstanceDto] = Field(None, alias='selfhostedInstance')
26
-
27
- project_id: Optional[int] = Field(None, alias='projectId')
28
- project: Optional[ProjectDto] = Field(None, alias='project')
29
-
30
- is_default: Optional[bool] = Field(None, alias='isDefault')
31
- system_name: Optional[str] = Field(None, alias='systemName')
32
- title: Optional[str] = Field(None, alias='title')
33
- slug: Optional[str] = Field(None, alias='slug')
34
- docker_image: Optional[str] = Field(None, alias='dockerImage')
35
- assigned_devices: Optional[DockerContainerAssignedDeviceDto] = Field(None, alias='assignedDevices')
36
- mappings: Optional[DockerContainerMappingDto] = Field(None, alias='mappings')
37
-
38
- frontend_status: Optional[FrontendStatusDto] = Field(None, alias='frontendStatus')
39
-
40
- pending_action: Optional[DockerContainerAction] = Field(None, alias='pendingAction')
41
- installed_services: Optional[DockerContainerInstalledServicesDto] = Field(None, alias='installedServices')
42
- created_at: Optional[str] = Field(None, alias='createdAt')
43
- updated_at: Optional[str] = Field(None, alias='updatedAt')
44
-
45
-
46
- class DockerContainerPaginated(BaseModel):
47
- model_config = ConfigDict(use_enum_values=True)
48
-
49
- entities: List[DockerContainerDto] = Field(default_factory=list, alias='entities')
50
- current_page: Optional[int] = Field(None, alias='currentPage')
51
- last_page: Optional[bool] = Field(None, alias='lastPage')
52
- total_pages: Optional[int] = Field(None, alias='totalPages')
53
- pagination_data: Optional[PaginationData] = Field(None, alias='paginationData')
54
-
55
- #
56
- # class DockerContainerListResponse(TheStageBasePaginatedResponse):
57
- # paginated_list: Optional[DockerContainerPaginated] = Field(None, alias='paginatedList')
58
-
59
-
60
- class DockerContainerViewResponse(TheStageBaseResponse):
61
- docker_container: Optional[DockerContainerDto] = Field(None, alias='dockerContainer')
62
-
63
-
64
- class ContainerBusinessStatusMapperResponse(TheStageBasePaginatedResponse):
65
- model_config = ConfigDict(use_enum_values=True)
66
-
67
- docker_container_status_map: Dict[str, str] = Field(default={}, alias='dockerContainerStatusMap')
1
+ from typing import Optional, List, Dict
2
+
3
+ from pydantic import Field, BaseModel, ConfigDict
4
+
5
+ from thestage.services.clients.thestage_api.dtos.docker_container_assigned_device import DockerContainerAssignedDeviceDto
6
+ from thestage.services.clients.thestage_api.dtos.docker_container_mapping import DockerContainerMappingDto
7
+ from thestage.services.clients.thestage_api.dtos.enums.container_pending_action import DockerContainerAction
8
+ from thestage.services.clients.thestage_api.dtos.enums.container_status import DockerContainerStatus
9
+ from thestage.services.clients.thestage_api.dtos.frontend_status import FrontendStatusDto
10
+ from thestage.services.clients.thestage_api.dtos.installed_service import DockerContainerInstalledServicesDto
11
+ from thestage.services.clients.thestage_api.dtos.instance_rented_response import InstanceRentedDto
12
+ from thestage.services.clients.thestage_api.dtos.project_response import ProjectDto
13
+ from thestage.services.clients.thestage_api.dtos.selfhosted_instance_response import SelfHostedInstanceDto
14
+ from thestage.services.clients.thestage_api.dtos.base_response import TheStageBaseResponse, TheStageBasePaginatedResponse
15
+ from thestage.services.clients.thestage_api.dtos.pagination_data import PaginationData
16
+
17
+
18
+ class DockerContainerDto(BaseModel):
19
+ model_config = ConfigDict(use_enum_values=True)
20
+
21
+ id: Optional[int] = Field(None, alias='id')
22
+ instance_rented_id: Optional[int] = Field(None, alias='instanceRentedId')
23
+ selfhosted_instance_id: Optional[int] = Field(None, alias='selfhostedInstanceId')
24
+ instance_rented: Optional[InstanceRentedDto] = Field(None, alias='instanceRented')
25
+ selfhosted_instance: Optional[SelfHostedInstanceDto] = Field(None, alias='selfhostedInstance')
26
+
27
+ project_id: Optional[int] = Field(None, alias='projectId')
28
+ project: Optional[ProjectDto] = Field(None, alias='project')
29
+
30
+ is_default: Optional[bool] = Field(None, alias='isDefault')
31
+ system_name: Optional[str] = Field(None, alias='systemName')
32
+ title: Optional[str] = Field(None, alias='title')
33
+ slug: Optional[str] = Field(None, alias='slug')
34
+ docker_image: Optional[str] = Field(None, alias='dockerImage')
35
+ assigned_devices: Optional[DockerContainerAssignedDeviceDto] = Field(None, alias='assignedDevices')
36
+ mappings: Optional[DockerContainerMappingDto] = Field(None, alias='mappings')
37
+
38
+ frontend_status: Optional[FrontendStatusDto] = Field(None, alias='frontendStatus')
39
+
40
+ pending_action: Optional[DockerContainerAction] = Field(None, alias='pendingAction')
41
+ installed_services: Optional[DockerContainerInstalledServicesDto] = Field(None, alias='installedServices')
42
+ created_at: Optional[str] = Field(None, alias='createdAt')
43
+ updated_at: Optional[str] = Field(None, alias='updatedAt')
44
+
45
+
46
+ class DockerContainerPaginated(BaseModel):
47
+ model_config = ConfigDict(use_enum_values=True)
48
+
49
+ entities: List[DockerContainerDto] = Field(default_factory=list, alias='entities')
50
+ current_page: Optional[int] = Field(None, alias='currentPage')
51
+ last_page: Optional[bool] = Field(None, alias='lastPage')
52
+ total_pages: Optional[int] = Field(None, alias='totalPages')
53
+ pagination_data: Optional[PaginationData] = Field(None, alias='paginationData')
54
+
55
+ #
56
+ # class DockerContainerListResponse(TheStageBasePaginatedResponse):
57
+ # paginated_list: Optional[DockerContainerPaginated] = Field(None, alias='paginatedList')
58
+
59
+
60
+ class DockerContainerViewResponse(TheStageBaseResponse):
61
+ docker_container: Optional[DockerContainerDto] = Field(None, alias='dockerContainer')
62
+
63
+
64
+ class ContainerBusinessStatusMapperResponse(TheStageBasePaginatedResponse):
65
+ model_config = ConfigDict(use_enum_values=True)
66
+
67
+ docker_container_status_map: Dict[str, str] = Field(default={}, alias='dockerContainerStatusMap')
@@ -1,10 +1,10 @@
1
- from typing import Optional, List
2
-
3
- from pydantic import Field, BaseModel, ConfigDict
4
-
5
-
6
- class DockerContainerAssignedDeviceDto(BaseModel):
7
- model_config = ConfigDict(use_enum_values=True)
8
-
9
- assigned_cpus: List[int] = Field(default_factory=list, alias='assignedCpusIds')
10
- assigned_gpu_ids: List[int] = Field(default_factory=list, alias='assignedGpuIds')
1
+ from typing import Optional, List
2
+
3
+ from pydantic import Field, BaseModel, ConfigDict
4
+
5
+
6
+ class DockerContainerAssignedDeviceDto(BaseModel):
7
+ model_config = ConfigDict(use_enum_values=True)
8
+
9
+ assigned_cpus: List[int] = Field(default_factory=list, alias='assignedCpusIds')
10
+ assigned_gpu_ids: List[int] = Field(default_factory=list, alias='assignedGpuIds')
@@ -1,13 +1,13 @@
1
- from typing import Optional, List
2
-
3
- from pydantic import Field, ConfigDict, BaseModel
4
-
5
- from thestage.services.clients.thestage_api.dtos.entity_filter_request import EntityFilterRequest
6
-
7
-
8
- class DockerContainerListRequest(BaseModel):
9
- model_config = ConfigDict(use_enum_values=True)
10
-
11
- entityFilterRequest: EntityFilterRequest = Field(None, alias='entityFilterRequest')
12
- statuses: Optional[List[str]] = Field(None, alias='statuses')
13
- projectId: Optional[int] = Field(None, alias='projectId')
1
+ from typing import Optional, List
2
+
3
+ from pydantic import Field, ConfigDict, BaseModel
4
+
5
+ from thestage.services.clients.thestage_api.dtos.entity_filter_request import EntityFilterRequest
6
+
7
+
8
+ class DockerContainerListRequest(BaseModel):
9
+ model_config = ConfigDict(use_enum_values=True)
10
+
11
+ entityFilterRequest: EntityFilterRequest = Field(None, alias='entityFilterRequest')
12
+ statuses: Optional[List[str]] = Field(None, alias='statuses')
13
+ projectId: Optional[int] = Field(None, alias='projectId')
@@ -1,13 +1,13 @@
1
- from typing import List, Optional
2
-
3
- from pydantic import Field, ConfigDict, BaseModel
4
-
5
- from thestage.services.clients.thestage_api.dtos.base_response import TheStageBaseResponse
6
- from thestage.services.clients.thestage_api.dtos.container_response import DockerContainerDto
7
- from thestage.services.clients.thestage_api.dtos.paginated_entity_list import PaginatedEntityList
8
- from thestage.services.clients.thestage_api.dtos.pagination_data import PaginationData
9
-
10
- class DockerContainerListResponse(TheStageBaseResponse):
11
- model_config = ConfigDict(use_enum_values=True)
12
-
13
- paginatedList: PaginatedEntityList[DockerContainerDto] = Field(None, alias='paginatedList')
1
+ from typing import List, Optional
2
+
3
+ from pydantic import Field, ConfigDict, BaseModel
4
+
5
+ from thestage.services.clients.thestage_api.dtos.base_response import TheStageBaseResponse
6
+ from thestage.services.clients.thestage_api.dtos.container_response import DockerContainerDto
7
+ from thestage.services.clients.thestage_api.dtos.paginated_entity_list import PaginatedEntityList
8
+ from thestage.services.clients.thestage_api.dtos.pagination_data import PaginationData
9
+
10
+ class DockerContainerListResponse(TheStageBaseResponse):
11
+ model_config = ConfigDict(use_enum_values=True)
12
+
13
+ paginatedList: PaginatedEntityList[DockerContainerDto] = Field(None, alias='paginatedList')
@@ -1,10 +1,10 @@
1
- from typing import Optional, List, Dict
2
-
3
- from pydantic import Field, BaseModel, ConfigDict
4
-
5
-
6
- class DockerContainerMappingDto(BaseModel):
7
- model_config = ConfigDict(use_enum_values=True)
8
-
9
- directory_mappings: Dict[str, str] = Field(default_factory=dict, alias='directoryMappings')
10
- port_mappings: Dict[str, str] = Field(default_factory=dict, alias='portMappings')
1
+ from typing import Optional, List, Dict
2
+
3
+ from pydantic import Field, BaseModel, ConfigDict
4
+
5
+
6
+ class DockerContainerMappingDto(BaseModel):
7
+ model_config = ConfigDict(use_enum_values=True)
8
+
9
+ directory_mappings: Dict[str, str] = Field(default_factory=dict, alias='directoryMappings')
10
+ port_mappings: Dict[str, str] = Field(default_factory=dict, alias='portMappings')
@@ -1,14 +1,14 @@
1
- from typing import Optional
2
-
3
- from pydantic import ConfigDict, BaseModel, Field
4
-
5
- from thestage.entities.enums.order_direction_type import OrderDirectionType
6
-
7
-
8
- class EntityFilterRequest(BaseModel):
9
- model_config = ConfigDict(use_enum_values=True)
10
-
11
- orderByField: Optional[str] = Field(None, alias='orderByField')
12
- orderByDirection: Optional[OrderDirectionType] = Field(None, alias='orderByDirection')
13
- page: Optional[int] = Field(None, alias='page')
14
- limit: Optional[int] = Field(None, alias='limit')
1
+ from typing import Optional
2
+
3
+ from pydantic import ConfigDict, BaseModel, Field
4
+
5
+ from thestage.entities.enums.order_direction_type import OrderDirectionType
6
+
7
+
8
+ class EntityFilterRequest(BaseModel):
9
+ model_config = ConfigDict(use_enum_values=True)
10
+
11
+ orderByField: Optional[str] = Field(None, alias='orderByField')
12
+ orderByDirection: Optional[OrderDirectionType] = Field(None, alias='orderByDirection')
13
+ page: Optional[int] = Field(None, alias='page')
14
+ limit: Optional[int] = Field(None, alias='limit')
@@ -1,10 +1,10 @@
1
- from enum import Enum
2
-
3
-
4
- class DockerContainerAction(str, Enum):
5
- CREATE: str = 'CREATE'
6
- UPDATE: str = 'UPDATE'
7
- START: str = 'START'
8
- RESTART: str = 'RESTART'
9
- STOP: str = 'STOP'
10
- DELETE: str = 'DELETE'
1
+ from enum import Enum
2
+
3
+
4
+ class DockerContainerAction(str, Enum):
5
+ CREATE: str = 'CREATE'
6
+ UPDATE: str = 'UPDATE'
7
+ START: str = 'START'
8
+ RESTART: str = 'RESTART'
9
+ STOP: str = 'STOP'
10
+ DELETE: str = 'DELETE'