File size: 2,771 Bytes
dc9e27a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# msdl/__main__.py
import signal
import sys
import argparse
import os
from pathlib import Path

from msdl.config import (
    BACKEND_DOCKERFILE_DIR,
    FRONTEND_DOCKERFILE_DIR,
    PACKAGE_DIR,
    PROJECT_ROOT,
    REACT_DOCKERFILE,
    TEMP_DIR,
    TEMPLATE_FILES,
)
from msdl.docker_manager import (
    check_docker_install,
    run_docker_compose,
    stop_and_remove_containers,
    update_docker_compose_paths,
)
from msdl.i18n import (
    setup_i18n,
    t,
)
from msdl.utils import (
    copy_templates_to_temp,
    copy_backend_dockerfile,
    copy_frontend_dockerfile,
    modify_docker_compose,
)
from msdl.user_interaction import get_user_choices


def signal_handler(signum, frame):
    print(t("TERMINATION_SIGNAL"))
    stop_and_remove_containers()
    sys.exit(0)


def parse_args():
    parser = argparse.ArgumentParser(description=t("CLI_DESCRIPTION"))
    parser.add_argument('--language', '-l', 
                      help=t("LANGUAGE_HELP"),
                      choices=["en", "zh_CN"],
                      default=None)
    parser.add_argument('--config-language', action='store_true',
                      help=t("CONFIG_LANGUAGE_HELP"))
    return parser.parse_args()


def main():
    # Setup signal handler
    signal.signal(signal.SIGINT, signal_handler)
    signal.signal(signal.SIGTERM, signal_handler)

    # Initialize i18n
    setup_i18n()

    # Parse command line arguments
    args = parse_args()
    if args.language:
        # set_language(args.language)
        # Reinitialize i18n with new language
        setup_i18n()

    try:
        # Check if TEMP_DIR exists, if not, create it
        if not TEMP_DIR.exists():
            TEMP_DIR.mkdir(parents=True, exist_ok=True)
            print(t("TEMP_DIR_CREATED", dir=str(TEMP_DIR)))

        check_docker_install()

        # Get user choices using the new module
        backend_language, model, model_format, search_engine = get_user_choices()

        # Copy template files
        copy_templates_to_temp(TEMPLATE_FILES)

        # Copy Dockerfiles
        copy_backend_dockerfile(model)
        copy_frontend_dockerfile()

        # Update paths in docker-compose.yml
        update_docker_compose_paths()

        # Modify docker-compose.yml based on user choices
        modify_docker_compose(model, backend_language, model_format, search_engine)

        stop_and_remove_containers()
        run_docker_compose()

        print(t("DOCKER_LAUNCHER_COMPLETE"))
    except KeyboardInterrupt:
        print(t("KEYBOARD_INTERRUPT"))
        # stop_and_remove_containers()
        sys.exit(0)
    except Exception as e:
        print(t("UNEXPECTED_ERROR", error=str(e)))
        # stop_and_remove_containers()
        sys.exit(1)


if __name__ == "__main__":
    main()