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
109
110
111
112
113
114
115
116
117
|
from typing import cast
import os
import shutil
from .. import shared, ui, template
from ..core import path as ecrpath
from ..core import WorkManager
from ..ui import SwitchState
from ..ui.command import Command, Namespace, ReturnCode
from .helper import assertInited, printFileCreate, printFileDelete
class TemplateCommand(Command):
@staticmethod
def default(args: Namespace) -> ReturnCode: # pylint: disable=W0613
if not assertInited():
return ReturnCode.UNLOADED
return ReturnCode.OK
@staticmethod
def new(args: Namespace) -> ReturnCode:
if not assertInited():
return ReturnCode.UNLOADED
tman: WorkManager = cast(WorkManager, shared.getManager())
template.initialize(os.path.join(
ecrpath.getTemplatePath(tman.workingDirectory), args.name))
printFileCreate(args.name)
return ReturnCode.OK
@staticmethod
def clear(args: Namespace) -> ReturnCode:
if not assertInited():
return ReturnCode.UNLOADED
tman: WorkManager = cast(WorkManager, shared.getManager())
console = ui.getConsole()
if console.confirm(f"Do you want to clear template config of `{args.name}`?",
[SwitchState.Yes, SwitchState.No]) == SwitchState.Yes:
template.clear(os.path.join(ecrpath.getTemplatePath(
tman.workingDirectory), args.name))
return ReturnCode.OK
@staticmethod
def remove(args: Namespace) -> ReturnCode:
if not assertInited():
return ReturnCode.UNLOADED
tman: WorkManager = cast(WorkManager, shared.getManager())
console = ui.getConsole()
if console.confirm(f"Do you want to remove template `{args.name}`?",
[SwitchState.Yes, SwitchState.No]) == SwitchState.Yes:
shutil.rmtree(os.path.join(ecrpath.getTemplatePath(
tman.workingDirectory), args.name))
printFileDelete(args.name)
return ReturnCode.OK
@staticmethod
def showTemplate(basepath)->None:
tem, exp = template.load(basepath)
console = ui.getConsole()
if exp:
console.error(f"Loading template failed: {exp}")
else:
import json
if tem:
console.write(json.dumps(
tem.__dict__, default=str, indent=4))
else:
console.write("None")
@staticmethod
def show(args: Namespace) -> ReturnCode:
if not assertInited():
return ReturnCode.UNLOADED
tman: WorkManager = cast(WorkManager, shared.getManager())
console = ui.getConsole()
if args.name:
tpath = os.path.join(
ecrpath.getTemplatePath(tman.workingDirectory), args.name)
if os.path.isdir(tpath):
TemplateCommand.showTemplate(tpath)
return ReturnCode.OK
else:
console.write("No this template.")
return ReturnCode.OK
else:
basepath = ecrpath.getTemplatePath(tman.workingDirectory)
for item in os.listdir(basepath):
itempath = os.path.join(basepath, item)
if os.path.isfile(itempath):
continue
console.info(item)
TemplateCommand.showTemplate(itempath)
return ReturnCode.OK
def __init__(self):
super().__init__("template", help="Tools for templates", func=TemplateCommand.default)
def createParser(self, parsers):
cmd = super().createParser(parsers)
subpars = cmd.add_subparsers()
cmd_new = subpars.add_parser("new", help="Create new template")
cmd_new.add_argument("name", type=str, help="Template name")
cmd_new.set_defaults(func=TemplateCommand.new)
cmd_clear = subpars.add_parser("clear", help="Clear template config")
cmd_clear.add_argument("name", type=str, help="Template name")
cmd_clear.set_defaults(func=TemplateCommand.clear)
cmd_remove = subpars.add_parser("remove", help="Remove template")
cmd_remove.add_argument("name", type=str, help="Template name")
cmd_remove.set_defaults(func=TemplateCommand.remove)
cmd_show = subpars.add_parser("show", help="Show template config")
cmd_show.add_argument("name", nargs="?", default=None,
type=str, help="Template name (empty to show all)")
cmd_show.set_defaults(func=TemplateCommand.show)
return cmd
|