thestage 0.6.2__py3-none-any.whl → 0.6.4__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 +4 -5
- thestage/__init__.py +3 -3
- 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 -5
- 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 +810 -810
- 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 +17 -17
- 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 +436 -436
- thestage/services/clients/thestage_api/__init__.py +0 -0
- thestage/services/clients/thestage_api/api_client.py +718 -718
- 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 -13
- 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 +193 -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 +1253 -1253
- 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.6.2.dist-info → thestage-0.6.4.dist-info}/LICENSE.txt +12 -12
- {thestage-0.6.2.dist-info → thestage-0.6.4.dist-info}/METADATA +3 -2
- thestage-0.6.4.dist-info/RECORD +176 -0
- {thestage-0.6.2.dist-info → thestage-0.6.4.dist-info}/WHEEL +1 -1
- thestage-0.6.2.dist-info/RECORD +0 -176
- {thestage-0.6.2.dist-info → thestage-0.6.4.dist-info}/entry_points.txt +0 -0
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
import os
|
|
2
|
-
import pathlib
|
|
3
|
-
from typing import Optional
|
|
4
|
-
|
|
5
|
-
from thestage.helpers.error_handler import error_handler
|
|
6
|
-
from thestage.services.service_factory import ServiceFactory
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
def get_current_directory() -> pathlib.Path:
|
|
10
|
-
return pathlib.Path.cwd()
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
@error_handler()
|
|
14
|
-
def validate_config_and_get_service_factory(
|
|
15
|
-
working_directory: Optional[str] = None,
|
|
16
|
-
) -> ServiceFactory:
|
|
17
|
-
local_path = get_current_directory() if not working_directory else os.path.abspath(working_directory)
|
|
18
|
-
|
|
19
|
-
service_factory = ServiceFactory()
|
|
20
|
-
config_provider = service_factory.get_config_provider()
|
|
21
|
-
|
|
22
|
-
config = config_provider.get_config()
|
|
23
|
-
config.runtime.working_directory = str(local_path)
|
|
24
|
-
|
|
25
|
-
config_provider.update_config(updated_config=config)
|
|
26
|
-
|
|
27
|
-
validation_service = service_factory.get_validation_service()
|
|
28
|
-
|
|
29
|
-
validation_service.check_token()
|
|
30
|
-
config_provider.save_config()
|
|
31
|
-
|
|
32
|
-
return service_factory
|
|
1
|
+
import os
|
|
2
|
+
import pathlib
|
|
3
|
+
from typing import Optional
|
|
4
|
+
|
|
5
|
+
from thestage.helpers.error_handler import error_handler
|
|
6
|
+
from thestage.services.service_factory import ServiceFactory
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def get_current_directory() -> pathlib.Path:
|
|
10
|
+
return pathlib.Path.cwd()
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@error_handler()
|
|
14
|
+
def validate_config_and_get_service_factory(
|
|
15
|
+
working_directory: Optional[str] = None,
|
|
16
|
+
) -> ServiceFactory:
|
|
17
|
+
local_path = get_current_directory() if not working_directory else os.path.abspath(working_directory)
|
|
18
|
+
|
|
19
|
+
service_factory = ServiceFactory()
|
|
20
|
+
config_provider = service_factory.get_config_provider()
|
|
21
|
+
|
|
22
|
+
config = config_provider.get_config()
|
|
23
|
+
config.runtime.working_directory = str(local_path)
|
|
24
|
+
|
|
25
|
+
config_provider.update_config(updated_config=config)
|
|
26
|
+
|
|
27
|
+
validation_service = service_factory.get_validation_service()
|
|
28
|
+
|
|
29
|
+
validation_service.check_token()
|
|
30
|
+
config_provider.save_config()
|
|
31
|
+
|
|
32
|
+
return service_factory
|
thestage/debug_main.dist.py
CHANGED
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
from thestage import __app_name__
|
|
2
|
-
|
|
3
|
-
from thestage.controllers import base_controller, container_controller, instance_controller, \
|
|
4
|
-
config_controller, project_controller
|
|
5
|
-
|
|
6
|
-
base_controller.app.add_typer(container_controller.app, name="container")
|
|
7
|
-
base_controller.app.add_typer(instance_controller.app, name="instance")
|
|
8
|
-
base_controller.app.add_typer(config_controller.app, name="config")
|
|
9
|
-
base_controller.app.add_typer(project_controller.app, name="project")
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
def main():
|
|
13
|
-
# example of a command to debug
|
|
14
|
-
project_controller.app([
|
|
15
|
-
"run",
|
|
16
|
-
"-wd",
|
|
17
|
-
"/Users/alexey/Documents/clonetest",
|
|
18
|
-
"-dcuid",
|
|
19
|
-
'62-1',
|
|
20
|
-
'-t',
|
|
21
|
-
'task',
|
|
22
|
-
'-com',
|
|
23
|
-
"'echo 123'"
|
|
24
|
-
], prog_name=__app_name__)
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
if __name__ == "__main__":
|
|
28
|
-
main()
|
|
1
|
+
from thestage import __app_name__
|
|
2
|
+
|
|
3
|
+
from thestage.controllers import base_controller, container_controller, instance_controller, \
|
|
4
|
+
config_controller, project_controller
|
|
5
|
+
|
|
6
|
+
base_controller.app.add_typer(container_controller.app, name="container")
|
|
7
|
+
base_controller.app.add_typer(instance_controller.app, name="instance")
|
|
8
|
+
base_controller.app.add_typer(config_controller.app, name="config")
|
|
9
|
+
base_controller.app.add_typer(project_controller.app, name="project")
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def main():
|
|
13
|
+
# example of a command to debug
|
|
14
|
+
project_controller.app([
|
|
15
|
+
"run",
|
|
16
|
+
"-wd",
|
|
17
|
+
"/Users/alexey/Documents/clonetest",
|
|
18
|
+
"-dcuid",
|
|
19
|
+
'62-1',
|
|
20
|
+
'-t',
|
|
21
|
+
'task',
|
|
22
|
+
'-com',
|
|
23
|
+
"'echo 123'"
|
|
24
|
+
], prog_name=__app_name__)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
if __name__ == "__main__":
|
|
28
|
+
main()
|
thestage/entities/__init__.py
CHANGED
|
File without changes
|
thestage/entities/container.py
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
from typing import Optional
|
|
2
|
-
|
|
3
|
-
from pydantic import BaseModel, ConfigDict, Field
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
class DockerContainerEntity(BaseModel):
|
|
7
|
-
|
|
8
|
-
model_config = ConfigDict(
|
|
9
|
-
populate_by_name=True,
|
|
10
|
-
use_enum_values=True,
|
|
11
|
-
)
|
|
12
|
-
|
|
13
|
-
slug: Optional[str] = Field(None, alias='UNIQUE ID')
|
|
14
|
-
status: Optional[str] = Field(None, alias='STATUS')
|
|
15
|
-
title: Optional[str] = Field(None, alias='TITLE')
|
|
16
|
-
instance_type: Optional[str] = Field(None, alias='INSTANCE TYPE')
|
|
17
|
-
instance_slug: Optional[str] = Field(None, alias='INSTANCE UNIQUE ID')
|
|
1
|
+
from typing import Optional
|
|
2
|
+
|
|
3
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class DockerContainerEntity(BaseModel):
|
|
7
|
+
|
|
8
|
+
model_config = ConfigDict(
|
|
9
|
+
populate_by_name=True,
|
|
10
|
+
use_enum_values=True,
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
slug: Optional[str] = Field(None, alias='UNIQUE ID')
|
|
14
|
+
status: Optional[str] = Field(None, alias='STATUS')
|
|
15
|
+
title: Optional[str] = Field(None, alias='TITLE')
|
|
16
|
+
instance_type: Optional[str] = Field(None, alias='INSTANCE TYPE')
|
|
17
|
+
instance_slug: Optional[str] = Field(None, alias='INSTANCE UNIQUE ID')
|
|
File without changes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
from enum import Enum
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
class OrderDirectionType(str, Enum):
|
|
5
|
-
ASC = "ASC"
|
|
6
|
-
DESC = "DESC"
|
|
1
|
+
from enum import Enum
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class OrderDirectionType(str, Enum):
|
|
5
|
+
ASC = "ASC"
|
|
6
|
+
DESC = "DESC"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
from enum import Enum
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
class ShellType(str, Enum):
|
|
5
|
-
BASH = "/bin/bash"
|
|
6
|
-
SH = "/bin/sh"
|
|
7
|
-
UNKNOWN = "UNKNOWN"
|
|
1
|
+
from enum import Enum
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class ShellType(str, Enum):
|
|
5
|
+
BASH = "/bin/bash"
|
|
6
|
+
SH = "/bin/sh"
|
|
7
|
+
UNKNOWN = "UNKNOWN"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
from enum import Enum
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
class TailOutputType(str, Enum):
|
|
5
|
-
YES = '1'
|
|
6
|
-
NO = '0'
|
|
1
|
+
from enum import Enum
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class TailOutputType(str, Enum):
|
|
5
|
+
YES = '1'
|
|
6
|
+
NO = '0'
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
from enum import Enum
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
class YesOrNoResponse(str, Enum):
|
|
5
|
-
YES = "y"
|
|
6
|
-
NO = "n"
|
|
7
|
-
|
|
1
|
+
from enum import Enum
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class YesOrNoResponse(str, Enum):
|
|
5
|
+
YES = "y"
|
|
6
|
+
NO = "n"
|
|
7
|
+
|
thestage/entities/file_item.py
CHANGED
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
import os
|
|
2
|
-
from pathlib import Path
|
|
3
|
-
from typing import Optional, List
|
|
4
|
-
|
|
5
|
-
from pydantic import BaseModel, ConfigDict, Field
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
class FileItemEntity(BaseModel):
|
|
9
|
-
model_config = ConfigDict(use_enum_values=True)
|
|
10
|
-
|
|
11
|
-
name: Optional[str] = Field(None)
|
|
12
|
-
path: Optional[str] = Field(None)
|
|
13
|
-
is_file: Optional[bool] = Field(False)
|
|
14
|
-
is_folder: Optional[bool] = Field(False)
|
|
15
|
-
file_size: Optional[int] = Field(None)
|
|
16
|
-
children: List['FileItemEntity'] = Field(default=[])
|
|
17
|
-
|
|
18
|
-
@staticmethod
|
|
19
|
-
def build_from_path(path: Path) -> 'FileItemEntity':
|
|
20
|
-
file_stat = os.stat(path)
|
|
21
|
-
return FileItemEntity(
|
|
22
|
-
name=path.name,
|
|
23
|
-
path=str(path.absolute()),
|
|
24
|
-
is_file=path.is_file(),
|
|
25
|
-
is_folder=path.is_dir(),
|
|
26
|
-
file_size=file_stat.st_size,
|
|
27
|
-
)
|
|
1
|
+
import os
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
from typing import Optional, List
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class FileItemEntity(BaseModel):
|
|
9
|
+
model_config = ConfigDict(use_enum_values=True)
|
|
10
|
+
|
|
11
|
+
name: Optional[str] = Field(None)
|
|
12
|
+
path: Optional[str] = Field(None)
|
|
13
|
+
is_file: Optional[bool] = Field(False)
|
|
14
|
+
is_folder: Optional[bool] = Field(False)
|
|
15
|
+
file_size: Optional[int] = Field(None)
|
|
16
|
+
children: List['FileItemEntity'] = Field(default=[])
|
|
17
|
+
|
|
18
|
+
@staticmethod
|
|
19
|
+
def build_from_path(path: Path) -> 'FileItemEntity':
|
|
20
|
+
file_stat = os.stat(path)
|
|
21
|
+
return FileItemEntity(
|
|
22
|
+
name=path.name,
|
|
23
|
+
path=str(path.absolute()),
|
|
24
|
+
is_file=path.is_file(),
|
|
25
|
+
is_folder=path.is_dir(),
|
|
26
|
+
file_size=file_stat.st_size,
|
|
27
|
+
)
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
from typing import Optional
|
|
2
|
-
|
|
3
|
-
from pydantic import BaseModel, ConfigDict, Field
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
class ProjectInferenceSimulatorEntity(BaseModel):
|
|
7
|
-
|
|
8
|
-
model_config = ConfigDict(
|
|
9
|
-
populate_by_name=True,
|
|
10
|
-
use_enum_values=True,
|
|
11
|
-
)
|
|
12
|
-
|
|
13
|
-
slug: Optional[str] = Field(None, alias='UNIQUE ID')
|
|
14
|
-
status: Optional[str] = Field(None, alias='STATUS')
|
|
15
|
-
http_endpoint: Optional[str] = Field(None, alias="HTTP")
|
|
16
|
-
grpc_endpoint: Optional[str] = Field(None, alias="GRPC")
|
|
17
|
-
metrics_endpoint: Optional[str] = Field(None, alias="METRICS")
|
|
18
|
-
started_at: Optional[str] = Field(None, alias='STARTED AT')
|
|
1
|
+
from typing import Optional
|
|
2
|
+
|
|
3
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class ProjectInferenceSimulatorEntity(BaseModel):
|
|
7
|
+
|
|
8
|
+
model_config = ConfigDict(
|
|
9
|
+
populate_by_name=True,
|
|
10
|
+
use_enum_values=True,
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
slug: Optional[str] = Field(None, alias='UNIQUE ID')
|
|
14
|
+
status: Optional[str] = Field(None, alias='STATUS')
|
|
15
|
+
http_endpoint: Optional[str] = Field(None, alias="HTTP")
|
|
16
|
+
grpc_endpoint: Optional[str] = Field(None, alias="GRPC")
|
|
17
|
+
metrics_endpoint: Optional[str] = Field(None, alias="METRICS")
|
|
18
|
+
started_at: Optional[str] = Field(None, alias='STARTED AT')
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
from typing import Optional
|
|
2
|
-
|
|
3
|
-
from pydantic import BaseModel, ConfigDict, Field
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
class ProjectInferenceSimulatorModelEntity(BaseModel):
|
|
7
|
-
|
|
8
|
-
model_config = ConfigDict(
|
|
9
|
-
populate_by_name=True,
|
|
10
|
-
use_enum_values=True,
|
|
11
|
-
)
|
|
12
|
-
|
|
13
|
-
id: Optional[int] = Field(None, alias='ID')
|
|
14
|
-
slug: Optional[str] = Field(None, alias='UNIQUE_ID')
|
|
15
|
-
status: Optional[str] = Field(None, alias='STATUS')
|
|
16
|
-
commit_hash: Optional[str] = Field(None, alias='COMMIT_HASH')
|
|
17
|
-
environment_metadata: Optional[str] = Field(None, alias='ENVIRONMENT_METADATA')
|
|
1
|
+
from typing import Optional, Any, Dict
|
|
2
|
+
|
|
3
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class ProjectInferenceSimulatorModelEntity(BaseModel):
|
|
7
|
+
|
|
8
|
+
model_config = ConfigDict(
|
|
9
|
+
populate_by_name=True,
|
|
10
|
+
use_enum_values=True,
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
id: Optional[int] = Field(None, alias='ID')
|
|
14
|
+
slug: Optional[str] = Field(None, alias='UNIQUE_ID')
|
|
15
|
+
status: Optional[str] = Field(None, alias='STATUS')
|
|
16
|
+
commit_hash: Optional[str] = Field(None, alias='COMMIT_HASH')
|
|
17
|
+
environment_metadata: Optional[Dict[str, Any]] = Field(None, alias='ENVIRONMENT_METADATA')
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
from typing import Optional
|
|
2
|
-
|
|
3
|
-
from pydantic import BaseModel, ConfigDict, Field
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
class ProjectTaskEntity(BaseModel):
|
|
7
|
-
|
|
8
|
-
model_config = ConfigDict(
|
|
9
|
-
populate_by_name=True,
|
|
10
|
-
use_enum_values=True,
|
|
11
|
-
)
|
|
12
|
-
|
|
13
|
-
id: Optional[int] = Field(None, alias='ID')
|
|
14
|
-
title: Optional[str] = Field(None, alias='TITLE')
|
|
15
|
-
status: Optional[str] = Field(None, alias='STATUS')
|
|
16
|
-
docker_container_id: Optional[int] = Field(None, alias='DOCKER_CONTAINER_ID')
|
|
17
|
-
docker_container_slug: Optional[str] = Field(None, alias='DOCKER_CONTAINER_UID')
|
|
18
|
-
started_at: Optional[str] = Field(None, alias='STARTED AT')
|
|
19
|
-
finished_at: Optional[str] = Field(None, alias='FINISHED_AT')
|
|
1
|
+
from typing import Optional
|
|
2
|
+
|
|
3
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class ProjectTaskEntity(BaseModel):
|
|
7
|
+
|
|
8
|
+
model_config = ConfigDict(
|
|
9
|
+
populate_by_name=True,
|
|
10
|
+
use_enum_values=True,
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
id: Optional[int] = Field(None, alias='ID')
|
|
14
|
+
title: Optional[str] = Field(None, alias='TITLE')
|
|
15
|
+
status: Optional[str] = Field(None, alias='STATUS')
|
|
16
|
+
docker_container_id: Optional[int] = Field(None, alias='DOCKER_CONTAINER_ID')
|
|
17
|
+
docker_container_slug: Optional[str] = Field(None, alias='DOCKER_CONTAINER_UID')
|
|
18
|
+
started_at: Optional[str] = Field(None, alias='STARTED AT')
|
|
19
|
+
finished_at: Optional[str] = Field(None, alias='FINISHED_AT')
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
from typing import Optional
|
|
2
|
-
|
|
3
|
-
from pydantic import BaseModel, ConfigDict, Field
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
class RentedInstanceEntity(BaseModel):
|
|
7
|
-
|
|
8
|
-
model_config = ConfigDict(
|
|
9
|
-
populate_by_name=True,
|
|
10
|
-
use_enum_values=True
|
|
11
|
-
)
|
|
12
|
-
|
|
13
|
-
status: Optional[str] = Field(None, alias='STATUS')
|
|
14
|
-
title: Optional[str] = Field(None, alias='TITLE')
|
|
15
|
-
slug: Optional[str] = Field(None, alias='UNIQUE ID')
|
|
16
|
-
cpu_type: Optional[str] = Field(None, alias='CPU TYPE')
|
|
17
|
-
cpu_cores: Optional[str] = Field(None, alias='CPU CORES')
|
|
18
|
-
gpu_type: Optional[str] = Field(None, alias='GPU TYPE')
|
|
19
|
-
ip_address: Optional[str] = Field(None, alias='IP ADDRESS')
|
|
1
|
+
from typing import Optional
|
|
2
|
+
|
|
3
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class RentedInstanceEntity(BaseModel):
|
|
7
|
+
|
|
8
|
+
model_config = ConfigDict(
|
|
9
|
+
populate_by_name=True,
|
|
10
|
+
use_enum_values=True
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
status: Optional[str] = Field(None, alias='STATUS')
|
|
14
|
+
title: Optional[str] = Field(None, alias='TITLE')
|
|
15
|
+
slug: Optional[str] = Field(None, alias='UNIQUE ID')
|
|
16
|
+
cpu_type: Optional[str] = Field(None, alias='CPU TYPE')
|
|
17
|
+
cpu_cores: Optional[str] = Field(None, alias='CPU CORES')
|
|
18
|
+
gpu_type: Optional[str] = Field(None, alias='GPU TYPE')
|
|
19
|
+
ip_address: Optional[str] = Field(None, alias='IP ADDRESS')
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
from typing import Optional
|
|
2
|
-
|
|
3
|
-
from pydantic import BaseModel, ConfigDict, Field
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
class SelfHostedInstanceEntity(BaseModel):
|
|
7
|
-
model_config = ConfigDict(
|
|
8
|
-
use_enum_values=True,
|
|
9
|
-
populate_by_name=True,
|
|
10
|
-
)
|
|
11
|
-
|
|
12
|
-
status: Optional[str] = Field(None, alias='STATUS')
|
|
13
|
-
title: Optional[str] = Field(None, alias='TITLE')
|
|
14
|
-
slug: Optional[str] = Field(None, alias='SLUG')
|
|
15
|
-
cpu_type: Optional[str] = Field(str, alias='CPU_TYPE')
|
|
16
|
-
cpu_cores: Optional[int] = Field(None, alias='CPU_CORES')
|
|
17
|
-
gpu_type: Optional[str] = Field(str, alias='GPU_TYPE')
|
|
18
|
-
ip_address: Optional[str] = Field(None, alias='IP_ADDRESS')
|
|
1
|
+
from typing import Optional
|
|
2
|
+
|
|
3
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class SelfHostedInstanceEntity(BaseModel):
|
|
7
|
+
model_config = ConfigDict(
|
|
8
|
+
use_enum_values=True,
|
|
9
|
+
populate_by_name=True,
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
status: Optional[str] = Field(None, alias='STATUS')
|
|
13
|
+
title: Optional[str] = Field(None, alias='TITLE')
|
|
14
|
+
slug: Optional[str] = Field(None, alias='SLUG')
|
|
15
|
+
cpu_type: Optional[str] = Field(str, alias='CPU_TYPE')
|
|
16
|
+
cpu_cores: Optional[int] = Field(None, alias='CPU_CORES')
|
|
17
|
+
gpu_type: Optional[str] = Field(str, alias='GPU_TYPE')
|
|
18
|
+
ip_address: Optional[str] = Field(None, alias='IP_ADDRESS')
|
thestage/exceptions/__init__.py
CHANGED
|
File without changes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
from thestage.exceptions.base_exception import BaseAbstractException
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
class AuthException(BaseAbstractException):
|
|
5
|
-
def __init__(self, message: str):
|
|
6
|
-
super(AuthException, self).__init__(message=message)
|
|
1
|
+
from thestage.exceptions.base_exception import BaseAbstractException
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class AuthException(BaseAbstractException):
|
|
5
|
+
def __init__(self, message: str):
|
|
6
|
+
super(AuthException, self).__init__(message=message)
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
class BaseAbstractException(Exception):
|
|
3
|
-
def __init__(self, message: str):
|
|
4
|
-
self._message = message
|
|
5
|
-
|
|
6
|
-
def __str__(self):
|
|
7
|
-
return self._message
|
|
8
|
-
|
|
9
|
-
def __repr__(self):
|
|
10
|
-
return self._message
|
|
11
|
-
|
|
12
|
-
def get_message(self) -> str:
|
|
13
|
-
return self._message
|
|
1
|
+
|
|
2
|
+
class BaseAbstractException(Exception):
|
|
3
|
+
def __init__(self, message: str):
|
|
4
|
+
self._message = message
|
|
5
|
+
|
|
6
|
+
def __str__(self):
|
|
7
|
+
return self._message
|
|
8
|
+
|
|
9
|
+
def __repr__(self):
|
|
10
|
+
return self._message
|
|
11
|
+
|
|
12
|
+
def get_message(self) -> str:
|
|
13
|
+
return self._message
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
from thestage.exceptions.base_exception import BaseAbstractException
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
class BusinessLogicException(BaseAbstractException):
|
|
5
|
-
def __init__(self, message: str):
|
|
6
|
-
super(BusinessLogicException, self).__init__(message=message)
|
|
1
|
+
from thestage.exceptions.base_exception import BaseAbstractException
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class BusinessLogicException(BaseAbstractException):
|
|
5
|
+
def __init__(self, message: str):
|
|
6
|
+
super(BusinessLogicException, self).__init__(message=message)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
from thestage.exceptions.base_exception import BaseAbstractException
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
class ConfigException(BaseAbstractException):
|
|
5
|
-
def __init__(self, message: str):
|
|
6
|
-
super(ConfigException, self).__init__(message=message)
|
|
1
|
+
from thestage.exceptions.base_exception import BaseAbstractException
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class ConfigException(BaseAbstractException):
|
|
5
|
+
def __init__(self, message: str):
|
|
6
|
+
super(ConfigException, self).__init__(message=message)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
from thestage.exceptions.base_exception import BaseAbstractException
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
class FileSystemException(BaseAbstractException):
|
|
5
|
-
def __init__(self, message: str):
|
|
6
|
-
super(FileSystemException, self).__init__(message=message)
|
|
1
|
+
from thestage.exceptions.base_exception import BaseAbstractException
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class FileSystemException(BaseAbstractException):
|
|
5
|
+
def __init__(self, message: str):
|
|
6
|
+
super(FileSystemException, self).__init__(message=message)
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
from thestage.exceptions.base_exception import BaseAbstractException
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
class GitAccessException(BaseAbstractException):
|
|
5
|
-
|
|
6
|
-
__url: str
|
|
7
|
-
|
|
8
|
-
def __init__(self, message: str, url: str, dop_message: str):
|
|
9
|
-
super(GitAccessException, self).__init__(message=message)
|
|
10
|
-
self.__url = url
|
|
11
|
-
self.__dop_message = dop_message
|
|
12
|
-
|
|
13
|
-
def get_url(self) -> str:
|
|
14
|
-
return self.__url
|
|
15
|
-
|
|
16
|
-
def get_dop_message(self) -> str:
|
|
17
|
-
return self.__dop_message
|
|
1
|
+
from thestage.exceptions.base_exception import BaseAbstractException
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class GitAccessException(BaseAbstractException):
|
|
5
|
+
|
|
6
|
+
__url: str
|
|
7
|
+
|
|
8
|
+
def __init__(self, message: str, url: str, dop_message: str):
|
|
9
|
+
super(GitAccessException, self).__init__(message=message)
|
|
10
|
+
self.__url = url
|
|
11
|
+
self.__dop_message = dop_message
|
|
12
|
+
|
|
13
|
+
def get_url(self) -> str:
|
|
14
|
+
return self.__url
|
|
15
|
+
|
|
16
|
+
def get_dop_message(self) -> str:
|
|
17
|
+
return self.__dop_message
|
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
from typing import Optional
|
|
2
|
-
|
|
3
|
-
from thestage.exceptions.base_exception import BaseAbstractException
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
class RemoteServerException(BaseAbstractException):
|
|
7
|
-
|
|
8
|
-
def __init__(
|
|
9
|
-
self,
|
|
10
|
-
message: str,
|
|
11
|
-
ip_address: Optional[str] = None,
|
|
12
|
-
username: Optional[str] = None,
|
|
13
|
-
):
|
|
14
|
-
super(RemoteServerException, self).__init__(message=message)
|
|
15
|
-
self._ip_address = ip_address
|
|
16
|
-
self._username = username
|
|
17
|
-
|
|
18
|
-
@property
|
|
19
|
-
def ip_address(self):
|
|
20
|
-
return self._ip_address
|
|
21
|
-
|
|
22
|
-
@property
|
|
23
|
-
def username(self):
|
|
24
|
-
return self._username
|
|
1
|
+
from typing import Optional
|
|
2
|
+
|
|
3
|
+
from thestage.exceptions.base_exception import BaseAbstractException
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class RemoteServerException(BaseAbstractException):
|
|
7
|
+
|
|
8
|
+
def __init__(
|
|
9
|
+
self,
|
|
10
|
+
message: str,
|
|
11
|
+
ip_address: Optional[str] = None,
|
|
12
|
+
username: Optional[str] = None,
|
|
13
|
+
):
|
|
14
|
+
super(RemoteServerException, self).__init__(message=message)
|
|
15
|
+
self._ip_address = ip_address
|
|
16
|
+
self._username = username
|
|
17
|
+
|
|
18
|
+
@property
|
|
19
|
+
def ip_address(self):
|
|
20
|
+
return self._ip_address
|
|
21
|
+
|
|
22
|
+
@property
|
|
23
|
+
def username(self):
|
|
24
|
+
return self._username
|