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.
- thestage/.env +5 -5
- thestage/__init__.py +3 -4
- thestage/__main__.py +9 -9
- thestage/cli_command.py +56 -56
- thestage/cli_command_helper.py +51 -51
- thestage/color_scheme/color_scheme.py +7 -7
- thestage/config/__init__.py +18 -18
- thestage/config/config_storage.py +5 -3
- thestage/config/env_base.py +7 -7
- thestage/controllers/__init__.py +0 -0
- thestage/controllers/base_controller.py +67 -67
- thestage/controllers/config_controller.py +137 -137
- thestage/controllers/container_controller.py +389 -389
- thestage/controllers/instance_controller.py +183 -183
- thestage/controllers/project_controller.py +802 -783
- thestage/controllers/utils_controller.py +32 -32
- thestage/debug_main.dist.py +28 -28
- thestage/entities/__init__.py +0 -0
- thestage/entities/container.py +17 -17
- thestage/entities/enums/__init__.py +0 -0
- thestage/entities/enums/order_direction_type.py +6 -6
- thestage/entities/enums/shell_type.py +7 -7
- thestage/entities/enums/tail_output_type.py +6 -6
- thestage/entities/enums/yes_no_response.py +7 -7
- thestage/entities/file_item.py +27 -27
- thestage/entities/project_inference_simulator.py +18 -18
- thestage/entities/project_inference_simulator_model.py +16 -16
- thestage/entities/project_task.py +19 -19
- thestage/entities/rented_instance.py +19 -19
- thestage/entities/self_hosted_instance.py +18 -18
- thestage/exceptions/__init__.py +0 -0
- thestage/exceptions/auth_exception.py +6 -6
- thestage/exceptions/base_exception.py +13 -13
- thestage/exceptions/business_logic_exception.py +6 -6
- thestage/exceptions/config_exception.py +6 -6
- thestage/exceptions/file_system_exception.py +6 -6
- thestage/exceptions/git_access_exception.py +17 -17
- thestage/exceptions/remote_server_exception.py +24 -24
- thestage/git/ProgressPrinter.py +22 -22
- thestage/helpers/__init__.py +0 -0
- thestage/helpers/error_handler.py +115 -115
- thestage/helpers/exception_hook.py +14 -14
- thestage/helpers/logger/__init__.py +0 -0
- thestage/helpers/logger/app_logger.py +50 -50
- thestage/helpers/ssh_util.py +38 -38
- thestage/i18n/en_GB/messages.po +947 -947
- thestage/i18n/translation.py +9 -9
- thestage/main.py +36 -36
- thestage/services/.env +6 -6
- thestage/services/__init__.py +0 -0
- thestage/services/abstract_mapper.py +9 -9
- thestage/services/abstract_service.py +87 -87
- thestage/services/app_config_service.py +52 -52
- thestage/services/clients/__init__.py +0 -0
- thestage/services/clients/git/__init__.py +0 -0
- thestage/services/clients/git/git_client.py +433 -331
- thestage/services/clients/thestage_api/__init__.py +0 -0
- thestage/services/clients/thestage_api/api_client.py +718 -720
- thestage/services/clients/thestage_api/core/api_client_core.py +108 -108
- thestage/services/clients/thestage_api/core/http_client_exception.py +12 -12
- thestage/services/clients/thestage_api/dtos/__init__.py +0 -0
- thestage/services/clients/thestage_api/dtos/base_response.py +13 -13
- thestage/services/clients/thestage_api/dtos/cloud_provider_region.py +19 -19
- thestage/services/clients/thestage_api/dtos/container_param_request.py +11 -11
- thestage/services/clients/thestage_api/dtos/container_response.py +67 -67
- thestage/services/clients/thestage_api/dtos/docker_container_assigned_device.py +10 -10
- thestage/services/clients/thestage_api/dtos/docker_container_controller/docker_container_list_request.py +13 -13
- thestage/services/clients/thestage_api/dtos/docker_container_controller/docker_container_list_response.py +13 -13
- thestage/services/clients/thestage_api/dtos/docker_container_mapping.py +10 -10
- thestage/services/clients/thestage_api/dtos/entity_filter_request.py +14 -14
- thestage/services/clients/thestage_api/dtos/enums/__init__.py +0 -0
- thestage/services/clients/thestage_api/dtos/enums/container_pending_action.py +10 -10
- thestage/services/clients/thestage_api/dtos/enums/container_status.py +17 -17
- thestage/services/clients/thestage_api/dtos/enums/cpu_type.py +8 -8
- thestage/services/clients/thestage_api/dtos/enums/currency_type.py +10 -10
- thestage/services/clients/thestage_api/dtos/enums/daemon_status.py +9 -9
- thestage/services/clients/thestage_api/dtos/enums/disk_type.py +7 -7
- thestage/services/clients/thestage_api/dtos/enums/drive_type.py +7 -7
- thestage/services/clients/thestage_api/dtos/enums/gpu_name.py +8 -8
- thestage/services/clients/thestage_api/dtos/enums/inference_model_status.py +9 -9
- thestage/services/clients/thestage_api/dtos/enums/inference_simulator_status.py +15 -15
- thestage/services/clients/thestage_api/dtos/enums/instance_rented_status.py +17 -17
- thestage/services/clients/thestage_api/dtos/enums/instance_type.py +7 -7
- thestage/services/clients/thestage_api/dtos/enums/location_region.py +11 -11
- thestage/services/clients/thestage_api/dtos/enums/power_status.py +10 -10
- thestage/services/clients/thestage_api/dtos/enums/provider_name.py +11 -11
- thestage/services/clients/thestage_api/dtos/enums/selfhosted_status.py +10 -10
- thestage/services/clients/thestage_api/dtos/enums/task_execution_status.py +12 -12
- thestage/services/clients/thestage_api/dtos/enums/task_status.py +12 -12
- thestage/services/clients/thestage_api/dtos/frontend_status.py +10 -10
- thestage/services/clients/thestage_api/dtos/inference_controller/deploy_inference_model_to_instance_request.py +13 -13
- thestage/services/clients/thestage_api/dtos/inference_controller/deploy_inference_model_to_instance_response.py +13 -13
- thestage/services/clients/thestage_api/dtos/inference_controller/deploy_inference_model_to_sagemaker_request.py +12 -12
- thestage/services/clients/thestage_api/dtos/inference_controller/deploy_inference_model_to_sagemaker_response.py +12 -12
- thestage/services/clients/thestage_api/dtos/inference_controller/get_inference_simulator_request.py +10 -10
- thestage/services/clients/thestage_api/dtos/inference_controller/get_inference_simulator_response.py +13 -13
- thestage/services/clients/thestage_api/dtos/inference_controller/inference_simulator_list_for_project_request.py +14 -14
- thestage/services/clients/thestage_api/dtos/inference_controller/inference_simulator_list_for_project_response.py +12 -12
- thestage/services/clients/thestage_api/dtos/inference_controller/inference_simulator_model_list_for_project_request.py +12 -12
- thestage/services/clients/thestage_api/dtos/inference_controller/inference_simulator_model_list_for_project_response.py +13 -13
- thestage/services/clients/thestage_api/dtos/inference_simulator_model_response.py +11 -11
- thestage/services/clients/thestage_api/dtos/inference_simulator_response.py +11 -11
- thestage/services/clients/thestage_api/dtos/installed_service.py +17 -17
- thestage/services/clients/thestage_api/dtos/instance_detected_gpus.py +20 -20
- thestage/services/clients/thestage_api/dtos/instance_rented_response.py +71 -71
- thestage/services/clients/thestage_api/dtos/logging_controller/docker_container_log_stream_request.py +7 -7
- thestage/services/clients/thestage_api/dtos/logging_controller/log_polling_request.py +13 -13
- thestage/services/clients/thestage_api/dtos/logging_controller/log_polling_response.py +14 -14
- thestage/services/clients/thestage_api/dtos/logging_controller/task_log_stream_request.py +7 -7
- thestage/services/clients/thestage_api/dtos/logging_controller/user_logs_query_request.py +21 -21
- thestage/services/clients/thestage_api/dtos/logging_controller/user_logs_query_response.py +14 -14
- thestage/services/clients/thestage_api/dtos/paginated_entity_list.py +11 -11
- thestage/services/clients/thestage_api/dtos/pagination_data.py +10 -10
- thestage/services/clients/thestage_api/dtos/price_definition.py +14 -14
- thestage/services/clients/thestage_api/dtos/project_controller/project_get_deploy_ssh_key_request.py +7 -7
- thestage/services/clients/thestage_api/dtos/project_controller/project_get_deploy_ssh_key_response.py +10 -10
- thestage/services/clients/thestage_api/dtos/project_controller/project_push_inference_simulator_model_request.py +8 -8
- thestage/services/clients/thestage_api/dtos/project_controller/project_push_inference_simulator_model_response.py +6 -6
- thestage/services/clients/thestage_api/dtos/project_controller/project_run_task_request.py +15 -15
- thestage/services/clients/thestage_api/dtos/project_controller/project_run_task_response.py +10 -10
- thestage/services/clients/thestage_api/dtos/project_controller/project_start_inference_simulator_request.py +13 -14
- thestage/services/clients/thestage_api/dtos/project_controller/project_start_inference_simulator_response.py +10 -10
- thestage/services/clients/thestage_api/dtos/project_response.py +32 -32
- thestage/services/clients/thestage_api/dtos/selfhosted_instance_response.py +56 -56
- thestage/services/clients/thestage_api/dtos/sftp_path_helper.py +13 -13
- thestage/services/clients/thestage_api/dtos/ssh_key_controller/add_ssh_key_to_user_request.py +8 -8
- thestage/services/clients/thestage_api/dtos/ssh_key_controller/add_ssh_key_to_user_response.py +11 -11
- thestage/services/clients/thestage_api/dtos/ssh_key_controller/add_ssh_public_key_to_instance_request.py +8 -8
- thestage/services/clients/thestage_api/dtos/ssh_key_controller/add_ssh_public_key_to_instance_response.py +11 -11
- thestage/services/clients/thestage_api/dtos/ssh_key_controller/is_user_has_public_ssh_key_request.py +7 -7
- thestage/services/clients/thestage_api/dtos/ssh_key_controller/is_user_has_public_ssh_key_response.py +12 -12
- thestage/services/clients/thestage_api/dtos/task_controller/task_list_for_project_request.py +10 -10
- thestage/services/clients/thestage_api/dtos/task_controller/task_list_for_project_response.py +12 -12
- thestage/services/clients/thestage_api/dtos/task_controller/task_status_localized_map_response.py +9 -9
- thestage/services/clients/thestage_api/dtos/task_controller/task_view_response.py +12 -12
- thestage/services/clients/thestage_api/dtos/user_controller/user_profile.py +12 -12
- thestage/services/clients/thestage_api/dtos/validate_token_response.py +11 -11
- thestage/services/config_provider/__init__.py +0 -0
- thestage/services/config_provider/config_provider.py +237 -237
- thestage/services/connect/connect_service.py +196 -196
- thestage/services/connect/dto/remote_server_config.py +9 -9
- thestage/services/container/__init__.py +0 -0
- thestage/services/container/container_service.py +374 -374
- thestage/services/container/mapper/__init__.py +0 -0
- thestage/services/container/mapper/container_mapper.py +30 -30
- thestage/services/core_files/config_entity.py +26 -26
- thestage/services/filesystem_service.py +133 -133
- thestage/services/instance/__init__.py +0 -0
- thestage/services/instance/instance_service.py +303 -303
- thestage/services/instance/mapper/__init__.py +0 -0
- thestage/services/instance/mapper/instance_mapper.py +24 -24
- thestage/services/instance/mapper/selfhosted_mapper.py +33 -33
- thestage/services/logging/byte_print_style.py +5 -5
- thestage/services/logging/dto/log_message.py +15 -15
- thestage/services/logging/dto/log_type.py +6 -6
- thestage/services/logging/exception/log_polling_exception.py +6 -6
- thestage/services/logging/logging_constants.py +3 -3
- thestage/services/logging/logging_service.py +367 -367
- thestage/services/project/__init__.py +0 -0
- thestage/services/project/dto/inference_simulator_dto.py +22 -22
- thestage/services/project/dto/inference_simulator_model_dto.py +20 -20
- thestage/services/project/dto/project_config.py +14 -14
- thestage/services/project/mapper/__init__.py +0 -0
- thestage/services/project/mapper/project_inference_simulator_mapper.py +21 -21
- thestage/services/project/mapper/project_inference_simulator_model_mapper.py +21 -21
- thestage/services/project/mapper/project_task_mapper.py +22 -22
- thestage/services/project/project_service.py +1260 -1241
- thestage/services/remote_server_service.py +609 -609
- thestage/services/service_factory.py +97 -97
- thestage/services/task/dto/task_dto.py +40 -40
- thestage/services/validation_service.py +61 -61
- {thestage-0.5.47.dist-info → thestage-0.5.49.dist-info}/LICENSE.txt +12 -12
- {thestage-0.5.47.dist-info → thestage-0.5.49.dist-info}/METADATA +1 -1
- thestage-0.5.49.dist-info/RECORD +176 -0
- {thestage-0.5.47.dist-info → thestage-0.5.49.dist-info}/WHEEL +1 -1
- thestage/debug_tests.py +0 -12
- thestage/services/clients/.DS_Store +0 -0
- thestage-0.5.47.dist-info/RECORD +0 -178
- {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')
|
|
File without changes
|
|
@@ -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'
|